본문 바로가기

K8s

k8s - pod

pod?

: 쿠버네티스에서 관리하는 가장 작은 단위

  단일 목적을 수행하기 위한 한 개 이상의 컨테이너로 구성된 컨테이너 집합

   Voloume + Container

 

1. status

Container Creating 이미지 다운 중이거나 컨테이너 생성 중
CrashLoopBackOff 파드 내의 컨테이너가 종료되어 다음 기동시까지 대기 상태
Pending 리소스가 부족해 생성이 보류된상태
Terminating 컨테이너에 종료 요청 시그널을 보낸 후 컨테이너가 종료할때까지 대기 중을 의미
Completed 파드 내 컨테니너가 정상적으로 종료되었음을 의미
파드 내에 복수의 컨테이너가 생성된 경우, 첫 번째 컨테이너가 정상 종료된 경우
Error 컨테이너가 이상 종료된 경우
파드 재에 복수의 컨테이너가 생성된 경우 , 첫 번째 컨테이너가 이상 종료된 경우

2. pod 생성

nginx 컨테이너로 구성된 파드를 생성

 

1) CLI

root@master:/home/vagrant# kubectl run my-nginx-pod-cli --image=nginx:latest --port 80
pod/my-nginx-pod-cli created           ~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~  
                                       파드 이름        파드 생성에 사용할 이미지     컨테이너에서 사용하는 포트
root@master:/home/vagrant# kubectl get pod
NAME               READY   STATUS              RESTARTS   AGE
my-nginx-pod-cli   0/1     ContainerCreating   0          7s

root@master:/home/vagrant# kubectl get pod
NAME               READY   STATUS    RESTARTS   AGE
my-nginx-pod-cli   1/1     Running   0          2m12s

2) YAML 

root@master:/home/vagrant# vi nginx-pod.yaml
apiVersion: v1				# YAML 파일에서 정의한 오브젝트의 API 버전
kind: Pod				# 리소스의 종류 ( kubectl api-resources 명령의 KIND 항목 )
metadata:				# 라벨, 주석(annotation), 이름과 같은 리소스의 부가 정의
  name: my-nginx-pod
spec:					# 리소스 생성을 위한 정보
  containers:
  - name: my-nginx-container
    image: nginx:latest
    ports:
    - containerPort: 80
      protocol: TCP


root@master:/home/vagrant# kubectl apply -f nginx-pod.yaml
pod/my-nginx-pod created

root@master:/home/vagrant# kubectl get pod
NAME               READY   STATUS              RESTARTS   AGE
my-nginx-pod       0/1     ContainerCreating   0          4s
my-nginx-pod-cli   1/1     Running             0          11m

root@master:/home/vagrant# kubectl get pod
NAME               READY   STATUS    RESTARTS   AGE
my-nginx-pod       1/1     Running   0          30s
my-nginx-pod-cli   1/1     Running   0          11m

3. pod의 자세한 정보 확인

root@master:/home/vagrant# kubectl describe pods my-nginx-pod
Name:             my-nginx-pod
Namespace:        default
Priority:         0
Service Account:  default
Node:             worker2/192.168.10.120
Start Time:       Thu, 05 Oct 2023 09:35:33 +0900
Labels:           <none>
Annotations:      cni.projectcalico.org/containerID: 0efd9cdd086dc6d97e07ac287031ed60737fb83a7394923c038ec9835267a28d
                  cni.projectcalico.org/podIP: 10.233.125.6/32
                  cni.projectcalico.org/podIPs: 10.233.125.6/32
Status:           Running
IP:               10.233.125.6	⇐ 파드 IP (클러스터 내부에서만 접근이 가능)
IPs:					   → 쿠버네티스 외부 또는 내부에서 파드에 접근하려면 서비스를 생성해야 함
  IP:  10.233.125.6
Containers:
  my-nginx-container:
    Container ID:   containerd://3270e6b5ba24638ed577aa27a222912244babee1915e44188a6ea9444dacf7ba
    Image:          nginx:latest
    Image ID:       docker.io/library/nginx@sha256:32da30332506740a2f7c34d5dc70467b7f14ec67d912703568daff790ab3f755
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 05 Oct 2023 09:35:53 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bs4qt (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-bs4qt:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  10m   default-scheduler  Successfully assigned default/my-nginx-pod to worker2
  Normal  Pulling    10m   kubelet            Pulling image "nginx:latest"
  Normal  Pulled     10m   kubelet            Successfully pulled image "nginx:latest" in 18.263s (18.264s including waiting)
  Normal  Created    10m   kubelet            Created container my-nginx-container
  Normal  Started    10m   kubelet            Started container my-nginx-container

쿠버네티스가 파드를 사용하는 이유

: 여러 리눅스 네임스페이스를 공유하는 여러 컨테이너들을 추상화된 집합으로 사용하기 위함

728x90

'K8s' 카테고리의 다른 글

쿠버네티스(kubernetes, k8s)  (1) 2023.10.23
쿠버네티스 실습  (1) 2023.10.12