IaC/Kubernetes
[Kubernetes] kubectl 명령어 정리
나미의 로그포스
2023. 4. 5. 13:41
Pods 생성과 실행
kubectl create deployment [POD_NAME] --image=[IMAGE]
kubectl run [POD_NAME] --image=[IMAGE]
Pods 삭제
kubectl delete pods [NAME]
# run으로 만든 단일 Pod 삭제
kubectl delete deployment [NAME]
# deployments 삭제
kubectl delete all --all
# 전체 Pods 삭제
kubectl delete pods [NAME] -n [NAMESPACE]
# 특정 namespace의 Pod 삭제
Yaml 파일
kubectl run web --image=nginx -o yaml --dry-run=client > web.yaml
# nginx 이미지로 만든 web pod의 yaml 파일 뜨기
kubectl get pods web -o yaml > web.yaml
# 이미 생성한 pod의 경우 get으로 yaml 파일 확인
vi web.yaml
# 파일을 열어 설정 변경, 수정
kubectl apply -f [FILE_NAME]
# 수정한 yaml 파일 실행
kubectl edit deployments.apps [POD_NAME]
# 바로 해당 pod의 yaml 파일이 열리며 저장하는 순간 apply 없이도 바로 상태 변화
Namespace 생성
: -n [NAMESPACE] 옵션으로 지정 가능
kubectl create namespace [NAMESPACE]
# namespace 생성
kubectl run [NAME] --image=nginx -n [NAMESPACE]
# pod를 특정 namespace에 생성
kubectl create deployment [NAME] --image=nginx -n [NAMESPACE]
# 특정 namespace에 deploy 생성
kubectl delete pods [NAME] -n [NAMESPACE]
# 특정 namespace에서 pod 삭제
watch kubectl get pods -o wide -n [NAMESPACE]
# default 아닌 특정 namespace의 pods 보기
Troubleshooting
kubectl api-resources
# api-resources 확인
kubectl get pods -n kube-system
# 시스템이 잘 동작하는지 확인
kubectl describe node [workernode]
# 노드 상태 점검
kubectl describe pods [POD_NAME]
# pod의 상세 정보, 상태 확인
kubectl exec -it [POD_NAME] -- /bin/bash
# 컨테이너 안으로 진입
kubectl exec -it [POD_NAME] -- env
# 해당 pod의 환경 변수 확인 가능
--dry-run=client
# 명령어의 오류 여부를 체크하는 옵션 (실제 실행은 X)
Cordon & Drain
kubectl cordon [WORKER_NODE]
# 해당 work node -> SchedulingDisabled 상태 변화
# 이후 새로 run하는 pod는 다른 work node로 할당
kubectl uncordon [WORKER_NODE]
# 해당 work node를 Ready 상태로 되돌림
kubectl drain [WORKER_NODE] --ignore-daemonsets --force
# 현재 있었던 해당 worker node의 모든 작업이 다른 work node로 넘어감
kubectl uncordon [WORKER_NODE]
# 해당 work node를 Ready 상태로 되돌림
Rolling-update
kubectl set image deployment [DEPLOY_NAME] [CONTAINER_NAME]=[new_version_img] --record
# rolling update
kubectl rollout history deployment [deploy_name]
# --record로 기록한 이전 버전을 history에서 확인
kubectl rollout undo deployment [deploy_name]
# rollback
kubectl rollout undo deployment [deploy_name] --to-revision=[num]
# history에 기록된 숫자를 지정해 rollback