[Kubernetes 입문] 3. 쿠버네티스로 컨테이너 실행하기
2장은 쿠버네티스 설치 관련 내용으로 다른 자료들도 많아 건너 뜁니다.
- 쿠버네티스 관리를 위한 기본 커맨드라인 인터페이스 kubectl
- 파드로 컨테이너 실행
- 상태 살펴보기
- 컨테이너 삭제등의 기본 사용법과 주요 활용법 소개
kubectl 에서 지원하는 명령
- 쿠버네티스 자원들의 생성, 업데이트 삭제 (create, update, delete)
- 디버그, 모니터링, 트러블 슈팅 (log, exec, cp, top, attach, 등등..)
- 클러스터 관리 (cordon, top, drain, taint, 등등...)
쿠버네티스 kubectl 공식 문서 : kubectl Cheat Sheet
kubectl short name : https://kubernetes.io/docs/reference/kubectl/#resource-types
kubectl 설치
공식 사이트 - https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/
# 리눅스
$ curl -LO https://dl.k8s.io/release/v클러스터버전번호/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
# macOS - Intel
$ curl -LO https://dl.k8s.io/release/v클러스터버전번호/bin/darwin/amd64/kubectl
# macOS - Apple M1
$ curl -LO https://dl.k8s.io/release/v클러스터버전번호/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl
# macOS - homebrew 사용
$ brew install kubectl
or
$ brew install kubernetes-cli
# 윈도우
> curl -LO https://dl.k8s.io/release/v클러스터버전번호/bin/linux/amd64/kubectl.exe
Amazon EKS 용 kubectl 설치 방법
- https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html
- AWS EKS로 간단한 웹 애플리케이션 구축하기 강의 : https://www.youtube.com/watch?v=kb6s0Tmp2CA&t=673s
kubectl 기본 사용법
kubectl [ command ] [ TYPE ] [ NAME ] [ flags ]
- command : 자원에 실행하려는 동작. create, get, delete 등을 사용할 수 있음
- TYPE: 쿠버네티스 자원 타입. pod, service, ingress 등을 사용
- NAME: 자원 이름
- FLAG: 부가적으로 설정할 옵션 입력
kubectl get 은 쿠버네티스에 있는 자원 상태를 확인할 때 가장 많이 사용하는 명령어
- ex) kubectl get pods 로 모든 파드의 상태를 확인할 수 있음
간단한 kubectl 자원 생성 명령어
쿠버네티스 파드 생성
$ kubectl run {자원이름} --image="{이미지}" --port={포트번호}
# example
$ kubectl run echoserver --image="k8s.gcr.io/echoserver:1.10" --port=8080
쿠버네티스의 파드들에 접근할 때 필요한 서비스 생성
$ kubectl expose po {접근할 자원이름} --type={타입}
# example
$ kubectl expose po echoserver --type=NodePort
쿠버네티스 내 자원 확인
# 컨텍스트 내 모든 자원 확인
$ kubectl get all
# 컨텍스트 내 파드 확인
$ kubectl get pods
# 컨텍스트 내 서비스 확인
$ kubectl get services
- NAME : 파드 이름
- READY : 숫자/숫자 형태로 파드의 준비 상태를 표시합니다. 0/1 이면 파드는 생성됐지만, 준비는 안된 상태라는 뜻
- STATUS : 파드의 현재 상태
- RESTART : 해당 파드가 몇 번 재시작 했는지 표시 (에러가 나서 pod 시작에 실패 등의 사유로 재시작을 시도함)
- AGE : 파드를 생성한 후 지난 시간
- NAME : 서비스 이름
- TYPE : 서비스 타입
- CLUSTER-IP : 현재 클러스터 안에서 사용되는 IP
- EXTERNA-IP : 클러스터 외부에서 접속할 때 사용하는 IP
- PORT(S) : 해당 서비스에 접속하는 포트를 표시
- AGE : 자원을 생성한 후 지난 시간
쿠버네티스 포트포워딩 명령어
$ kubectl port-forward {자원} {host port}:{pod port}
# example
$ kubectl port-forward svc/echoserver 8080:8080
# svc/echoserver 의 svc 는 service 를 의미한다.
# 따라서 service/echoserver 로 입력해도 동일하게 동작한다.
쿠버네티스 자원 내부 로그 확인
$ kubectl logs {자원이름}
# example
$ kubectl logs echoserver
쿠버네티스 자원 삭제
$ kubectl delete {자원 타입} {자원 이름}
# example
$ kubectl delete pod echoserver
POSIX/GNU 스타일의 명령 작성 규칙
kubectl 은 기본적으로 POSIX/GNU 스타일의 명령 작성 규칙을 따름
- - 과 함께 사용하는 옵션은 단일 알파벳/숫자 문자 인자는 짧은 옵션(short option) 입니다.
- 일부 옵션은 인자를 필요로 함
- -- 과 함께 사용하는 옵션은 알파벳 두 글자 이상으로 구성한 긴 옵션(long option)
- -- 이후에 작성하는 인자가 있다면 쿠버네티스 관련 옵션들은 종료한다는 뜻입니다.
Program Argument Syntax Conventions
# example
$ kubectl -n default exec my-pod -c my-container -- ls /
- -n default : -n 은 네임스페이스를 지정하는 옵션
- exec my-pod : my-pod 라는 이름의 파드에 해당 명령을 실행하다는 뜻 (필수 인자)
- -c my-container : 컨테이너를 지정하는 옵션
- -- ls / : 쿠버네티스 관련 옵션들을 모두 종료한다는 뜻. -- 이후에 컨테이너에서 실행할 명령을 설정할 수 있습니다.
kubeconfig 환경 변수
kubectl은 기본적으로 $HOME/.kube/config 파일에서 클러스터, 인증, 컨텍스트 정보를 읽어들임
이런 클러스터 구성 정보를 kubeconfig 라고 칭함
클러스터에서 사용할 수 있는 자원들은 kubectl api-resource 명령으로 확인이 가능
만약 도커 데스크톱으로 쿠버네티스를 사용한다면 자동으로 kubeconfig 가 설정됨
다음 명령을 실행해 사용이 가능
$ kubectl config use-context docker-desktop
--kubeconfig 옵션으로 다른 설정 파일을 지정 가능
# example
$ kubectl -kubeconfig=AWSconfig get pods
$ kubectl -kubeconfig=GCPconfig get pods
다중 클러스터, 다중 네임스페이스 전환 툴
kubectx : 다중클러스터 사용시 클러스터 전환을 쉽게 해주는 툴
kubens : k8s cluster 내에 namespace를 쉽게 전환해주는 툴
https://kim-dragon.tistory.com/72
참고자료
- 쿠버네티스 입문 / 동양북스 http://www.yes24.com/Product/Goods/85578606