Deployment
는 변하지 않는 immutable
어플리케이션에 적합한 기능이다.
Deploy
가 RS
을 만들고 RS
가 Pod
를 만드는 방식이다.
아래 배포 전략의 개념을 한 번 공부해보면 이해하는데 도움이 될 수 있다.
https://thenewstack.io/deployment-strategies/
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 #모니터링하는 또다른 방법
rollout
을 할 때, max surge
가 1
이면 순간적으로 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
### 여기에서의 버전 역시 히스토리를 기준으로 함
이 설정을 통해 대기시간을 줄 수 있다.
liveness나
startup probe를 사용한다면 필요하지 않을 수 있다.
업데이트를 어떻게 할지 정할 수 있다. 기본값은 RollingUpdate
로 하나 씩 순차적으로 업데이트 된다.