Canaries : flagger로 배포 관리를 위한 리소스 (canary, A/B test, Blue/Green)AlertProvider : 알림 관리를 위한 리소스 (Slack/Teams, 게시할 채널 등 정의)MetricTemplate : canary analysis에서 사용할 메트릭 정의flagger 관련이 모두 설치된 상황에서
selector.matchLabels 중 단 하나를 사용함. ####### 예시
selector:
matchLabels:
app: podinfo
code: POD001app, name, app.kubernetes.io/name 이렇게 3개라 app 라벨을 사용code 라벨을 사용하고 싶다면 helm 차트의 selectorLabels 에 작성 필요.❯ k get vs
NAME GATEWAYS HOSTS AGE
local-dev-podinfo ["local-dev"] ["local.dev"] 2m17s
podinfo-service ["local-dev"] ["local.dev","podinfo-service"] 81s # new-canary 네이밍이 붙은 service로 연결-primary로만 연결됨.-primary가 갱신되기 전까지 확인 불가능.❯ k get vs
NAME GATEWAYS HOSTS AGE
local-dev-podinfo ["local-dev"] ["local.dev"] 19m
podinfo-service ["mesh"] ["podinfo-service"] 3m45svirtualService 내용route 항목을 보면 primary와 canary마다 가중치를 주고 있음.apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
annotations:
kustomize.toolkit.fluxcd.io/reconcile: disabled
creationTimestamp: "2022-05-22T08:44:20Z"
generation: 7
name: podinfo-service
namespace: default
ownerReferences:
- apiVersion: flagger.app/v1beta1
blockOwnerDeletion: true
controller: true
kind: Canary
name: podinfo
uid: 2258d59c-2aa0-4039-a9b9-3888a5fcb255
resourceVersion: "333156"
uid: 66cd6b7f-4d7b-4cd4-8d90-43d3d7413ef5
spec:
gateways:
- local-dev
hosts:
- local.dev
- podinfo-service
http:
- match:
- uri:
prefix: /podinfo
retries:
attempts: 3
perTryTimeout: 1s
retryOn: gateway-error,connect-failure,refused-stream
rewrite:
uri: /
route:
- destination:
host: podinfo-service-primary
weight: 100
- destination:
host: podinfo-service-canary
weight: 0apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: podinfo
spec:
# deployment reference
targetRef:
apiVersion: apps/v1
kind: Deployment
name: podinfo
# the maximum time in seconds for the canary deployment
# to make progress before it is rollback (default 600s)
progressDeadlineSeconds: 60
service:
# service reference
name: podinfo-service
port: 9898
targetPort: 9898
# Istio gateways (optional)
gateways:
- local-dev
# Istio virtual service host names (optional)
hosts:
- local.dev
match:
- uri:
prefix: /podinfo
rewrite:
uri: /
# Istio traffic policy (optional)
trafficPolicy:
tls:
mode: DISABLE
# Istio retry policy (optional)
retries:
attempts: 3
perTryTimeout: 1s
retryOn: "gateway-error,connect-failure,refused-stream"
analysis:
# schedule interval (default 60s)
interval: 10s
# max number of failed metric checks before rollback
threshold: 5
# max traffic percentage routed to canary
# percentage (0-100)
maxWeight: 50
# canary increment step
# percentage (0-100)
stepWeight: 10
alerts:
- name: "info alert"
severity: info # error, warn, info
providerRef:
name: info-alert
namespace: flagger-system
- name: "warn alert"
severity: warn # error, warn, info
providerRef:
name: error-alert
namespace: flagger-system
metrics:
# - name: request-success-rate
- name: istio_requests_total
thresholdRange:
min: 50
interval: 15s
# # custom metric
# - name: "404s percentage"
# templateRef:
# name: not-found-percentage
# namespace: istio-system
# thresholdRange:
# max: 5
# interval: 1m