Skip to content

Kubectl

Kubectl은 쿠버네티스 클러스터에 명령을 내리는 CLI(Command Line Interface)입니다.

명령 예제

노드 확인

kubectl get node

이름공간 확인:

kubectl get namespace

팟(POD) 확인:

kubectl get po -n monitoring

모두 출력:

kubectl get all -A

설치 방법

간단히 snap에서 설치하자:

snap install kubectl --classic
kubectl version --client

클러스터 접근

KUBECONFIG 환경 변수를 활용합니다:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get pods --all-namespaces
helm ls --all-namespaces

또는 명령에 kubeconfig 파일의 위치를 지정합니다:

kubectl --kubeconfig /etc/rancher/k3s/k3s.yaml get pods --all-namespaces
helm --kubeconfig /etc/rancher/k3s/k3s.yaml ls --all-namespaces

파일로 단위 실행

적용하고 싶다면:

kubectl apply -f my-resources.yaml

그대로 제거하고 싶다면:

kubectl delete -f my-resources.yaml

제거 방법

Deployment 제거:

kubectl delete deployment <deployment-name>

특정 네임스페이스의 모든 리소스를 삭제하고 싶다면:

kubectl delete namespace <namespace-name>

외부에서 kubectl로 클러스터에 접근하기

KUBECONFIG 환경변수에 kube config yaml 파일 경로를 입력한 후 kubectl을 실행하거나, ~/.kube/config 위치에 복사.

k3s를 사용할 경우 k3s#외부에서 kubectl로 클러스터에 접근하기 항목 참조.

Commands

기본 명령 (초보자)

  • Kubectl:create - 파일 또는 stdin에서 리소스 생성
  • Kubectl:expose - 복제 컨트롤러, 서비스, 배포 또는 팟(Pod)을 가져와 새로운 쿠버네티스 서비스로 노출
  • Kubectl:run - 클러스터에서 특정 이미지 실행
  • Kubectl:set - 객체의 특정 기능 설정

기본 명령 (중급)

  • Kubectl:explain - 리소스에 대한 문서 가져오기
  • Kubectl:get - 하나 이상의 리소스 표시
  • Kubectl:edit - 서버의 리소스 편집
  • Kubectl:delete - 파일 이름, stdin, 리소스 및 이름별로 또는 리소스 및 레이블 선택기로 리소스를 삭제합니다.

Deploy Commands

  • Kubectl:rollout - 리소스 롤아웃 관리
  • Kubectl:scale - 배포, 복제 세트 또는 복제 컨트롤러의 새 크기 설정
  • Kubectl:autoscale - 배포, 복제 세트, 상태 저장 세트 또는 복제 컨트롤러 자동 확장

클러스터 관리 명령

  • Kubectl:certificate - 인증서 리소스를 수정합니다.
  • Kubectl:cluster-info - 클러스터 정보 표시
  • Kubectl:top - 리소스(CPU/메모리) 사용량 표시
  • Kubectl:cordon - 노드를 예약 불가로 표시
  • Kubectl:uncordon - 노드를 예약 가능으로 표시
  • Kubectl:drain - 유지보수 준비 중인 노드 배수
  • Kubectl:taint - 하나 이상의 노드에서 오염을 업데이트합니다.

문제 해결 및 디버깅 명령

  • Kubectl:describe - 특정 리소스 또는 리소스 그룹에 대한 세부 정보 표시
  • Kubectl:logs - 포드의 컨테이너에 대한 로그를 인쇄합니다.
  • Kubectl:attach - 실행 중인 컨테이너에 연결
  • Kubectl:exec - 컨테이너에서 명령 실행
  • Kubectl:port-forward - 하나 이상의 로컬 포트를 포드로 전달
  • Kubectl:proxy - Kubernetes API 서버에 대한 프록시 실행
  • Kubectl:cp - 컨테이너 간에 파일 및 디렉터리 복사
  • Kubectl:auth - 승인 검사
  • Kubectl:debug - 워크로드 및 노드 문제 해결을 위한 디버깅 세션 생성

고급 명령

  • Kubectl:diff - 라이브 버전과 적용될 버전을 비교합니다.
  • Kubectl:apply - 파일 이름 또는 stdin으로 리소스에 구성을 적용합니다.
  • Kubectl:patch - 자원의 업데이트 필드
  • Kubectl:replace - 파일 이름 또는 stdin으로 리소스를 교체합니다.
  • Kubectl:wait - 실험적: 하나 이상의 리소스에서 특정 조건을 기다립니다.
  • Kubectl:kustomize - 디렉터리 또는 URL에서 kustomization 대상을 빌드합니다.

설정 명령

  • Kubectl:label - 리소스의 레이블을 업데이트합니다.
  • Kubectl:annotate - 리소스의 주석을 업데이트합니다.
  • Kubectl:completion - 지정된 쉘(bash, zsh 또는 fish)에 대한 출력 쉘 완성 코드

기타 명령

  • Kubectl:alpha - 알파 기능에 대한 명령
  • Kubectl:api-resources - 서버에서 지원되는 API 리소스를 인쇄합니다.
  • Kubectl:api-versions - "group/version" 형식으로 서버에서 지원되는 API 버전을 인쇄합니다.
  • Kubectl:config - kubeconfig 파일 수정
  • Kubectl:plugin - 플러그인과 상호 작용하기 위한 유틸리티를 제공합니다.
  • Kubectl:version - 클라이언트 및 서버 버전 정보를 인쇄합니다.

Troubleshooting

tls: failed to verify certificate

kubectl 명령을 날리면 다음과 같은 에러가 발생된다:

E0523 10:59:59.467327 2585371 memcache.go:265] couldn't get current server API group list: Get "https://api.yourid.run:6443/api?timeout=32s": tls: failed to verify certificate: x509: certificate is valid for api-yourid-run, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, localhost, not api.yourid.run
E0523 10:59:59.537153 2585371 memcache.go:265] couldn't get current server API group list: Get "https://api.yourid.run:6443/api?timeout=32s": tls: failed to verify certificate: x509: certificate is valid for api-yourid-run, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, localhost, not api.yourid.run
E0523 10:59:59.567092 2585371 memcache.go:265] couldn't get current server API group list: Get "https://api.yourid.run:6443/api?timeout=32s": tls: failed to verify certificate: x509: certificate is valid for api-yourid-run, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, localhost, not api.yourid.run
E0523 10:59:59.596498 2585371 memcache.go:265] couldn't get current server API group list: Get "https://api.yourid.run:6443/api?timeout=32s": tls: failed to verify certificate: x509: certificate is valid for api-yourid-run, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, localhost, not api.yourid.run
E0523 10:59:59.636441 2585371 memcache.go:265] couldn't get current server API group list: Get "https://api.yourid.run:6443/api?timeout=32s": tls: failed to verify certificate: x509: certificate is valid for api-yourid-run, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, localhost, not api.yourid.run
Unable to connect to the server: tls: failed to verify certificate: x509: certificate is valid for api-yourid-run, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, localhost, not api.yourid.run

만약 k3s를 사용한다면 서버의 서비스 파일(/etc/systemd/system/k3s.service)에 ExeStart 에 --tls-san api.yourid.run 과 같이 도메인을 추가하자:

ExecStart=/usr/local/bin/k3s \
    server \
    --tls-san api.yourid.run \
    --write-kubeconfig-mode 644

또는 insecure-skip-tls-verify: true옵션을 yaml 파일에 추가하자:

apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: https://api.yourid.run:6443
  name: default
...

See also

Favorite site