Kubernetes Deployment

강재민·2022년 5월 24일
0

Kubernetes

목록 보기
10/29
post-thumbnail

Kubernetes설치


Deployment

Deployment는 변하지 않는 immutable 어플리케이션에 적합한 기능이다.
DeployRS을 만들고 RSPod를 만드는 방식이다.
아래 배포 전략의 개념을 한 번 공부해보면 이해하는데 도움이 될 수 있다.

https://thenewstack.io/deployment-strategies/


yaml 파일

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: myweb
          image: ghcr.io/c1t1d0s7/go-myweb:v1.0
          ports:
            - containerPort: 8080
apiVersion: v1
kind: Service
metadata:
  name: myweb-svc-lb
spec:
  type: LoadBalancer
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 8080

서비스 생성

kubectl create -f .
kubectl rollout
kubectl rollout status deploy myweb-deploy
kubectl rollout history deploy myweb-deploy

모니터링

### 터미널 한 쪽은

watch -n1 kubectl get deploy,rs,po

### 터미널 또 한 쪽은

watch -n1 curl 192.168.100.240

이미지 버전 교체

이미지를 교체하는 방법은 다음과 같다.
replace
kubectl edit
apply
patch
kubectl set image

kubectl set image

kubectl set image deployments myweb-deploy myweb=ghcr.i
o/c1t1d0s7/go-myweb:v2.0 --record

--record: 명령을 히스토리에 저장

undo

kubectl rollout
kubectl rollout undo deploy myweb-deploy

### 이전상태로 돌아갈 수 있음
### 1상태로 돌아가지만 버전은 1,2를 지나서 3임

replace

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb-deploy
  annotations:
    kubernetes.io/change-cause: "Change Go Myweb version from 3 to 4"
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: myweb
          image: ghcr.io/c1t1d0s7/go-myweb:v2.0
          ports:
            - containerPort: 8080
kubectl replace -f myweb-deploy.yaml

또는

apply

kubectl apply -f myweb-deploy.yaml
kubectl rollout status deploy myweb-deploy			#모니터링하는 또다른 방법

max surge와 max unavailable

rollout을 할 때, max surge1이면 순간적으로 3+1해서 4개까지만들어지게 된다.
만들고 지운다는 개념으로 하면 최대 3개를 넘게되고
지우고만든다라는 개념으로 하게되면 최대 3개를 넘을 필요는 없어지게된다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb-deploy
  annotations:
    kubernetes.io/change-cause: "Change Go Myweb version from 3 to 4"
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: myweb
          image: ghcr.io/c1t1d0s7/go-myweb:v4.0
          ports:
            - containerPort: 8080

수정 버전의 세부정보 확인

kubectl rollout history deployment/nginx-deployment --revision=2

### 이렇게 할 경우 실제 버전이 아니라 히스토리상의 버전순서를 기준으로 하는 것에 주의하자.


특정 수정 버전으로 롤백

kubectl rollout undo deployment/nginx-deployoment
kubectl rollout undo deployment/nginx-deployment --to-revision=2

### 여기에서의 버전 역시 히스토리를 기준으로 함


minReadySeconds

이 설정을 통해 대기시간을 줄 수 있다.
liveness나
startup probe를 사용한다면 필요하지 않을 수 있다.


updateStrategy

업데이트를 어떻게 할지 정할 수 있다. 기본값은 RollingUpdate로 하나 씩 순차적으로 업데이트 된다.

0개의 댓글