반응형
1. 개념
- Blue·Green 및 Canary 배포 전략에 대한 개념은 앞서 작성한 글 참고
- Blue·Green 배포 : Blue 리소스를 구성하고 Selector로 서비스와 맵핑한 상태에서 Green 리소스를 구성하고 서비스의 Selector를 Green으로 변경
- Canary 배포 : v1과 v2 리소스를 구성하고 두 리소스를 Selector로 서비스와 맵핑한 상태에서 v2의 레플리카 개수를 점진적으로 증가시킴과 동시에 v1의 개수를 감소시키다 마지막에는 v1 리소스 삭제
2. Blue·Green 배포
- Blue에 해당하는 nginx 웹서버 리소스 구성
apiVersion: apps/v1
kind: Deployment
metadata:
name: resource-blue
namespace: default
spec:
replicas: 5
selector:
matchLabels:
app: resource-blue
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: resource-blue
spec:
containers:
- image: nginx
name: nginx
restartPolicy: Always
- 서비스 생성 및 selector를 통해 Blue 리소스와 맵핑
apiVersion: v1
kind: Service
metadata:
name: blue-green
spec:
ports:
- name: "80"
port: 80
protocol: TCP
targetPort: 80
selector:
app: resource-blue
type: NodePort
- Blue 리소스 서비스 접근 테스트
- Green에 해당하는 아파치 웹서버 리소스 구성
apiVersion: apps/v1
kind: Deployment
metadata:
name: resource-green
namespace: default
spec:
replicas: 5
selector:
matchLabels:
app: resource-green
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: resource-green
spec:
containers:
- image: httpd
name: httpd
restartPolicy: Always
- 서비스의 selector를 Green 리소스와 맵핑
- Green 리소스 서비스 접근 테스트
3. Canary 배포
- v1 리소스 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: canary-v1
namespace: default
spec:
replicas: 5
selector:
matchLabels:
app: canary
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: canary
spec:
containers:
- image: nginx
name: nginx
restartPolicy: Always
- v2 리소스 생성
apiVersion: apps/v1
kind: Deployment
metadata:
name: canary-v2
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: canary
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: canary
spec:
containers:
- image: httpd
name: httpd
restartPolicy: Always
- 서비스 생성 및 selector를 통해 v1과 v2 리소스를 서비스에 맵핑
apiVersion: v1
kind: Service
metadata:
name: svc-canary
spec:
ports:
- name: "80"
port: 80
protocol: TCP
targetPort: 80
selector:
app: canary
type: NodePort
- 서비스 접근 테스트(현재 5:1 비율)
- v2 레플리카 증가 및 v1 레플리카 감소 및 서비스 접근 테스트(현재 1:5 비율)
- v1 리소스 삭제
반응형
'Kubernetes' 카테고리의 다른 글
Kubernetes 네트워크 정책(NetworkPolicy) 개념 및 설정2 (0) | 2024.02.29 |
---|---|
Kubernetes 보안 기초 (0) | 2024.02.28 |
Kubernetes Custom Resource 개념 및 설정 (0) | 2023.03.16 |
Kubernetes Admission Controller(Mutating / Validating) 개념 및 설정 (0) | 2023.03.16 |
Kubernetes Statefulset 개념 및 설정 (0) | 2023.03.16 |