티스토리 뷰

◼ Rolling Updates and Rollbacks

  • application update 하는 deployment strategies로 두 가지 방법이 있다.

Recreate

  • 기존에 배포된 모든 application을 삭제하고 updated된 application을 한 번에 배포하는 전략
  • 삭제되고 생성되는 과정에서 application이 작동이 안되는 downtime이 존재한다.

Rolling update

Rolling Update

rolling update: application이 downtime 없이 점진적으로 updated 되는 것
rollout: application을 update하는 것
  • 따로 설정하지 않으면 rolling update가 default이다.
  • deployment가 rollout을 trigger한다.
    • pod template이 변경되면 updated 된다.
    • replica가 변하는 것 등은 해당되지 않는다.
  • rollout 될 때마다 해당 버전이 관리되는데 revision이라고 한다.
  • rollout 상태 확인: kubectl rollout status deployment/myapp-deployment
  • rollout 히스토리 확인: kubectl rollout history deployment/myapp-deployment
    특정 버전 정보를 보려면 --revison 사용(kubectl rollout history deployment/myapp-deployment --revision=2)

Rollback

적용한 rollout을 되돌 릴 수 있다.

  • kubectl rollout undo deployment/myapp-deplyment
  • 특정 버전으로 되돌리려면 to-revisioin 사용(kubectl rollout undo deployment/myapp-deployment --to-revisiion=2)

◼ Configure Application

Command & Arguments

  • docker에서 쓰이는 entrypoint와 cmd를 k8s에서는 command와 args라는 이름으로 바꿔서 쓰이고 있다.
  • 경우의 수는 아래와 같다.
    https://kubernetes.io/ko/docs/tasks/inject-data-application/define-command-argument-container/

Configuring environment variables in applications

TL;DR 크게 3가지 방법(plain, configMap, Secretes)으로 설정이 가능하다.

ConfigMap

  • 크게 세 가지 방법으로 주입 가능(file 형태, configmap 중 개별로 주입, volume으로 사용)

Secretes

  • base64로 인코딩 된 값을 사용
    • 누구나 decoding이 가능하기 때문에 안전하게 secret을 다루려면 다른 solution이 필요하다.(i.e. vault)
  • 크게 세 가지 방법으로 주입이 가능하다.
    volume으로 주입할 경우 각각의 key가 하나의 file로 저장이 된다.

◼ Init Container

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
  • Pod를 구성하는데 한 번만 실행되고 필요 없는 container를 만들 때 사용
    • git clone 등 소스나 바이너리를 받아 application에서 사용하기 위해
    • application이 시작되기 전에 외부 api와 연동이 먼저 되어야 할 때
  • Pod가 만들어지면 init.Continaer먼저 생성
  • init container가 여러 개라면 순차적으로 실행
  • init container가 문제가 있다면 성공할 때까지 pod 재 실행

Reference

반응형

'DevOps' 카테고리의 다른 글

[CKA] Cluster Maintenance  (0) 2022.03.08
[CKA] logging & monitoring  (0) 2022.03.05
[CKA] Scheduling  (0) 2022.03.04
[CKA] Core Concepts  (0) 2022.03.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함