만자의 개발일지

[Kubernetes] Pod 구성 및 생성하기 본문

Kubernetes

[Kubernetes] Pod 구성 및 생성하기

박만자 2022. 7. 19. 11:25

이번 포스팅에서는 YAML파일로 Pod를 구성하고 Pod를 생성하는 법에 대해 포스팅하도록 하겠습니다.

 

Pod란?

Pod는 쿠버네티스에서 컨테이너의 기본 단위로, 가장 기본적인 배포 단위이며1개 이상의 컨테이너로 구성된 컨테이너의 집합입니다.

자세한 내용은 아래 글을 참고하시길 바랍니다.

https://yoo11052.tistory.com/189

 

[Kubernetes] Kubernetes Object란

Kubernetes Object 쿠버네티스를 이해하기 위해서는 오브젝트에 대해 제대로 이해하고 넘어가야합니다. 쿠버네티스에서 오브젝트란 쿠버네티스를 구성하는 단위로, 가장 기본적인 구성단위인 기본

yoo11052.tistory.com

 

Pod 구성하기

먼저 다음과 같이 YAML 파일을 구성해줍니다.

apiVersion: v1
kind: Pod
metadata:
  name: web
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx:latest

metadata 섹션을 통해 Pod의 이름과 라벨을 지정해 줄 수 있습니다. 지금은 라벨을 굳이 생성해줄 필요는 없지만 나중에 서비스의 라벨 셀렉터를 통해 Pod를 묶어줄 수 있습니다.

spec 섹션은 Pod에서 실행될 컨테이너의 스펙(이미지, CPU, 메모리 등등..)을 지정해 줄 수 있습니다.

 

Pod 생성하기

YAML 파일을 구성해주셨다면 다음 명령어를 통해 Pod를 생성합니다.

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

 

생성된 Pod는 다음 명령어를 통해 확인할 수 있습니다.

$ kubectl get pod [-n namespace]
NAME   READY   STATUS    RESTARTS   AGE
web    1/1     Running   0          3m37s

metadata 섹션에서 별도의 Namespace를 지정해주지 않은 경우 Pod는 기본적으로 default Namespace에 생성됩니다. 

default Namespace는 생략이 가능하며 다른 Namespace에 Pod를 생성했을 경우 -n 옵션을 통해 접근할 수 있습니다.

 

Pod의 정보를 보고 싶은 경우 다음 명령어를 통해 확인할 수 있습니다.

$ kubectl describe pod [pod] [-n namespace]
Name:         web
Namespace:    default
Priority:     0
Node:         docker-desktop/192.168.65.4
Start Time:   Tue, 19 Jul 2022 11:11:41 +0900
Labels:       app=nginx
Annotations:  <none>
Status:       Running
IP:           10.1.0.59
IPs:
  IP:  10.1.0.59
Containers:
  nginx:
    Container ID:   docker://9cb0e3e8207bb792a221532459f9960204922e6f6d28d7b57ab468a77ff77014
    Image:          nginx:latest
    Image ID:       docker-pullable://nginx@sha256:db345982a2f2a4257c6f699a499feb1d79451a1305e8022f16456ddc3ad6b94c
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Tue, 19 Jul 2022 11:11:45 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-bzjdn (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-bzjdn:
    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  4m30s  default-scheduler  Successfully assigned default/web to docker-desktop
  Normal  Pulling    4m29s  kubelet            Pulling image "nginx:latest"
  Normal  Pulled     4m27s  kubelet            Successfully pulled image "nginx:latest" in 2.6174692s
  Normal  Created    4m27s  kubelet            Created container nginx
  Normal  Started    4m26s  kubelet            Started container nginx

Pod를 지정하면 해당 Pod에 대한 정보만 볼 수 있고 Pod를 지정하지 않은 경우에는 해당 Namespace에 있는 모든 Pod에 대한 정보를 출력합니다.

 

생성된 Pod는 다음 명령어를 통해 삭제할 수 있습니다.

$ kubectl delete pod <pod> [-n namespace]
pod "web" deleted

 

모든 Pod를 한번에 삭제하고 싶은 경우 Pod 대신 --all 옵션을 붙이면 됩니다.

$ kubectl delete pod --all [-n namespace]

 

다음 포스팅에서는 Pod에 서비스를 적용하여 외부에서 접근하는 법에 대해 포스팅하도록 하겠습니다.

Comments