Kubernetes/Beginner

Kubernetes for the Absolute Beginners - 섹션 5

mimimin 2024. 7. 25. 13:36

이번 섹션에서는 yaml를 이용해 여러 객체를 생성하는 실습을 수행했다.

 

[기본 yaml 형식]

- api version

  :객체마다 필요로하는 버전이 다르니 주의해서 기입해야 함

   (e.g) Pod: v1 / ReplicaSet: apps/v1 / Deployment: apps/v1

- kind

  :생성하려는 객체명을 기입하며, 대소문자 구별하니 주의해야 함

   (e.g) Pod / ReplicaSet / Deployment

- metadata

   :객체를 구별하기 위한 데이터를 입력하는 곳으로 name과 label 등이 있음, dictionary로 기입

   (e.g) metadata:

              name: name_you_want

              labels: 

                 app: myapp

                 tier: bronze

- spec

  : 생성하려는 객체에 대한 실제 정보를 입력하는 곳으로, 객체에 따라 입력 내용이 다름

 

*객체 생성 yaml*

 

Pod, ReplicaSet, Deployment를 만드는 yaml 파일

 

[ReplicaSet]

- 이전에는 Replication Controller이라는 유사 기능 사용했음, 현재는 ReplicaSet으로 변경되는 추세

- HA 보장을 위한 것으로, 항상 Pod가 설정 개수만큼 항상 실행될 수 있도록 함

- Pod가 아닌 Node도 관리 가능, 특정 Node 내 Pod가 모두 죽어도 다른 Node에서 해당 Pod 수행 가능하도록 함(LB 역할)

- yaml 파일 spec 부분에 - template(image 이름), replicas(수행 개수) 입력

<yaml 형태>

replica set - apiVersion: apps/v1

                    kind:

                    metadate:

                    spec:

                      selector: 

                        mathLabel:

                          type: podLabel (Pod Label 명)

                     replicas: (유지할 Pod 개수)

                     template: (Pod 내용)

* replicaset에 설정 된 개수를 유지시키기 위해 pod가 종료 / 추가 수행됨

 

[Deployment]

- ReplicaSet보다 큰 개념으로 upgrade 등을 seemless로 수행 가능하게 함설ㅈ

- Deployment가 ReplicaSet 제어, ReplicaSet이 Pod 제어

 

[Rollout]

- Deployment 변화 추적, 필요시 rollback할 수 있게 해줌, 관련된 어떤 활동을 다 Rollout이라 생각하면 편함

- 업그레이드 중 문제 발생 시 이전 버전으로 롤백

kubectl rollout undo deployment deployment-name

- 특정 revision으로 돌아가면, history 확인 시 해당 revision은 삭제되고 신규 revision 번호가 부여됨

   (= 동일한 명령어이기 때문)

 

[Deployment strategy]

- recreate: 구버전 모두 내린 후 신규버전 업로드 = 다운타임 생김

- rolling update: 구버전 내리고 신규버전 업로드 1개씩 반복 = 기본 전략

                           => rs를 하나 더 만들어서 교체하는 느낌임 (한번에 변경할 % 설정 가능)

 

<관련 명령어>

- yaml 파일 수행: kubectl creat -f file.yml

- 객체 생성: kubectl create  deployment httpd-frontend2 --image=http:2.4-alpine --replicas=3

- 객체 목록 확인: kubectl get all 

                            kubectl get replicaset

- yaml 파일 수정 내용 적용: kubectl replace -f file.yml 

                                             kubectl apply -f name.yaml  

- 설정 내용 수정: kubectl edit my-replicaset

                            kubectl scale --replicas=3 -f file.yml

                            kubectl scale --replicas=3 replicaset my-replicaset    

                            kubectl set image deployment deployment-name container_name=image_name 

- 상세 내용 확인: kubectl explain replicaset

- deployment 상태 확인: kubectl rollout status deployment deployment-name

- deployment 변경 내용 추적: kubectl rollout history deployment deployment-name

  (--record 옵션을 통해 변경 했어야 확인 가능)

- 테스트: kubectl run a --image=nginx --dry-run -o yaml > ab.yaml

               * --dry-run 옵션으로 실제 수행 / 수행x 방법으로 적용 가능 여부 확인, 관련 yaml 파일 생성 위해 redirection 사용