파드를 연결하는 방식을 정의하는 서비스(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 > 샘플' 카테고리의 다른 글
Helm 헬름 활용(1) (0) | 2024.02.19 |
---|---|
잘못된 pod 생성 트러블 슈팅 (0) | 2024.02.15 |
쿠버네티스 트러블슈팅의 기본 프로세스 (0) | 2024.02.15 |
nginx 파드 실행과 bash실행 (0) | 2024.02.08 |
(기초) 쿠버네티스 활용 - nginx (0) | 2023.12.12 |