프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

 

 

Kubernetes Deployment

 

버전 업데이트를 위해 사용한다.

Replica set의 상위 오브젝트로서 생성 시, 대응되는 Replica set도 자동 생성된다. 따라서 Replica set을 생성하는 경우는 거의 없다.

Deployment는 애플리케이션을 업데이트할 때 레플리카셋의 변경 사항을 저장하는 리비전을 남겨 롤백을 가능하게 해주고, 무중단 서비스를 위한 롤링 업데이트 전략을 적용할 수 있다.

 

 

 

하나씩 없애고 v2에 새로 생성한다.

트래픽을 점차 v2 pod들로 옮겨주면, 서비스 중단 없는 무중단 서비스가 실현이 된다.

 

 

 

 

 

Deployment 생성해 보기

 

# deployment.yaml
cat > deployment.yaml
apiVersion: apps/v1
kind: Deployment	#Deployment
metadata:
  name: deployment-cloud
spec:
  replicas: 3
  selector:
    matchLabels:
      app: cloud-nginx-pods
  template:
    metadata:
      name: cloud-nginx-pod
      labels:
        app: cloud-nginx-pods
    spec:
      containers:
      - name: nginx
        image: nginx:latest

 

 

 

 

리플리카 셋의 상위 오브젝트이기 때문에 리플리카도 같이 생성된다.

 

 

k get deployments.apps -o wide

 

 

 

 

 

디플로이 정보 확인

 

k describe deployments.apps deployment-cloud

 

 

 

레플리카의 상위 오브젝트이므로 deployments id는 동일하다.

 

 

 

ReplicasDesired 개수 늘리기

 

런타임 중에 replica의 세팅을 변경할 수 있다.

하지만 yaml과 같은 파일은 공통 작업 시에 변경 기록을 남기는 형상 관리가 필요할 것이다.

따라서 직접 세팅 바꾸기보단 yaml로 남겨서 관리해야 좋다.

 

 

#Desired 개수 바꾸기

k scale deployment --replicas 5 deployment-cloud

 

 

 

 

레플리카 셋이 기본 생성되기 때문에 파드를 지워도 여전히 5개가 유지된다.

 

 

 

 

 

 

 

레플리카 셋을 지워보자.

k delete replicasets.apps –all

 

여전히 5개로 남는다.

 

 

레플리카 셋도 디플로이먼트의 하위 오브젝트이기 때문에 디플로이먼트를 지워야 모두가 지워진다.

k delete deployments.apps deployment-cloud

 

 

 

 

버전 업데이트

롤링 업데이트를 해보자.

기존 서비스를 유지하면서 변경된 서비스로 이전한다.

 

# deployment-1.yaml
cat > deployment-1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: cndk-nginx-pods
  template:
    metadata:
      name: cndk-nginx-pod
      labels:
        app: cndk-nginx-pods
    spec:
      containers:
      - name: nginx
        image: nginx:1.11		#Nginx 버전을 다른 것으로 적용해보자.

 

 

 

 

#record 옵션으로 레플리카 셋에 대한 정보를 기록한다.

 

버전을 기록시켜 두면, 특정 버전으로 롤백시킬 때 사용할 수 있다.

k apply -f deployment-1.yaml --record

 

 

#동작 중인 이미지의 버전 정보 확인

k get pod -o yaml |grep "image: nginx"

 

 

 

 

# 롤링 가능한 기록 버전 확인

k rollout history deployment deployment-nginx

 

 

 

 

 

# 1초마다 rollout 상태 확인 모니터링

while true; do kubectl rollout status deployment deployment-nginx && echo "--------------" && date; sleep 1; done

 

 

 

 

# v1.12 로 버전 업데이트 실행

kubectl set image deployment deployment-nginx nginx=nginx:1.12 --record && kubectl get pod -w

kubectl get pod -o yaml | grep "image: nginx"

 

 

롤링 업데이트가 새로 진행된다.

 

 

점점 기존 버전의 개수를 없애고 새로운 것을 생성한다.

 

 

 

 

 

 

 

다시 다음 버전으로 업데이트.

kubectl set image deployment deployment-nginx nginx=nginx:1.13 --record && kubectl get pod -w

 

 

 

 

 

기존의 파드가 삭제되고 새로운 버전의 파드가 실행되는 것이 확인된다.

 

 

 

 

 

버전 롤백

기록해 둔 history로 롤백이 가능하다.

 

 

 

 

대신 데이터는 다 날아가고, ip변경도 계속 일어난다.

편해 보이는 과정에서도 고려해야 할 것이 상당히 있다.

 

 

#롤백 리스트

rollout history deployment deployment-nginx

 

 

 

#특정 리버전 숫자로 롤백

k rollout undo deployment deployment-nginx --to-revision 2

 

 

 

 

k get replicasets.apps --show-labels

리플리카 셋은 관리 영역이 라벨

 

 

2번이 사라지고 6번이 남는다.

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함