kubernetes(이하 k8s)에서 클러스터의 컨트롤 플레인과 통신하기 위한 커맨드라인 툴을 제공하는데, 이 툴의 이름이 kubectl 이다.
kubectl 자동완성
source <(kubectl completion bash) # bash-completion 패키지를 먼저 설치한 후, bash의 자동 완성을 현재 셸에 설정한다
echo "source <(kubectl completion bash)" >> ~/.bashrc # 자동 완성을 bash 셸에 영구적으로 추가한다
# kubectl 약칭 등록
alias k=kubectl
complete -o default -F __start_kubectl k
Config 확인
kubectl config view : context, cluster 정보, user 정보 등을 알 수 있음
구문
kubectl [command] [TYPE] [NAME] [Flags]
command
하나 이상의 리소스에서 수행하고자 하는 동작을 지정한다. ( create, get, describe, delete)
type
리소스의 타입을 지정하며 대소문자를 구분하지 않고 복수형 또는 약어를 지정할 수 있다.
(pod = pods, po / node / namespace=ns / serviceaccount=sa)
kubectl api-resources 명령으로 지원되는 모든 리소스 타입과 해당 약어를 알 수 있다.
name
리소스의 이름을 지정하며 대소문자를 구별한다
flags
선택적 플래그를 지정한다.
알아두면 좋을 flags 들
--all-namespace 의 약칭인 -A 도 알아두면 좋다 (kubectl -A)
--show-labels : 해당 리소스에 붙어있는 라벨 확인 (노드셀렉터나 Pod 배치할 때 유용함)
--sort-by : 오브젝트 목록을 숫자나 문자열 필드를 지정하여 정렬가능
--dry-dun : 실제 생성전 예상되는 결과를 확인할 수 있음 (kubectl run hello --image=nginx --dry-run -o yaml 로 생성될 pod 에 대한 yaml 파일을 확인할 수 있다)
kubectl run hello --image=nginx --dry-run -o yaml > pod.yaml 으로 하면 예상 결과를 pod.yaml 파일로 생성해준다.
-f : 특정 파일을 기반으로 command 실행
command
create : JSON, YAML 파일 기반의 리소스 생성 (kubectl create -f ./pod.json)
get : 리소스에 대한 정보 출력 (kubectl get pods -o wide)
run : 특정 Pod를 생성하고 실행함 (kubectl run nginx --image=nginx)
expose : 서비스를 생성하고 배포함 (kubectl expose -f nginx-controller.yaml --port=80 --target-port=8000)
delete : 리소스를 삭제함 (kubectl delete -f ./pod.json)
apply : 특정 파일 기반으로 존재하지 않는 리소스를 배포함 (kubectl apply -f ./pod.json)
autoscale : 오토스케일링 정책 추가 (kubectl autoscale deployment foo --min=2 --max=10, kubectl autoscale rc foo --max=5 --cpu-percent=80)
diff : 매니페스트 파일의 내용과 실제 리소스의 정보다 다른지 비교해주는 명령어 (kubectl diff -f test-pod.yaml)
#(echo $? 명령어의 결과가 1이면 다른점이 있고 0이면 동일함 )
edit : 기본 편집기에서 리소스를 편집함 (kubectl edit svc/docker-registry)
label : key:value 형식의 라벨을 적용함 (kubectl label pods foo unhealthy=true)
replace : JSON 및 YAML 형식을 파일을 기반으로 기존 리소스를 대체함 (kubectl replace -f ./pod.json)
rollout : 이전 배포로 되돌리는 명령 (kubectl rollout undo deployment/abc)
scale : 해당 리소스의 스케일 값을 수정함 (kubectl scale --replicas=3 -f foo.yaml)
attach : 컨테이너에서 동작중인 메인프로세스에 붙는 것 (ubectl attach mypod -c ruby-container)
#kubectl attach로 파드에 붙은 후 ctrl+c로 접속을 종료하면 메인 프로세스가 종료되어 컨테이너가 재시작된다
auth : 특정 권한이 있는지 확인하는 명령어 (kubectl auth can-i create pods --all-namespaces)
cp : 컨테이너에서 파일 및 디렉토리를 복사 (kubectl cp <file-spec-src> <file-spec-dest>)
describe : 특정 리소스 또는 리소스 그룹의 세부 정보 출력 (kubectl describe pods)
exec : bash 쉘 등을 동작시켜 컨테이너에 접근함 (kubectl exec mypod -it /bin/bash)
logs : Pod나 지정된 리소스의 컨테이너 로그 출력 (kubectl logs nginx)
top : 노드의 리소스 사용량을 표시 (kubectl top node NODE_NAME)
certificate : 인증서 서명 요청 승인 (kubectl certificate approve csr-sqgzp)
cordon : 노드를 예약 불가능으로 설정 (kubectl cordon foo)
uncordon : 노드를 예약 가능으로 재설정 (kubectl uncordon foo)
drain : 노드를 모두 비우는 명령 (kubectl drain foo --force) --force를 해야 데몬셋도 비워짐
taint : Taint는 특정 Node에 대해 특정 Pod만 실행할 수 있도록 역할을 제한함 (kubectl taint node {nodename} {key}={value}:{option})
config : 현재 컨텍스트 표시 (kubectl config current-context)
explain : 리소스에 대한 필드 나열 (kubectl explain pods)
version : 현재 컨텍스트에 대한 클라이언트 및 서버 버전 정보 출력 (kubectl version)
출력 옵션
kubectl [command] [TYPE] [NAME] -o <output_format>
-o yaml : YAML 형식으로 출력
-o json : JSON 형식으로 출력
-o wide : 상세 정보를 텍스트 형식으로 출력
컨테이너로 파일과 디렉터리 복사
kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # 로컬 디렉토리 /tmp/foo_dir 를 현재 네임스페이스의 my-pod 파드 안의 /tmp/bar_dir 로 복사
kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # 로컬 파일 /tmp/foo 를 my-pod 파드의 my-container 컨테이너 안의 /tmp/bar 로 복사
kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # 로컬 파일 /tmp/foo 를 my-namespace 네임스페이스의 my-pod 파드 안의 /tmp/bar 로 복사
kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # my-namespace 네임스페이스의 my-pod 파드 안의 파일 /tmp/foo 를 로컬의 /tmp/bar 로 복사
#kubectl cp 명령을 사용하려면 컨테이너 이미지에 'tar' 바이너리가 포함되어 있어야 한다.
#'tar'가 없으면, kubectl cp는 실패할 것이다. 심볼릭 링크, 와일드카드 확장, 파일 모드 보존과 같은 고급 사용 사례에 대해서는 kubectl exec 를 고려해 볼 수 있다.
tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar # 로컬 파일 /tmp/foo 를 my-namespace 네임스페이스의 my-pod 파드 안의 /tmp/bar 로 복사
kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar # my-namespace 네임스페이스의 my-pod 파드 안의 파일 /tmp/foo 를 로컬의 /tmp/bar 로 복사
Node 상호작용
kubectl cordon my-node # my-node를 스케줄링할 수 없도록 표기
kubectl drain my-node # 유지 보수를 위해서 my-node를 준비 상태로 비움
kubectl uncordon my-node # my-node를 스케줄링할 수 있도록 표기
kubectl top node my-node # 주어진 노드에 대한 메트릭 표시
Kubectl 명령어 Docs
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
Kubectl Reference Docs
kubernetes.io
'Docker & Kubenetes' 카테고리의 다른 글
[k8s] Service Account (0) | 2025.03.12 |
---|---|
가상화와 컨테이너 (0) | 2025.03.10 |
Kubernetes 버전 업그레이드 (1.30) - 기존 클러스터 환경 삭제 (0) | 2025.03.04 |
Kustomize로 Kubernetes 구성 관리하기 (0) | 2024.07.04 |
Kubernetes Service (0) | 2024.05.14 |