Argo CD 教程(gitee+ ArgoCD + Argo-rollouts +k8s 实现devops灰度发布)
Argo CD 教程(gitee+ ArgoCD + Argo-rollouts +k8s 实现devops灰度发布)
1、简介
Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署(CD)工具,支持多种配置管理/模板工具(例如 Kustomize、Helm、Ksonnet、Jsonnet、plain-YAML)。
Argo CD 被实现为一个 Kubernetes 控制器,它持续监控正在运行的应用程序并将当前的实时状态与所需的目标状态(例如 Git 仓库中的配置文件)进行比较,在 Git 仓库更改时自动同步和部署应用程序。
2、部署
环境准备:
1、一套k8s集群(部署教程可以看k8s专栏,亲测无坑)
2、git仓库(此处为了方便演示cd过程,所以使用gitee作为演示)
部署:
# 创建命名空间
kubectl create namespace argocd
# 下载yaml文件
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
#修改argo-server的service的tpye为NodePort
vim install.yaml
...
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/name: argocd-server
app.kubernetes.io/part-of: argocd
name: argocd-server
spec:
type: NodePort #对外暴露端口
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
- name: https
port: 443
protocol: TCP
targetPort: 8080
selector:
app.kubernetes.io/name: argocd-server
...
#部署(需要等待几分钟,拉取镜像的过程比较慢)
kubectl apply -n argocd -f install.yaml
#查看服务情况
kubectl get svc,deploy -n argocd
浏览器访问 ip:port
默认账号admin
密码获取方式:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=“{.data.password}” | base64 -d
3、持续部署至k8s
1、环境准备
在gitee上创建一个仓库argocd ,创建一个名为test的文件夹下面放yaml配置文件。配置文件如下:
# myapp-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- image: registry.cn-shanghai.aliyuncs.com/public-namespace/myapp:v1
name: myapp
ports:
- containerPort: 80
# myapp-service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp
spec:
ports:
- port: 80
targetPort: 80
nodePort: 32060
type: NodePort
selector:
app: myapp
实验所需的镜像已经在阿里云的镜像仓库中准备好了,大家可以直接使用
2、argo配置
1、配置仓库认证
配置过程省略
2、创建项目
#创建k8s名称空间,本次项目部署在该处
kubectl create namespace devops
创建成功会看到这个
访问 ip+port
3、更新与回滚
更新
修改gitee上deploy的版本为v2
观察argo,自动更新
访问 ip+port
2、回退
访问 ip+port
4、argo rollout 灰度发布(金丝雀)
Argo Rollouts 是一个 Kubernetes Operator 实现,它为 Kubernetes 提供更加高级的部署能力,如蓝绿、金丝雀、金丝雀分析、实验和渐进式交付功能,为云原生应用和服务实现自动化、基于 GitOps 的逐步交付。
支持特性如下:
- 蓝绿色更新策略
- 金丝雀更新策略
- 细粒度,加权流量转移
- 自动回rollback和promotion
- 手动判断
- 可定制的指标查询和业务KPI分析
- 入口控制器集成:NGINX,ALB
- 服务网格集成:Istio,Linkerd,SMI
- Metric provider集成:Prometheus,Wavefront,Kayenta,Web,Kubernetes Jobs
- Argo原理和Deployment差不多,只是加强rollout的策略和流量控制。当spec.template发送变化时,Argo-Rollout就会根据spec.strategy进行rollout,通常会产生一个新的ReplicaSet,逐步scale down之前的ReplicaSet的pod数量。
1、部署
~ kubectl create namespace argo-rollouts
~ kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/download/v1.0.2/install.yaml
~ kubectl get all -n argo-rollouts
~ curl -LO https://github.com/argoproj/argo-rollouts/releases/download/v1.0.2/kubectl-argo-rollouts-darwin-amd64
~ chmod +x ./kubectl-argo-rollouts-darwin-amd64
~ sudo mv ./kubectl-argo-rollouts-darwin-amd64 /usr/local/bin/kubectl-argo-rollouts
2、发布
在gitee仓库中准备配置文件
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: myapp2
spec:
replicas: 5 # 定义5个副本
strategy: # 定义升级策略
canary: # 金丝雀发布
steps: # 发布的节奏
- setWeight: 20
- pause: {} # 会一直暂停
- setWeight: 40
- pause: {duration: 10}
- setWeight: 60
- pause: {duration: 10}
- setWeight: 80
- pause: {duration: 10}
revisionHistoryLimit: 2 # 下面部分其实是和 Deployment 兼容的
selector:
matchLabels:
app: myapp2
template:
metadata:
labels:
app: myapp2
spec:
containers:
- name: rollouts-demo
image: registry.cn-shanghai.aliyuncs.com/public-namespace/myapp:v1
ports:
- name: http
containerPort: 80
protocol: TCP
resources:
requests:
memory: 32Mi
cpu: 5m
---
# basic-service.yaml
apiVersion: v1
kind: Service
metadata:
name: myapp2
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 32070
selector:
app: myapp2
#发布
kubectl apply -f rollout-demo.yaml
#查看发布情况
➜ ~ kubectl argo rollouts get rollout myapp2 --watch
#更新
➜ ~ kubectl argo rollouts set image myapp2 \
rollouts-demo=registry.cn-shanghai.aliyuncs.com/public-namespace/myapp:v2
#暂停时,切换下一步
# 经过上面的更新后,Rollout 现在处于暂停状态,当一个 Rollout 到达一个没有持续时间的暂停步骤时,它将一直保持在暂停状态,直到它被恢复/提升。要手动将 Rollout 切换到下一个步骤,请运行插件的 promotion 命令
➜ ~ kubectl argo rollouts promote rollouts-demo
➜ ~ kubectl argo rollouts get rollout myapp2 --watch
#中断更新
#恢复到stable版本
➜ ~ kubectl argo rollouts abort myapp2
#回退
➜ ~ kubectl-argo-rollouts undo myapp2 --to-revision=1
3、可视化界面
kubectl argo rollouts dashboard
更多推荐
所有评论(0)