My __ 노트

[ Kubernetes ] Pod 생성 / 조회 /삭제 본문

Kubernetes

[ Kubernetes ] Pod 생성 / 조회 /삭제

블루빔 2023. 11. 27. 16:00

개념 : Pod는 하나 이상의 컨테이너 그룹이며 해당 그룹 안에서는스토리지 및 네트워크를 공유합니다. 쿠버네티스에서 배포 및 관리 가능한 가장 작은 컴퓨팅 단위입니다.
🫛  Pod는 여러 컨테이너를 감싸고 있는 콩껍질 같다고 생각해도 좋습니다.  🫛 

목차
▶ Pod 기본 속성
▶ Pod 생성
▶ Pod 조회
▶ Pod 삭제

Pod 기본 속성 

기본 속성은 아래와 같으며 각 속성에 대한 설명은 주석으로 작성하였습니다. 

apiVersion: v1              # kubernetes API 버전 
kind: Pod                   # 오브젝트 타입 
metadata:                   # 오브젝트를 유일하게 식별하기 위한 정보 
  name: test-pod            # 오브젝트 이름 
  namespace: default        # 지정하지 않으면 자동으로 default에 위치하며 다른 namespace에 위치하고 싶을 경우 기재 
  labels:                   # 오브젝트 집합을 구할 때 사용할 이름표, 여러개 지정 가능          
	app: test               
spec:                       # 사용자가 원하는 오브젝트의 바람직한 상태 
  nodeSelector:             # Pod을 배포할 노드 
  containers:               # Pod 안에서 실행할 컨테이너 목록 
  - image :                 # 컨테이너에서 사용할 이미지
    name:                   # 컨테이너에서 사용할 이름 
    ports: 
    - containerPort:        # 컨테이너에서 사용할 port, protocol을 지정하지 않으면 TCP로 설정 됨 
    resources:              # 컨테이너가 사용할 리소스 범위 지정 (LimitRange 오브젝트를 통해 설정할 수 있지만 해당 내용은 추후에 다시 언급 예정) 
      limits:               # limits 만 작성하면 requests 값도 동일하게 적용됨 
        cpu: 100m
        memory: 120Mi
      requests:             # requests 만 작성하면 limits 값도 동일하게 적용되지 않고 default limits 값으로 적용됨 
        cpu: 100m
        memory: 120Mi  
status:                     # 쿠버네티스가 추가해주는 정보이며 해당 필드아래 nodeIP, podIP 상태 등이 포함되어 있음


아래 이미지는 status 속성에는 실제로 어떤 값들이 있는지 확인할 수 있는 예시 이미지입니다.  

>> hostIP는 노드 IP이며 podIP는 생성한 pod IP입니다.
     해당 정보들은 쿠버네티스 값을 컨테이너로 전달하는 리소스 설정 시 사용됩니다. 참고 링크 ⬅️

 

 

Pod 생성 

아래 예시는 pod 안에 단일 컨테이너(nginx)를 실행하는 yaml 코드입니다.  

sudo vim web.yaml 
----------------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: test-app
spec:
  containers:
    - name: test-app
      image: nginx:1.14.2
      ports:
        - containerPort: 8080
      resources:
        limits:
          cpu: "100m"
          memory: "120Mi"

yaml 파일을 작성 완료하였다면 실제로 apply를 통해 pod를 생성해 보겠습니다. 

kubectl apply -f [pod 생성 yaml 파일]
#옵션: -f, --filename=[] : 적용할 리소스 구성이 포함된 파일 
-----------------------------------------------------------
(예시) 
$ kubectl apply -f web.yaml

 

 

Pod 조회 

일반 조회 

kubectl get pods
------------------------------------------------
NAME       READY   STATUS    RESTARTS   AGE
test-app   1/1     Running   0          7m22s

 

상세 조회

:  -o wide  옵션 추가 

kubectl get pods -o wide
------------------------------------------------
NAME       READY   STATUS    RESTARTS   AGE     IP           NODE                         NOMINATED NODE   READINESS GATES
test-app   1/1     Running   0          8m55s   10.240.1.6   gke-blue-test-default-pool   <none>           <none>

: 양식 지정 가능 ( json, yaml, name, go-template, go-template-file, template, templatefile, jsonpath, jsonpath-as-json, jsonpath-file )
>> yaml 형식으로 조회해보기

kubectl get pods test-app -o yaml
------------------------------------
apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"test-app","namespace":"default"},"spec":{"containers":[{"image":"nginx:1.14.2","name":"test-app","ports":[{"containerPort":8080}],"resources":{"limits":{"cpu":"100m","memory":"120Mi"}}}]}}
  creationTimestamp: "2023-11-27T04:48:42Z"
  name: test-app
  namespace: default
... 이하 생략 ...

 

특정 pod 조회 

kubectl get pods [podname] -o wide
------------------------------------------------
(예시)
$ kubectl get pods test-app -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP           NODE                         NOMINATED NODE   READINESS GATES
test-app   1/1     Running   0          12m   10.240.1.6   gke-blue-test-default-pool   <none>           <none>

 

Pod 안의 컨테이너 조회
kubectl get pods -o jsonpath={..spec.containers[*].name}; echo
---------------------------------------------------------------
test-app test-app-2-cn1 test-app-2-cn2
특정 Pod 안의 컨테이너 조회 :
kubectl get pod [podname] -o jsonpath={..spec.containers[*].name}; echo

(예시)
$ kubectl get pod test-app-2  -o jsonpath={..spec.containers[*].name}; echo
--------------------------------------------------------------------------
test-app-2-cn1 test-app-2-cn2​

 

 

Pod 삭제 

pod 네임을 이용한 삭제 

kubectl delete pod [pod네임] 

$ kubectl delete pod test-app
--------------------------------
pod "test-app" deleted

 

pod 생성 yaml 파일을 이용한 삭제 

kubectl delete -f [pod생성yaml 파일명]

$ kubectl delete -f web2.yaml 
---------------------------------
pod "test-app-2" deleted