개요
자주 쓰이는 상황별 쿠버네티스 명령어를 정리한 글입니다. (수시로 업데이트 됩니다. 2023/04/16)
더 자세한 내용은 공식 문서를 참조하시면 좋습니다. (kubectl 치트 시트 | 명령줄 도구 (kubectl))
상황별 명령어 모음
Pod, Node 조회
# 마스터 노드에서만 실행가능
# Nodes
sudo kubectl get nodes
sudo kubectl get nodes -o wide # + 상세정보
# Pods
# 모두 조회
sudo kubectl get pods -n kube-system # 특정 네임스페이스 조회
# 특정 노드 상세
sudo kubectl describe nodes ${노드명}
# 클러스터 정보 조회
sudo kubectl cluster-info
WorkerNode를 클러스터에 삭제/재 등록
노드 삭제(마스터 노드에서)
# 노드 상태 확인
sudo kubectl get nodes
# 노드 스케줄링 비활성화
sudo kubectl cordon ${nodeName}
# 노드 회수
sudo kubectl drain ${nodeName} --ignore-daemonsets --delete-emptydir-data
# 노드 삭제
sudo kubectl delete node ${nodeName}
# ---
# 워커 노드에서 초기화 후 등록
# 스케줄링 활성화
sudo kubectl uncordon
노드 재등록(워커 노드에서)
# 노드 초기화
sudo kubeadm reset -f --cri-socket /var/run/cri-dockerd.sock
sudo rm -rf /etc/cni/net.d
sudo rm -rf /etc/kubernetes
# master에서 생성된 join 명령어 실행
클러스터 Join 토큰 재발행
# 마스터 노드에서
# 토큰 리스트 확인
sudo kubeadm token list
# 토큰이 invalid 되어 있다면 재생성
sudo kubeadm token create --print-join-command
# 워커노드에서
# 출력된 join 명령어 + 아래 옵션 추가 후 실행
# sudo kubeadm join ...
--cri-socket="var/run/crio/crio.sock" --ignore-preflight-errors=cri
# 정상 등록 확인
kubectl get node -A
# 상태가 계속 NotReady로 뜬다면
# 워커노드를 재부팅하자
죽지않는 Pod, Namespace 삭제
# deployment가 살아있으면 계속 살아남
kubectl get deployemnt -n ${네임스페이스 명}
kubectl delete deployment ${이름}
# 좀비처럼 살아나는 Pod들 삭제
kubectl get daemonset -A # 데몬셋이 살아있으면 계속 살아남
kubectl delete ${RESOURCE_TYPE} ${NAME} --grace-period=0 --force
# 네임스페이스로 묶어서 삭제
# 첫번째 all : Pod 종류
# 두번째 all : 해당 종류의 모든 리소스
# 지우지 못하는 것 : configmaps, rolebindings, roles, secrets
kubectl delete all --all -n ${네임스페이스}
# 네임스페이스 강제삭제
kubectl get namespace "$namespace" -o json \
| tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
| kubectl replace --raw /api/v1/namespaces/"$namespace"/finalize -f -
Label 추가/삭제/필터링
라벨은 YAML의 metadata 항목에도 정의할 수 있으며,
kubectl run 커맨드 실행 시 자동으로 run=<NAME>의 label이 추가된다.
# 라벨 부여
sudo kubectl label pod <POD_NAME> <KEY>=<VALUE>
sudo kubectl label ns <NAMESPACE> <KEY>=<VALUE>
# 라벨 수정 및 삭제
sudo kubectl label --overwrite ns <NAMESPACE> <KEY>=<NEW_VALUE> # 라벨 덮어씌우기
sudo kubectl label --overwrite ns <NAMESPACE> <KEY>- # 라벨 삭제
# 라벨 확인
kubectl get pod <NAME> --show-labels
# 라벨 조건 필터링
kubectl get pod <NAME> -l <KEY> # key 값으로 조회
kubectl get pod <NAME> -l <KEY>=<VALUE> # key=value 쌍으로 조회
프록시 & 포트 포워딩
# Proxy를 통한 외부노출
kubectl proxy --port ${PORT} --address ${마스터 노드 IP} --accept-hosts='^*$' [&]
# 포트포워딩을 통한 외부 노출
kubectl port-forward --address 0.0.0.0 ${deployment 이름} ${PORT} [&]
# ex) 대시보드 포트포워딩
kubectl port-forward --address 0.0.0.0 deployment/prometheus-grafana 3000 [&]
클러스터 내 설정 조회
# podCIDR 확인
kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' ;echo
# API 그룹 확인
kubectl api-resources --api-group='rbac.authorization.k8s.io/v1'
PV, PVC 삭제
# 방법1 : finalizers 필드 항목 삭제
kubectl edit pv ${pv name}
# 방법2 : 강제 삭제
kubectl delete pv ${pv name} --grace-period=0 --force
kubectl patch pod <pod name> -p '{"metadata":{"finalizers":null}}'
kubectl get pv,pvc -n kubeflow --no-headers=true | awk '{print $1}' | xargs kubectl patch -n kubeflow -p '{"metadata":{"finalizers":null}}'
Context 추가
# kubeconfig에 등록할 토큰 생성
kubectl create token ${생성한 Service Account 이름}
...토큰내용...
# Service Account를 Config에 등록
kubectl config set-credentials ${생성한 Service Account 이름} \
--token=${...토큰내용...} \
--kubeconfig=${적용할 Config 파일경로}
# Context는
kubectl config set-context ${사용할 Context 이름} \
--cluster=${대상 Cluster 이름} \
--user=${Service Account 이름} \
--kubeconfig=${적용할 Config 파일경로}
ConfigMap, Secret 생성
# Create a new secret named my-secret with keys for each file in folder bar
kubectl create secret generic my-secret --from-file=path/to/bar
# Create a new secret named my-secret with specified keys instead of names on disk
kubectl create secret generic my-secret --from-file=ssh-privatekey=~/.ssh/id_rsa --from-file=ssh-publickey=~/.ssh/id_rsa.pub
# Create a new secret named my-secret with key1=supersecret and key2=topsecret
kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret
Istio 상에서 Pod와 연결된 DNS, 서비스 찾기
# 찾으려는 Pod 명 확인
kubectl get pod -n kubeflow-user-example-com
# elyra-0
# istio 상에서 Pod에 연결된 Endpoint IP, DNS 확인
istioctl proxy-config endpoint pod/elyra-0 -n kubeflow-user-example-com
# Endpoint IP와 일치하는 Endpoint 확인
k get endpoints -n kubeflow
# Endpoint와 연결된 Service 확인
k edit endpoints -n kubeflow ml-pipeline
...
subsets: ...
# 실제 통신이 가능한지 확인
kubectl get pods -n istio-system
# cluster-local-gateway-6955b67f54-zs6wd
k exec -it cluster-local-gateway-6955b67f54-zs6wd -n istio-system -- /bin/bash
curl ${도메인 주소}
'How-to' 카테고리의 다른 글
시험 5분전 급하게 보는 CKA 핵심 명령어 (0) | 2023.04.06 |
---|---|
몰래보는 VS Code 단축키 정리 (0) | 2023.01.18 |
몰래보는 인텔리제이(IntelliJ) 단축키 정리 (0) | 2023.01.18 |
몰래보는 SQL Query 코드조각 (0) | 2023.01.18 |
몰래보는 파이썬(Python) 코드조각 (0) | 2023.01.18 |