1.安装argo-rollout

kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/download/v1.5.0/install.yaml

安装Argo Rollouts Kubectl 插件

curl -LO https://github.com/argoproj/argo-rollouts/releases/download/v1.5.0/kubectl-argo-rollouts-linux-amd64

chmod +x ./kubectl-argo-rollouts-linux-amd64

mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts

kubectl argo rollouts    version

官网:https://argoproj.github.io/argo-rollouts/
 
2.蓝绿部署
说明: 部署一套新的, 确认OK, 再切换
部署application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: argo-rollouts
  namespace: argocd
spec:
  destination:
    namespace: argo-rollouts
    server: https://11.0.1.134:6443
  project: default
  source:
    path: argo/argo-rollout/tests
    repoURL: https://gitee.com/arionyu/k8syaml.git
    targetRevision: HEAD
  syncPolicy:
    automated: {}
    syncOptions:
    - CreateNamespace=true

 上传git部署yaml文件

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollout-bluegreen
spec:
  replicas: 2
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: rollout-bluegreen
  template:
    metadata:
      labels:
        app: rollout-bluegreen
    spec:
      containers:
      - name: rollouts-demo
        image: registry.cn-hangzhou.aliyuncs.com/yushihao/nginx:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: aliharbor
  strategy:
    blueGreen: 
      # activeService specifies the service to update with the new template hash at time of promotion.
      # This field is mandatory for the blueGreen update strategy.
      activeService: rollout-bluegreen-active
      # previewService specifies the service to update with the new template hash before promotion.
      # This allows the preview stack to be reachable without serving production traffic.
      # This field is optional.
      previewService: rollout-bluegreen-preview
      # autoPromotionEnabled disables automated promotion of the new stack by pausing the rollout
      # immediately before the promotion. If omitted, the default behavior is to promote the new
      # stack as soon as the ReplicaSet are completely ready/available.
      # Rollouts can be resumed using: `kubectl argo rollouts promote ROLLOUT`
      autoPromotionEnabled: false

---

apiVersion: v1
kind: Service
metadata:
  name: rollout-bluegreen-active
  namespace: argo-rollouts
spec:
  ports:
  - nodePort: 30131
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: rollout-bluegreen
  sessionAffinity: None
  type: NodePort

---


apiVersion: v1
kind: Service
metadata:
  name: rollout-bluegreen-preview
  namespace: argo-rollouts
spec:
  ports:
  - nodePort: 30132
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: rollout-bluegreen
  sessionAffinity: None
  type: NodePort
View Code

执行sync

[root@k8s argo-rollout]# kubectl argo rollouts list rollouts -A
NAMESPACE      NAME               STRATEGY   STATUS        STEP  SET-WEIGHT  READY  DESIRED  UP-TO-DATE  AVAILABLE
argo-rollouts  rollout-bluegreen  BlueGreen  Paused        -     -           2/4    2        2           2  

[root@k8s argo-rollout]# kubectl argo rollouts status  rollout-bluegreen   -n argo-rollouts
Healthy

更新镜像:kubectl argo rollouts set image -n argo-rollouts  rollout-bluegreen   rollouts-demo=nginx:1.21.1

发现有两套nginx运行; 可以访问svc  ,rollout-bluegreen-preview先去验证OK, 确认好, 再继续下面步骤

 切换:kubectl argo rollouts promote   -n argo-rollouts  rollout-bluegreen

 注意: 执行rollout后, 如果又执行sync, 会产生一个新的preview版本pod。