파드를 연결하는 방식을 정의하는 서비스(service)

개별 어플리케이션의 환경변수 설정을 정의하는 컨피그맵(configMap)

자원을 많이 사용해서 동일한 노드를 사용하는 다른 파드에 영향을 끼치지 않도록 하는 리소스 리미트(limits)/리퀘스트(requests)

 

위와 같은 오브젝트들은 대부분 코드로 구현한다.

 

 

1. 쿠버네티스 리소스를 가독성이 뛰어난 yaml 파일 형태로 export하는 kube-neat 플러그인을 설치합니다.

k run busybox --image=busybox

pod/busybox created

 

k get po

NAME      READY   STATUS      RESTARTS     AGE
busybox   0/1     Completed   1 (4s ago)   6s

 

k get pod busybox -o yaml

apiVersion: v1
kind: Pod
......
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
            path: namespace
status:
  conditions:
  - lastProbeTime: null
    lastTransitionTime: "2024-02-08T05:46:25Z"
    status: "True"
    type: Initialized
  .....
  hostIP: 192.168.0.62
  phase: Running
  podIP: 10.10.180.226
  podIPs:
  - ip: 10.10.180.226
  qosClass: BestEffort
  startTime: "2024-02-08T05:46:25Z"

 

-o yaml은 status까지 붙어서 보기 힘들다.

 

#kube-neat 플러그인 설치

kubectl krew install neat

 

#neat 추출

k get pod busybox -o yaml|k neat

apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/containerID: de9c8cb31863b0717ed859de586fd5c876bbfeb5c0d3b23070b289c11b1edc37
    cni.projectcalico.org/podIP: 10.10.180.226/32
    cni.projectcalico.org/podIPs: 10.10.180.226/32
  labels:
    run: busybox
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    name: busybox
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: kube-api-access-x2wzs
      readOnly: true
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  serviceAccountName: default
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: kube-api-access-x2wzs
    projected:
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              fieldPath: metadata.namespace
            path: namespace

 

2. 명령어를 사용해 busybox 파드를 실행합니다. busybox 파드를 yaml 파일 형태로 출력하고, Yaml 파일을 vs code등의 편집기를 이용해 command 옵션과 resource limits/requests 옵션을 추가합니다. 수정된 파일로 busybox 파드를 재배포합니다.

 

spec 하위에 입력

command:

- "/bin/sh"

- "-c"

- "sleep inf"

apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/containerID: de9c8cb31863b0717ed859de586fd5c876bbfeb5c0d3b23070b289c11b1edc37
    cni.projectcalico.org/podIP: 10.10.180.226/32
    cni.projectcalico.org/podIPs: 10.10.180.226/32
  labels:
    run: busybox
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    name: busybox
    command:
    - "/bin/sh"
    - "-c"
    - "sleep inf"
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: kube-api-access-x2wzs
      readOnly: true
  preemptionPolicy: PreemptLowerPriority
  priority: 0
  serviceAccountName: default
  tolerations:
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
  volumes:
  - name: kube-api-access-x2wzs
    projected:
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              fieldPath: metadata.namespace
            path: namespace

 

해당 파일을 저장 kubectl get pod busybox -o yaml | kubectl neat > busybox_pod.yaml

kubectl apply -f busybox_pod.yaml로 실행한다.

 kubectl get pod -o wide
NAME      READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
busybox   1/1     Running   0          4m44s   10.10.180.227   worker-node1   <none>           <none>

busybox가 sleep inf 무한을 걸어놔서 꺼지지 않는다.

 

 

3. 쿠버네티스 환경에서 필요한 yaml 파일의 기본 문법을 정리합니다.

spec:
  containers:
  - image: busybox
    name: busybox
    resources:
      limits:
        memory: 128Mi
      requests:
        memory: 64Mi
    command:
    - "/bin/sh"
    - "-c"
    - "sleep inf"

 

 

+ Recent posts