파드를 연결하는 방식을 정의하는 서비스(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"
'Kubernetes > Tool' 카테고리의 다른 글
| [Helm] 헬름 활용(2) (0) | 2024.02.19 | 
|---|---|
| [Helm] 헬름 활용(1) (0) | 2024.02.19 | 
| 환경설정 k (kubectl), krew 플러그인 (1) | 2023.11.27 | 
| (2) Kubespray 설치 (2) | 2023.11.25 | 
| (1) 쿠버네티스 설치 - kubespray (1) | 2023.11.24 | 
 
                    
                  