참고
Imperative(명령형) vs Declarative(선언형)
NOTE
순차적인 명령과, 요구사항을 적는 차이점이다.
쿠버네티스에서 인프라 관리를 명령형으로 한다는건 run, create, expose, edit와 같은 명령어를 사용한다는 것이다.
•
하지만 이렇게하면, 복잡한 요구사항의 경우, 긴 명령어를 작성해야 한다.
•
또한 한번 실행되고 잊혀지면서, 해당 커맨드를 실행했던 사람의 세션기록에서만 확인할 수 있다. (변경추적이 어려워짐)
쿠버네티스에서 인프라 관리를 선언형으로 한다는건 yaml형식으로 파일을 만든다는 것이다.
•
yaml파일로 기록하면서, 레포지토리에 저장이 가능하고, 실제로 반영되기전에 변경사항을 검토하고 승인할 수 있다.
•
파일을 통한 수정(apply)는 코드와 쿠버네티스의 요구사항이 달라질일이 없다.
•
yaml을 통해서 apply하면JSON형식으로 해당 파일정보가 기록된다.
kubectl 기본 명령어
NOTE
kubectl의 기본적인 사용법을 익힌다!
# alias 설정
alias k='kubectl'
# shell 설정 추가
echo "alias k='kubectl'" >> ~/.bashrc
source ~/.bashrc
Bash
복사
kubectl을 k로 단축해서 사용할 수 있음
상태 설정하기 - apply(선언형)
NOTE
원하는 리소스의 상태를 YAML로 작성하고 apply명령어로 선언한다.
kubectl apply -f [파일명 또는 URL]
# 사용예시
kubectl apply -f https://subicura.com/k8s/code/guide/index/wordpress-k8s.yml
Bash
복사
리소스 목록보기 - get
NOTE
쿠버네티스에 선언된 리소스를 확인하는 명령어다!
# Pod 조회
kubectl get pod
# 줄임말(Shortname)과 복수형 사용가능
kubectl get pods
kubectl get po
# 여러 TYPE 입력
kubectl get pod,service
kubectl get po,svc
# Pod, ReplicaSet, Deployment, Service, Job 조회 => all
kubectl get all
# 결과 포멧 변경
kubectl get pod -o wide
kubectl get pod -o yaml
kubectl get pod -o json
# Label 조회
kubectl get pod --show-labels
Bash
복사
•
-o
◦
출력 형태를 변경할 수 있다.
•
--show-labels
◦
레이블을 확인할 수 있다.
리소스 상세보기 - describe
NOTE
쿠버네티스에 선언된 리소스의 상세한 상태 확인하는 명령어다!
kubectl describe [TYPE]/[NAME] 또는 [TYPE] [NAME]
# 조회한 이름으로 상세 확인
kubectl describe pod/wordpress-5f59577d4d-8t2dg
Bash
복사
리소스 제거 - delete
NOTE
쿠버네티스에 선언된 리소스를 제거하는 명령어다!
kubectl delete [TYPE]/[NAME] 또는 [TYPE] [NAME]
# Pod 조회로 이름 검색
kubectl get pod
# 조회한 Pod 제거
kubectl delete pod/wordpress-5f59577d4d-8t2dg
Bash
복사
•
Pod를 제거해도 계속해서 살아난다
◦
정상적인 결과이다. (ReplicaSet이 계속해서 Pod의 개수를 유지해주기 때문)
컨테이너 로그 조회 - logs
NOTE
컨테이너의 로그를 확인하는 명령어다!
kubectl logs [POD_NAME]
# Pod 조회로 이름 검색
kubectl get pod
# 조회한 Pod 로그조회
kubectl logs wordpress-5f59577d4d-8t2dg
# 실시간 로그 보기
kubectl logs -f wordpress-5f59577d4d-8t2dg
Bash
복사
컨테이너 명령어 전달 - exec
NOTE
컨테이너에 접속하는 명령어다!
kubectl exec [-it] [POD_NAME] -- [COMMAND]
# Pod 조회로 이름 검색
kubectl get pod
# 조회한 Pod의 컨테이너에 접속
kubectl exec -it wordpress-5f59577d4d-8t2dg -- bash
Bash
복사
•
--는 exec에 대한 인자 값을 나누고 싶을 때 사용된다.
◦
kubectl exec -it nginx-pod ls /run
◦
kubectl exec -it nginx-pod -- ls -l /run
설정 관리 - config
NOTE
kubectl은 여러 개의 쿠버네티스 클러스터를 context로 설정하고 필요에 따라 선택할 수 있다.
# 현재 컨텍스트 확인
kubectl config current-context
# 컨텍스트 설정
kubectl config use-context minikube
Bash
복사
•
문제가 생긴 node에 pod를 할당하면 문제가 생길 가능성이 높다.
•
이런 경우, 영향도가 적은 pod를 할당해 일정 기간 동안 사용하면서 모니터링 해야한다.
•
하지만 쿠버네티스는 모든 노드에 균등하게 pod를 할당하려함 → 어떻게하면 문제가 생길 수 있는 node라는 것을 알려줄 수 있는가?
# node에 문제가 있다고 알림!
kubectl uncordon w1-k8s
Bash
복사
SchedulingDisabled 적용됨
kubectl get pod echo-hname-xxxx -o yaml > pod.yaml
vi pod.yaml
Bash
복사
배포된 pod의 세부값 확인하기
노드 유지보수하기 - drain
NOTE
지정된 node의 pod를 전부 다른곳으로 이동시켜 해당 node를 유지보수할 수 있게 해준다.
# 이렇게만 하면 demonset 못지운다고 나옴
kubectl drain w1-k8s
# daemonset 제외하고 적용
kubectl drain w1-k8s --ignore-daemonsets
Bash
복사
demonset
•
각 노드에 1개씩만 존재하는 pod라서 drain으로 지울 수 없다.
•
그러므로 daemoset을 제외하고 drain을 적용해야함
파드 업데이트하기
NOTE
컨테이너 버전 업데이트에서 사용한다!
# --record를 통해 배포한 정보의 히스토리 기록
kubectl apply -f ~/_Book_k8sInfra/ch3/3.2.10/rollout-nginx.yaml --record
# 히스토리 확인
kubectl rollout history deployment rollout-nginx
# 배포한 파드의 정보를 확인
kubectl get pods -o=custom-columns=NAME:.metadata.name,IP:.status.podIP,STATUS:.status.phase,NODE:.spec.nodeName
# 현재 버전확인
curl -I --[배포된 파드 ip] | grep Server
# 이미지 업데이트
kubectl set image deployment rollout-nginx nginx=nginx:1.16.0 --record
# rollout history로 rollout-nginx에 실행된 명령어 확인
kubectl rollout history deployment rollout-nginx
Bash
복사