-
[핵심만 콕! 쿠버네티스] 쿠버네티스 첫만남 / 도커와 비교한 쿠버네티스 명령어 총정리(feat. kubectl)📚 개발 도서/핵심만 콕! 쿠버네티스 2023. 7. 15. 22:59
이번 글에서는 도커 기초 에 이어 쿠버네티스 클러스터와 대화하는 방법을 알아보자!
쿠버네티스 기본/고급 명령어를 정리해볼 예정이다.
쿠버네티스 클러스터를 컨트롤하기 위해 클라이언트 툴인 kubectl 명령툴을 사용한다.
쿠버네티스 API 서버는 REST API로 통신을 한다.
기본 명령
기본적으로 도커 컨테이너와 마찬가지로 컨테이너의 실행과 삭제, 조회 등을 할 수 있다.
컨테이너 실행
# <NAME> 이름의 컨테이너를 <IMAGE> 를 이용하여 생성하라 kubectl run <NAME> --image <IMAGE>
- 도커 명령 비교 docker run
컨테이너 조회
# 컨테이너 확인 kubectl get pod NAME READY STATUS RESTARTS AGE mynginx 1/1 Running 0 90s # 특정 pod 상태 정보를 더 자세히 보고 싶다면? kubectl get pod -o yaml # 간단하게 Pod의 IP를 바로 확인하고 싶다면? kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mynginx 1/1 Running 0 13m 10.42.1.2 0c0c150d7ee2 <none> <none>
kubectl get container가 아니라 kubectl get pod인 이유는 다음장에서 알려준다. 지금은 컨테이너와 Pod이 같다는 정도로 이해하고 넘어가자.
- 도커 명령 비교 docker ps
STATUS 목록
- Pending: 쿠버네티스 마스터에 생성 명령은 전달되었지만 아직 실행되지 않은 상태
- ContainerCreating: 특정 노드에 스케줄링되어 컨테이너를 생성 중인 단계 (이미지 다운로드 중 등)
- Running: Pod이 정상적으로 실행되고 있는 상태
- Completed: 계속 실행되고 있는 프로세스가 아닌 한번 실행하고 완료되는 배치작업 Pod에서 작업이 완료된 상태
- Error: Pod에 문제가 생겨 에러가 발생한 상태
- CrashLoopBackOff: 지속적으로 에러 상태로 있어 crash가 반복되는 상태
컨테이너 상세정보 확인
get 명령어와 유사하지만, get과는 조금 다르게 Pod에 대한 Events 기록까지 확인할 수 있다. 이는 디버깅 용도로 자주 사용된다.
kubectl describe pod <NAME>
컨테이너 로깅
도커 컨테이너 로깅과 마찬가지로 컨테이너 로그 정보를 확인할 수 있다. --follow 옵션은 출력 스트림이 종료되지 않고 지속적으로 로그를 출력한다.
kubectl logs <NAME> # 지속적으로 로그 출력하고 싶은 경우? kubectl logs -f <NAME>
- 도커 명령 비교 docker logs
[참고] kubectl wait --for condition=Ready pod <NAME> Pod이 완료되기 까지 기다린다.
kubectl wait --for condition=Ready pod mynginx pod/mynginx condition met
컨테이너 명령 전달
kubectl exec -- # 예시 kubectl exec mynginx -- apt-get update Get:1 <http://deb.debian.org/debian> bookworm InRelease [147 kB] Get:2 <http://deb.debian.org/debian> bookworm-updates InRelease [52.1 kB] Get:3 <http://deb.debian.org/debian-security> bookworm-security InRelease [48.0 kB] Get:4 <http://deb.debian.org/debian> bookworm/main arm64 Packages [8802 kB] Get:5 <http://deb.debian.org/debian-security> bookworm-security/main arm64 Packages [39.3 kB] Fetched 9088 kB in 2s (4724 kB/s) Reading package lists...
- 도커 명령 비교 docker exec -it mynginx -- bash
컨테이너 / 호스트간 파일 복사
컨테이너에서 호스트로 또는 호스트에서 컨테이너로 파일을 복사할 때 사용한다.
컨테이너 안의 파일 위치를 표현할 때는 <CONTAINER_NAME>:<PATH> 와 같은 형식을 사용한다.
kubect cp <TARGET> <SOURCE> # <HOST> --> <CONTAINER> kubect cp /etc/passwd mynginx:/tmp/passwd
[예시]
/ # vi test.txt / # kubectl cp test.txt mynginx:/tmp/ / # kubectl exec mynginx -- ls /tmp test.txt / # kubectl exec mynginx -- cat /tmp/test.txt this is test.
컨테이너 정보 수정
kubectl edit pod <NAME>
edit 명령을 실행하면 vim과 같은 텍스트 에디터가 열린다.
- 도커 명령 비교 docker update
컨테이너 삭제
kubectl delete pod <NAME>
선언형 명령 정의서(YAML) 기반의 컨테이너 생성
kubectl apply -f <FILE_NAME>
# mynginx.yaml apiVersion: v1 kind: Pod metadata: name: mynginx spec: containers: - name: mynginx image: nginx
위처럼 가장 기본이 되는 정보만 입력하면, 쿠버네티스가 알아서 나머지 값들을 채운다.
apply라는 선언형 명령은 멱등성을 보장하여 여러번 실행하더라도 항상 YAML 정의서에 선언된 내용과 동일한 결과를 얻을 수 있게 한다.
kubectl apply -f mynginx.yaml pod/mynginx unchanged
고급 명령
리소스별 명령어
kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 56m # 클러스터를 구축하기 위해 사용한 Node kubectl get node NAME STATUS ROLES AGE VERSION 0c0c150d7ee2 Ready <none> 52m v1.26.6+k3s1 0f1774cf65bf Ready control-plane,master 57m v1.26.6+k3s1 # 클러스터를 논리적으로 나누는 역할을 하는 namespace kubectl get namespace NAME STATUS AGE # 기본 네임스페이스. 아무런 옵션 없이 컨테이너를 만드는 경우 default Active 58m # 쿠버네티스 핵심 컴포넌트들이 들어있는 네임스페이스. 네트워크 설정, DNS 서버 등 중요한 역할을 담당하는 컨테이너가 존재한다. kube-system Active 58m # 외부로 공개 가능한 리소스를 담고 있는 네임스페이스. kube-public Active 58m # 노드가 살아있는지 마스터에 알리는 용도로 존재하는 네임스페이스. kube-node-lease Active 58m
자동완성 기능
<https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion>
echo 'source <(kubectl completion bash)' >>~/.bashrc source ~/.bashrc
즉석 리소스 생성
cat & here document 명령 조합을 활용해 즉석으로 리소스를 생성할 수 있다.
cat << EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: cat-mynginx spec: containers: - name: cat-mynginx image: ngin EOF pod/cat-nginx created
리소스 특정 정보 추출
kubectl get node master -o jsonpath="{.status.addresses[0].address}" # 10.0.1.1
모든 리소스 조회
kubectl api-resources kubectl api-resources --namespaced=true # 네임스페이스 레벨의 API 리소스만 탐색하기 위한 명령어
클러스터 상태 확인
# 쿠버네티스 API 서버 작동 여부 확인 kubectl cluster-info # 전체 노드 상태 확인 kubectl get node # 쿠버네티스 핵심 컴포넌트의 Pod 상태 확인 kubectl get pod -n kube-system
반응형'📚 개발 도서 > 핵심만 콕! 쿠버네티스' 카테고리의 다른 글
[핵심만 콕! 쿠버네티스] 도커 기초 (도커 소개 및 명령어 총정리) (1) 2023.07.12