기본적인 kubernetes resource, option 등을 설명한 블로그입니다. 추가적인 기능을 보고싶으시면 docs를 참고바랍니다.
https://kubernetes.io/docs/home/
- kubectl edit pod [pod name] -> 동작 중 pod 수정.
- kubectl get pods -o wide --watch -> pod동작 과정 한줄한줄로 보여준다.
- kubectl delete pods <pod> --grace-period=0 --force -> 강제로 pod delete(default 30초지만 0초로 설정)
- livenessProbe -> self-healing 용도 (응답안하면 kill하고 restart)
kind: Pod
...
spec:
containers:
- name: nginx-container
image: nginx:1.14
livenessProbe:
httpGet:
path: /
port: 80
# tcpSocket
# port: 22 (SSH. 만약 다른 port를 쓰면 그 port를 적으면 됨)
# exec:
# command:
# - ls
# - /data/file (명령은 다를 수 있다. container 목적에 따라 다름.)
# httpGet으로 80번 포트를 이용해서 livenessProbe를 완성하겠다. (webserver)
# tcpSocket은 tcp로 연결시도
# exec 명령을 전달하고 종료코드가 0이 아니면
# 다시시작.
# describe를 통해 liveness를 볼 수 있고, delay, timeout 등등 default로 들어간다.
# kubectl get pods [pods name] -o yaml을 통해 delay, timeout등의 속성 key-value값을 알 수 있다.
...
livenessProbe:
exec:
command:
- ls
- /tmp/healthy
initialDelaySeconds: 10
failureThreshold: 2
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 1
# pod 실행 후 10초 후에 /tmp/healthy파일이 있는지 5초마다 실행 성공은 1번, 실패는 2번까지.
- 그 밖에도 readinessProbe(container가 응답가능한 상태인지, 아니라면 service endpoint에서 제거), startupProbe(container 내의 application이 시작되었는지 확인, 이 옵션이 제공되면, 성공할때까지 다른 probe는 disable된다. 실패하면 kill하고 restart한다.)
- 하나의 pod에는 여러 개의 container(docker image)가 들어갈 수 있음.
- init container를 포함한 pod는 init container가 성공해야 다른 container가 실행된다.
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io\
/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/\
serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
# myservice와 mydb가 실행될 때 까지 myapp-container는 실행되지 않는다.
# init 1개가 성공하면 status에 Init:1/2이런식으로 뜬다.
- pause container(pod가 생성될 때 default로 생성, ip나 hostname 등의 network 관리)
- 다른 container에서 만들어진 log를 이용하는 container 같은 경우는 Sidecar
- Monitoring 정보를 app container로 전달하는 경우 adapter
- app container에서 정보를 받아서 product를 분산해주는 경우 ambassador
- static pod(control plane의 api에게 요청하지 않고, 각 노드의 kubelet이 /etc/kubernetes/manifests/[staticpod].yaml을 관리하고 실행시킴) -> master노드의 control plane에 관계 없이, 특정 노드에 pod 설치하려고 할 때.
- /etc/kubernetes/manifests/[staticpod].yaml 수정시 systemctl restart kubelet
- /var/lib/kubelet/config.yaml에 static pod directory정보 있음 -> config.yaml파일을 수정해서 static pod directory 위치를 바꿀 수 있음. -> systemctl restart kubelet.
- 혹은 kubelet --pod-manifest-path=[directory] 옵션을 줘서 바꿀 수 있음.
- kube-apiserver에서 worker node의 static pod를 안다.(read only) -> daemonset과 함께 kube-scheduler에 의해 무시되는 type.
- static pod의 name은 마지막에 node 이름이 들어간다.
'kubernetes, helm, rancher' 카테고리의 다른 글
kubernetes ReplicaSet, Deployment, Daemon set (0) | 2021.11.24 |
---|---|
kubernetes pod resources, env, ReplicationController (0) | 2021.11.23 |
kubernetes namespace, resourcequota (0) | 2021.11.20 |
kubernetes란? (0) | 2021.11.18 |
http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused error while installing kubernetes (0) | 2021.11.18 |