콤퓨우터/필기: KodeKloud CKA 강의

22. Pods with YAML

파란화면 2024. 5. 14. 22:21
반응형

쿠버의 Object를 생성하기 위한 YAML은, Pod, Deployment, Service, ReplicaSet, 뭐든 상관없이 대강 아래처럼 생겼으며, 아래의 3가지 root level properties를 꼭 가져야한다.

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
    type: frontend
spec:
  containers:
  - name: nginx-container  # -는 YAML에서 리스트의 첫 항목임을 가리킴
    image: nginx
  - name: busybox
    image: busybox

apiVersion / kind

  • Pod, Service: v1
  • ReplicaSet, Deployment: apps/v1

metadata

오브젝트에 대한 정보

  • Dictionary 구조의 child로 name, labels 등을 가짐

  • 기본적으로 쿠버에서 정한 종류의 메타데이터만 추가할 수 있음

  • label 차일드 아래에는 아무 종류의 k-v 페어나 넣을 수 있다

    • 나중에 Selector를 이용해 오브젝트를 필터링할 때 사용한다.
      • 예시: kubectl get pods --selector='app=myapp'
  • annotations 차일드 아래에도 아무 종류의 k-v 페어나 넣을 수 있다

    • 이건 그냥 사람이 읽는 용도고 selector와는 상관없다

spec

특정 오브젝트에 부수되는 객체를 가리킴
Pod에 대해서는 containers가 대표적이다.

하나의 Pod은 컨테이너를 여러 개 가질 수 있다. 예를 들어 1개의 웹서버와 그 웹서버를 감시하는 로깅 데몬이 언제나 한 세트로 배포되어야 한다고 해 보자. 이런 상황에 이 2개의 컨테이너를 하나의 Pod에 담아서 배포하면 삶이 편해지는 것이다.

kubectl create -f filename.yml / kubectl apply -f filename.yml

describe

kubectl describe pod webapp
정보를 보여준다

➜  kubectl describe pod webapp
Name:             webapp
Namespace:        default
Priority:         0
Service Account:  default
Node:             controlplane/192.22.35.9
Start Time:       Fri, 26 Apr 2024 12:50:11 +0000
Labels:           <none>
Annotations:      <none>
Status:           Pending
IP:               10.42.0.13
IPs:
  IP:  10.42.0.13
Containers:
  nginx:
    Container ID:   containerd://255e04a630afa086a3a0423133e534a1dee661b0f1e9298893694a144330a140
    Image:          nginx
    Image ID:       docker.io/library/nginx@sha256:ed6d2c43c8fbcd3eaa44c9dab6d94cb346234476230dc1681227aa72d07181ee
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 26 Apr 2024 12:50:12 +0000
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-r6vxw (ro)
  agentx:
    Container ID:   
    Image:          agentx
    Image ID:       
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-r6vxw (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True 
  Initialized                 True 
  Ready                       False 
  ContainersReady             False 
  PodScheduled                True 
Volumes:
  kube-api-access-r6vxw:
    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  17s                default-scheduler  Successfully assigned default/webapp to controlplane
  Normal   Pulling    17s                kubelet            Pulling image "nginx"
  Normal   Pulled     16s                kubelet            Successfully pulled image "nginx" in 233ms (233ms including waiting)
  Normal   Created    16s                kubelet            Created container nginx
  Normal   Started    16s                kubelet            Started container nginx
  Normal   BackOff    14s (x2 over 15s)  kubelet            Back-off pulling image "agentx"
  Warning  Failed     14s (x2 over 15s)  kubelet            Error: ImagePullBackOff
  Normal   Pulling    1s (x2 over 16s)   kubelet            Pulling image "agentx"
  Warning  Failed     0s (x2 over 16s)   kubelet            Failed to pull image "agentx": failed to pull and unpack image "docker.io/library/agentx:latest": failed to resolve reference "docker.io/library/agentx:latest": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
  Warning  Failed     0s (x2 over 16s)   kubelet            Error: ErrImagePull

위에서 "webapp" Pod을 구성하는 컨테이너 2개 중 1개가 뻑나있음을 알 수 있다.
(kubectl get pods 를 하면, 다음과 같이 READY 상태가 1/2 로 되어 있다)

NAME            READY   STATUS         RESTARTS   AGE
nginx-pod       1/1     Running        0          6m1s
newpods-nl459   1/1     Running        0          5m48s
newpods-82w95   1/1     Running        0          5m48s
newpods-vmdm4   1/1     Running        0          5m48s
webapp          1/2     ErrImagePull   0          3m36s

Pod 날리기

kubectl delete pod webapp
pod "webapp" deleted
반응형