320x100
320x100
실행중인 특정 파드의 개수 추가
# 특정 파드의 개수를 count개로 지정
# 이미 만들어진 pod에 대해서만 실행 가능
kubectl scale deployment [pod-name] --replicas=[count]
# 특정 파드 삭제
# scale로 증분한 파드들도 함께 삭제됨
kubectl delete deployment [pod-name]
yaml 파일로 Spec을 지정해 오브젝트 생성하기
- 쿠버네티스에서 사용가능한 API 버전 확인 (yaml 파일 작성전 반드시 확인)
# 모든 api의 버전 확인
kubectl api-versions
# 특정 오브젝트로 생성 시에 사용해야하는 apiVersion 확인
kubectl explane [object-name]
- 쿠버네티스 yaml 파일의 기본 속성
apiVersion: [오브젝트를 포함한 API의 버전]
kind: [오브젝트의 종류]
: apiVersion은 사용할 오브젝트에 따라 다름
- Deployment 오브젝트를 사용한 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: [service-name]
labels: [description]
spec:
replicas: [number of pods]
containers:
- name: [container-name]
image: [container-image repo name of docker hub]
실행중인 파드에 대해 yaml 파일의 변경사항 적용
kubectl apply -f [image-file]
: apply로 생성한 오브젝트가 아닌 경우 경고 발생
: 처음부터 apply 명령으로 오브젝트를 생성하는 것을 권장
실행중인 컨테이너에 접속하기
# i = stdin
# t = tty
# 호스트의 터미널에서 결과를 바로 확인하려면 /bin/bash 대신 다른 명령어 입력
kubectl exec -it [pod-name] -- /bin/bash
파드 상태 값 확인하기
# 열 이름:내용 값
kubectl get pods \
-o=custom-columns=NAME:.metadata.name,IP:.status.pod,STATUS:.status.phase,NODE:.spec.nodeName
# 배포된 파드의 내용을 yaml 파일로 저장
kubectl get pods [pod-name] -o yaml > pod-content.yaml
- 저장된 파일 내용
apiVersion: v1
kind: Pod
metadata:
annotations:
cni.projectcalico.org/podIP: 172.16.103.132/32
creationTimestamp: "2023-06-04T10:05:07Z"
generateName: echo-hname-7894b67f-
labels:
app: nginx
pod-template-hash: 7894b67f
managedFields:
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:generateName: {}
f:labels:
.: {}
f:app: {}
f:pod-template-hash: {}
f:ownerReferences:
.: {}
k:{"uid":"fcc70446-cef8-4c13-acab-988ba5140ce9"}:
.: {}
f:apiVersion: {}
f:blockOwnerDeletion: {}
f:controller: {}
f:kind: {}
f:name: {}
f:uid: {}
f:spec:
f:containers:
k:{"name":"echo-hname"}:
.: {}
f:image: {}
f:imagePullPolicy: {}
f:name: {}
f:resources: {}
f:terminationMessagePath: {}
f:terminationMessagePolicy: {}
f:dnsPolicy: {}
f:enableServiceLinks: {}
f:restartPolicy: {}
f:schedulerName: {}
f:securityContext: {}
f:terminationGracePeriodSeconds: {}
manager: kube-controller-manager
operation: Update
time: "2023-06-04T10:05:07Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.: {}
f:cni.projectcalico.org/podIP: {}
manager: calico
operation: Update
time: "2023-06-04T10:05:08Z"
- apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:status:
f:conditions:
k:{"type":"ContainersReady"}:
.: {}
f:lastProbeTime: {}
f:lastTransitionTime: {}
f:status: {}
f:type: {}
k:{"type":"Initialized"}:
.: {}
f:lastProbeTime: {}
f:lastTransitionTime: {}
f:status: {}
f:type: {}
k:{"type":"Ready"}:
.: {}
f:lastProbeTime: {}
f:lastTransitionTime: {}
f:status: {}
f:type: {}
f:containerStatuses: {}
f:hostIP: {}
f:phase: {}
f:podIP: {}
f:podIPs:
.: {}
k:{"ip":"172.16.103.132"}:
.: {}
f:ip: {}
f:startTime: {}
manager: kubelet
operation: Update
time: "2023-06-04T10:05:50Z"
name: echo-hname-7894b67f-48p8m
namespace: default
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: echo-hname-7894b67f
uid: fcc70446-cef8-4c13-acab-988ba5140ce9
resourceVersion: "41834"
selfLink: /api/v1/namespaces/default/pods/echo-hname-7894b67f-48p8m
uid: b500fc3b-5341-49de-88dc-ddaf7d167f3a
spec:
containers:
- image: sysnet4admin/echo-hname
imagePullPolicy: Always
name: echo-hname
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-95cpx
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: w2-k8s
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
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: default-token-95cpx
secret:
defaultMode: 420
secretName: default-token-95cpx
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-06-04T10:05:07Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2023-06-04T10:05:50Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2023-06-04T10:05:50Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2023-06-04T10:05:07Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: docker://ff2175ae47db87416129c2d1d5a0ca4a33a0e76f9038964bcb215f47da5c2871
image: docker.io/sysnet4admin/echo-hname:latest
imageID: docker-pullable://docker.io/sysnet4admin/echo-hname@sha256:a01efe0311050cbb42bd11ea8aa219460dc36cabbae0d17c3816dc9d1b2e1d40
lastState: {}
name: echo-hname
ready: true
restartCount: 0
started: true
state:
running:
startedAt: "2023-06-04T10:05:49Z"
hostIP: 192.168.1.102
phase: Running
podIP: 172.16.103.132
podIPs:
- ip: 172.16.103.132
qosClass: BestEffort
startTime: "2023-06-04T10:05:07Z"
특정 노드에 파드가 생성되지 않도록 설정
# 지정한 노드에 파드 생성을 제한
kubectl cordon [node-name]
# cordon 명령어의 적용 여부 확인
# 실행 시 확인하면 SchedulingDisabled 상태가 됨
kubectl get nodes
# cordon 해제
kubectl uncordon [node-name]
: cordon 명령 이후 파드의 수를 늘려도 해당 노드에는 추가로 배포된 파드가 없음을 알 수 있다
: node의 상태는
노드에 있는 파드를 옮기기
# drain = 지정된 노드에 파드가 생성되지 않도록 설정
# --ignore-damonsets 옵션을 추가하여 DaemonSet 경고를 무시하도록 설정
kubectl drain [node-name] --ignore-damonsets
# drain 명령어의 적용 여부 확인
# 실행 시 확인하면 SchedulingDisabled 상태가 됨
kubectl get nodes
: 지정된 노드에 있던 파드를 삭제하고 다른 노드에서 파드를 생성함
오브젝트 업데이트 (pod 업데이트)
# --record = 파드 업데이트에 대한 배포 정보 히스토리를 기록
kubectl apply -f [image-file] --record
# 파드의 상태 확인
kubectl rollout status deployment [pod-name]
# --record 옵션으로 기록된 히스토리 확인
# 실행 명령어를 알 수 있음
kubectl rollout history deployment [pod-name]
# 배포된 파드에 속해있는 컨테이너의 헤더 정보 확인
curl -I --silent [container-ip] | grep Server
# 파드의 컨테이너 버전 업데이트
kubectl set image deployment [pod-name]
파드 복구
# 파드의 상태를 자세히 확인
# 어떤 과정으로 인해 파드에 문제가 있는지 확인할 수 있음
kubectl describe deployment [pod-name]
# 롤백 수행
# 바로 직전 Revision으로 파드를 복구
kubectl rollout undo depolyment [pod-name]
# 특정 시점으로 파드 복구
# revision n으로 복구
kubectl rollout undo deployment [pod-name] --to-revision=[n]
Reference
300x250
728x90
'Container > Kubernetes' 카테고리의 다른 글
쿠버네티스를 싫어하는 사람들을 위한 안내서 (0) | 2024.03.16 |
---|---|
2024년 쿠버네티스 표준 아키텍처 (0) | 2024.01.13 |
쿠버네티스 오브젝트 (0) | 2023.06.04 |
쿠버네티스 파드 생성 (0) | 2023.06.04 |
쿠버네티스의 구성요소들 (0) | 2023.06.04 |