본문 바로가기
도커&쿠버네티스/쿠버네티스

#1 POD

by 취미툰 2022. 11. 2.
반응형

특징

쿠버네티스에서 컨테이너를 다루는 기본단위입니다.

포드는 한개 이상의 컨테이너로 구성된 컨테이너의 집합입니다.

가상머신의 인스턴스나 도커의 컨테이너와 비슷한 개념입니다. 쿠버네티스 내에서는 POD를 이용해서 무조건 실행됩니다.

 

일반적으로는 한개의 포드에는 한개의 컨테이너를 구성하는것이 대부분입니다.

(두개 이상 구성할 때는 로깅이나 모니터링이 필요한 컨테이너를 추가할 때 등 부수적으로 필요한 컨테이너는 추가하는 경우가 있습니다.)

 

출처 : https://kubernetes.io/docs/concepts/workloads/pods/

 

테스트1.Single 컨테이너 pod 생성 테스트

 

1.pod.yaml파일 생성.

vi pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2

YAML파일은 apiVersion,kind,metadata,spec 4가지 항목으로 구성됩니다.

 

apiVersion: YAML파일에서 정의한 오브젝트의 API버전을 나타냅니다.
kind: 사용하고자 하는 리소스의 종류를 나타냅니다.
metadata:라벨,주석 등 리소스의 부가정보들을 입력합니다.
spec:리소스를 생성하기 위한 자세한 정보를 입력합니다.(어떻게 동작하고 어느 컨테이너를 갖고 실핼할지 등)

 

2.kubectl apply -f [파일명]

$ kubectl apply -f pod.yaml 
pod/nginx created

POD를 실행하는 방법에는 두가지가 있습니다. yaml파일이 기록이 남고 관리상 이점이 크기때문에 yaml 파일로 생성하는것을 권장합니다.

직접 명령어로 실행하는 방법은 아래에 표시해두겠습니다.(접은글 확인)

더보기

kubectl run mypod --image=nginx

 

3.확인

$ kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          10s

get 명령어로 확인 결과 READY 항목에 1/1인 것을 확인할 수 있습니다. 즉 한 POD에 여러개의 컨테이너가 작동할 수 있다는 것을 보여줍니다. 그다음테스트에서 2개의 컨테이너를 한 POD내에서 띄우는 테스트를 진행하겠습니다.

 

4.확인2

describe 명령어는 좀더 상세한 pod에 대한 정보를 보여줍니다.

$ kubectl describe pod
Name:         nginx
Namespace:    default
Priority:     0
Node:         node01/172.30.2.2
Start Time:   Wed, 02 Nov 2022 06:50:16 +0000
Labels:       <none>
Annotations:  cni.projectcalico.org/containerID: 279bf0cfedf2f823272cbbdd0d9db42b81b4969b051979b406e5148a06797bf3
              cni.projectcalico.org/podIP: 192.168.1.4/32
              cni.projectcalico.org/podIPs: 192.168.1.4/32
Status:       Running
IP:           192.168.1.4
IPs:
  IP:  192.168.1.4
Containers:
  nginx:
    Container ID:   containerd://e01bc9c4a49ef5a2b21cd1626c90052221d7cf67fd0b0d5ca97240aa5f565ed5
    Image:          nginx:1.14.2
    Image ID:       docker.io/library/nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Wed, 02 Nov 2022 06:50:17 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-b579n (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-b579n:
    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  18s   default-scheduler  Successfully assigned default/nginx to node01
  Normal  Pulled     18s   kubelet            Container image "nginx:1.14.2" already present on machine
  Normal  Created    17s   kubelet            Created container nginx
  Normal  Started    17s   kubelet            Started container nginx

잘 생성되었습니다.

 

 

테스트2.multi컨테이너를 한 POD에서 생성

 

1.pod2.yaml파일 생성

alice106/rr-test:curl이라는 테스트 이미지를 한개 더 추가하는 pod2.yaml을 생성합니다.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
  - name: kubernetes-simple-pod
    image: alicek106/rr-test:curl
    command: ["tail"]
    args: ["-f", "/dev/null"]

 

2.수행

$ kubectl apply -f pod2.yaml
pod/nginx created

 

3.확인

$ kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
nginx   2/2     Running   0          81s

두개를 실행시키니 2/2로 표시되는 것을 확인할 수 있습니다.

 

4.확인2

$ kubectl describe pod
Name:         nginx
Namespace:    default
Priority:     0
Node:         node01/172.30.2.2
Start Time:   Wed, 02 Nov 2022 07:28:21 +0000
Labels:       <none>
Annotations:  cni.projectcalico.org/containerID: a86a49ccb7b1de44c7b992ad1ad796dc53b916e92b2da692bdf4a74e962b525f
              cni.projectcalico.org/podIP: 192.168.1.3/32
              cni.projectcalico.org/podIPs: 192.168.1.3/32
Status:       Running
IP:           192.168.1.3
IPs:
  IP:  192.168.1.3
Containers:
  nginx:
    Container ID:   containerd://34c9f5fda44fb6d5734aecffe29705dbc682bbb8ddd104eb4015f73c33f1fde3
    Image:          nginx:1.14.2
    Image ID:       docker.io/library/nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Wed, 02 Nov 2022 07:28:28 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-rhf88 (ro)
  kubernetes-simple-pod:
    Container ID:  containerd://55cf9a4171d5e2f134a83dccb00f918c2a1ad6aa1b2b80118944fad5b0ba3b49
    Image:         alicek106/rr-test:curl
    Image ID:      docker.io/alicek106/rr-test@sha256:968adcf8568e3b5b8c7d73d9c577b589a517f9d821809f7bf7ee6f3363fbd3cf
    Port:          <none>
    Host Port:     <none>
    Command:
      tail
    Args:
      -f
      /dev/null
    State:          Running
      Started:      Wed, 02 Nov 2022 07:28:40 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-rhf88 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-rhf88:
    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  105s  default-scheduler  Successfully assigned default/nginx to node01
  Normal  Pulling    105s  kubelet            Pulling image "nginx:1.14.2"
  Normal  Pulled     99s   kubelet            Successfully pulled image "nginx:1.14.2" in 5.935269147s
  Normal  Created    99s   kubelet            Created container nginx
  Normal  Started    99s   kubelet            Started container nginx
  Normal  Pulling    99s   kubelet            Pulling image "alicek106/rr-test:curl"
  Normal  Pulled     89s   kubelet            Successfully pulled image "alicek106/rr-test:curl" in 9.635473445s
  Normal  Created    87s   kubelet            Created container kubernetes-simple-pod
  Normal  Started    87s   kubelet            Started container kubernetes-simple-pod

 

 

 

 

 

 

출처 : 시작하세요! 도커/쿠버네티스

출처 : https://kubernetes.io/docs/concepts/workloads/pods/

 

반응형

댓글