일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- docker image
- yum
- permission
- vgcreate
- nmcli
- lvcreate
- ssh
- mount
- tar
- vagrant kubernetes
- 프로세스
- M365필터
- pvcreate
- chatGPT
- 엑셀파일명변경
- HTTPD
- swapon
- docker network
- 같은폴더
- MSBing
- 랜카드인식불량
- firewalld
- journalctl
- chmod
- 리다이렉션
- newbingai
- Kubernetes
- ansible
- 날짜변경
- docker
- Today
- Total
becool
20210903 (금) deployment, deployment strategies 본문
Deployment
ReplicaSet을 포함하는 상위 수준의 컨트롤러
지정된 갯수의 pod 복제본을 생성하고 유지함
배포전략 (Deployment Strategy) 작성방법
spec:
strategy:
type: STRATEGY_TYPE
STRATEGY_TYPE:
~~~
(Kubernetes에서 지원하는) 배포전략 종류
RollingUpdate: 롤링 업데이트 (빠른 롤백이 가능)
기존 애플리케이션 버전에서 새로운 애플리케이션 버전으로 점진적으로 교체하는 배포 전략
maxUnavilable : 롤링 업데이트 중 사용할 수 없는 최대 pod의 수 (기본값: 전체 pod의 25%/정수, 비율 지정가능)
maxSurge: 교체과정에서 pod가 설정한 replicas 보다 초과생성되는 최대 pod의 갯수 (기본값: 전체 pod의 25%)
minReadySeconds: 롤링 업데이트 시에 pod가 준비되기까지 대시하는 시간 지정(기본값 0초)
Recreate: 재생성 (롤백 시, 다운타임이 길어짐)
기존의 pod가 모두 삭제되고 새로운 pod가 생성됨
모든 pod가 삭제되므로 다운타임이 발생할 수 밖에 없음
Deployment 롤링 업데이트
롤링 업데이트 명령어 사용방법
kubectl set image deployment DEPLOYMENT CONTAINER=IMAGE
kubectl set image deploymnet -f DEPLOYMENT_FILE CONTAINER=IMAGE
kubectl set image deployment myapp-deploy myapp=devops2341/go-myweb:v2
롤링 업데이트 (v1 -> v2)
kubectl set image deployment myapp-deploy myapp=devops2341/go-myweb:v2
(deployment 이름 지정/container의 이름 지정=이미지 이름 지정 )
롤링 업데이트 (v2 -> v3)
kubectl set image deployment myapp-deploy myapp=devops2341/go-myweb:v3 --record
롤아웃 히스토리 확인
kubectl rollout history deployment DEPLOYMENT
* kubectl에서 --record 옵션 사용시 롤아웃 히스토리 CHANGE CAUSE에 사용 명령어를 기록할 수 있음
### rolling update 실습 ####
vagrant@kube-control1:~/work/20210903$ cat myapp-deploy-v1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
labels:
app: myapp-deploy
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
minReadySeconds: 20
replicas: 3
apiVersion: apps/v1
selector:
matchLabels:
app: myapp-deploy
template:
metadata:
labels:
app: myapp-deploy
spec:
containers:
- name: myapp
image: devops2341/go-myweb:v1
ports:
- containerPort: 8080
protocol: TCP
vagrant@kube-control1:~/work/20210903$ cat myapp-svc-deploy.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp-svc-deploy
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: myapp-deploy
vagrant@kube-control1:~/work/20210903$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d
myapp-svc-deploy LoadBalancer 10.108.41.33 192.168.200.11 80:30000/TCP 58m
vagrant@kube-control1:~/work/20210903$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-deploy-bd79d5d5c-5lvvb 1/1 Running 0 5m16s 192.168.9.87 kube-node1 <none> <none>
myapp-deploy-bd79d5d5c-bc2n5 1/1 Running 0 5m16s 192.168.119.139 kube-node3 <none> <none>
myapp-deploy-bd79d5d5c-xdz9c 1/1 Running 0 5m16s 192.168.233.232 kube-node2 <none> <none>
vagrant@kube-control1:~/work/20210903$ curl http://192.168.200.11
===Version 1.0===
Hello World!
myapp-deploy-bd79d5d5c-5lvvb
vagrant@kube-control1:~/work/20210903$ kubectl describe pods myapp-deploy-bd79d5d5c-5lvvb
Image: devops2341/go-myweb:v1
vagrant@kube-control1:~/work/20210903$ kubectl set image deployment myapp-deploy myapp=devops2341/go-myweb:v2
deployment.apps/myapp-deploy image updated
vagrant@kube-control1:~/work/20210903$ kubectl describe pods myapp-deploy-65bdb76f48-25lzv
Image: devops2341/go-myweb:v2
vagrant@kube-control1:~/work/20210903$ kubectl set image deployment myapp-deploy myapp=devops2341/go-myweb:v3 --record
deployment.apps/myapp-deploy image updated
vagrant@kube-control1:~/work/20210903$ kubectl describe pods myapp-deploy-678f76c6d7-2bzff
Image: devops2341/go-myweb:v3
vagrant@kube-control1:~/work/20210903$ kubectl rollout history deployment myapp-deploy
deployment.apps/myapp-deploy
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 kubectl set image deployment myapp-deploy myapp=devops2341/go-myweb:v3 --record=true
### kubectl set image 명령어 입력시 --record 옵션을 통해 history에 기록을 남길 수 있다.
vagrant@kube-control1:~/work/20210903$ kubectl rollout undo deployment myapp-deploy --to-revision=2
deployment.apps/myapp-deploy rolled back
#### kubectl rollout undo --to-revison N 으로 이전 상태로 롤백 가능하다.
vagrant@kube-control1:~/work/20210903$ kubectl describe pods myapp-deploy-65bdb76f48-6vpqp
Image: devops2341/go-myweb:v2
'kubernetes' 카테고리의 다른 글
20210906 (월) deployment strategies, statefulset (0) | 2021.09.06 |
---|---|
20210906 (월) kubeadm 설치 실습 (0) | 2021.09.06 |
20210903 (금) kubernetes application customizing (0) | 2021.09.03 |
20210902 (목) kubernetes Persistent Volume, 정적 동적 volume provisioning (0) | 2021.09.02 |
20210901 (수) kubernetes ingress, volume (0) | 2021.09.01 |