Search
Duplicate
📒

[Kubernetes Infra] 02-1. 기본 명령어, 선언/명령형 차이

상태
완료
수업
Kubernetes Infra
주제
4 more properties
참고

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
복사