Kubernetes for the Absolute Beginners - 섹션 5
이번 섹션에서는 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*
[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 사용