on
3. 쿠버네티스 명령어
3. 쿠버네티스 명령어
출처 : https://dockerlabs.collabnix.com/kubernetes/beginners/what-is-kubect.html
3.1 기본 명령
컨테이너 실행
kubectl run --image
컨테이너 조회
kubectl get pod
# 특정 pod 상태 정보 자세히 보기
kubectl get pod -o yaml
# pod IP 확인
kubectl get pod -o wide
컨테이너 STATUS
Pending : 마스터에 생성 명령 전달 / 아직 실행 X
ContainerCreating : 특정 노드에 스케줄링 되어 컨테이너 생성 중(이미지 다운로드 등)
Running : 정상 실행
Completed : 한번만 실행하는 배치작업 pod에서 작업이 완료된 상태
Error : Pod에 문제가 생겨 에러 발생
CrashLoopBackOff : 지속적으로 error상태여서 crash가 반복되는 상태
컨테이너 상세 정보 확인
kubectl describe pod
디버깅 용도로 사용 가능
컨테이너 로깅
kubectl logs
# 출력 스트림이 종료되지 않고, 지속적 로그 출력 : -f, --follow 옵션
kubectl logs -f
# Pod가 완료되기 까지 기다리기
kubectl wiat --for condition=Ready pod
컨테이너 명령 전달
kubectl exec --
# 컨테이너 내부로 들어가기 : -it 옵션
kubectl exec -it --
컨테이너 / 호스트간 파일 복사
kubectl cp
# 컨테이너 파일 위치 : :
# -->
kubectl cp /etc/passwd mynginx:/tmp/passwd
컨테이너 정보 수정
kubectl edit pod
텍스트 에디터가 열리면서 편집 가능
컨테이너 삭제
kubectl delete pod
선언형 명령 정의서(YAML) 기반 컨테이너 생성
kubectl apply -f
kubectl run 명령과 동일하지만 이는 명령형 스타일이고 apply는 선언형 스타일입니다. 따라서 앞으로는 apply를 이용해서 쿠버네티스 리소스를 생성하는 것이 좋습니다. 로컬 파일시스템에 위치한 yaml 정의서 뿐만 아니라, 인터넷 상에 위치한 yaml 정의서도 손쉽게 가져다 사용할 수 있기 때문입니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/pods/simple-pod.yaml
kubectl delete -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/pods/simple-pod.yaml
멱등성(idempotent) : 동일 연산을 여러 번 적용하더라도 최종 결과가 달라지지 않는 성질.
3.2 고급 명령
리소스별 명령
kubectl get <리소스명>
kubectl get node
네임스페이스
kubectl get namespace
# 특정 namespace에서 확인 : -n, --namespace 옵션
kubectl get pod -n kube-system
default : 기본 네임스페이스. 아무 옵션 없이 컨테이너 생성시 여기에 생성
kube-system : 쿠버네티스 핵심 컴포넌트들이 들어있는 네임스페이스. 네트워크 설정, DNS 서버 등 중요 컨테이너 존재
kube-public : 외부로 공개 가능한 리소스를 담고 있는 네임스페이스
kube-node-lease : 노드가 살아있는지 마스터에 알리는 용도
즉석 리소스 생성
매번 yaml 명령 정의서를 이용하여 리소스를 생성하면 번거롭기 때문에 cat & here document 명령 조합으로 즉석에서 리소스 생성을 할 수 있습니다.
cat << EOF | kubectl apply -f -
apiVersion : v1
kind: Pod
metadata:
name: cat-nginx
spec:
containers:
- image: nginx
name: cat-nginx
EOF
리소스 특정 정보 추출
--jsonpath 옵션을 이용하여 리소스의 특정 정보만을 추출할 수 있습니다.
kubectl get node master -o jsonpath="{.status.addresses[0].address}"
참고 : https://kubernetes.io/docs/reference/kubectl/jsonpath
모든 리소스 조회
kubectl api-resources
실행 후 결과의 4번째 컬럼 NAMESPACED 가 존재합니다.
해당 컬럼 값이 true인 경우는 네임스페이스 레벨의 리소스로 해당 리소스가 반드시 특정 네임스페이스에 속해야 하는 리소스를 의미합니다.
네임스페이스 레벨의 대표적인 리소스가 pod 이고 클러스터 레벨의 리소스는 node입니다. 쿠버네티스 노드는 특별한 네임스페이스에 속하지 않고 클러스터 레벨에서 쿠버네티스 클러스터를 구성하기 때문입니다.
네임스페이스 레벨의 API리소스만 탐색하기 위한 명령어는 다음과 같습니다.
kubectl api-resources --namespaced=true
리소스 정의 설명
kubectl explain pods
클러스터 상태 확인
쿠버네티스 클러스터의 정상 동작을 확인할 때 사용합니다. 전반적인 클러스터의 health check를 원할 때 사용합니다.
# 쿠버네티스 API 서버 작동 여부 확인
kubectl cluster-info
# 전체 노드 상태 확인
kubectl get node
# 쿠버네티스 핵심 컴포넌트의 pod 상태 확인
kubectl get pod -n kube-system
클라이언트 설정 파일
쿠버네티스 툴은 내부적으로 KUBECONFIG($HOME/.kube/config) 설정 파일을 참조하여 마스터 주소, 인증 정보 등을 관리합니다. kubectl의 설정값을 바꾸기 위해 직접 해당 파일을 수정하거나 kubectl config명령을 사용합니다.
kubectl config view
cat $HOME/.kube/config
KUBECONFING 파일은 크게 3가지 영역으로 나눠집니다.
clusters: kubectl 툴이 바라보는 클러스터 정보
users: 클러스터에 접속하는 사용자
contexts: cluster와 user를 연결해주는 영역
kubectl 명령 치트시트
https://kubernetes.io/docs/reference/kubectl/cheatsheet/
from http://minimun92.tistory.com/59 by ccl(A) rewrite - 2021-09-10 16:26:34