在CSDN学Golang云原生(持续交付Argo)

一,Argo安装配置

Argo是一个基于Kubernetes的容器本地工作流引擎,可以帮助用户在Kubernetes上创建、运行和维护容器化应用程序。下面是Argo安装配置的步骤:

  1. 首先确保你已经安装了kubectl和helm
  2. 添加chart仓库
$ helm repo add argo https://argoproj.github.io/argo-helm
  1. 创建namespace
$ kubectl create namespace argocd
  1. 安装 Argo CD
$ helm install argocd argo/argo-cd --version 3.8.5 -n argocd \
    --set server.extraArgs={--insecure} \
    --set rbac.create=true \
    --set server.service.type=LoadBalancer

其中,server.extraArgs={--insecure} 表示允许不受信任的证书。

rbac.create=true 表示启用RBAC。

server.service.type=LoadBalancer 表示使用 LoadBalancer 类型的 Service。

  1. 查看 Argo CD 的服务地址
$ kubectl get svc -n argocd | grep argocd-server
argocd-server             LoadBalancer   xxx.xxx.xxx.xxx        80:xxxxx/TCP,443:xxxxx/TCP   5m47s
  1. 访问 Argo CD UI

在浏览器中输入 http://:80 访问 Argo CD 的 UI 界面,用户名为 admin,密码为 kubectl get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d,其中  为上面 kubectl get svc 命令输出的 LoadBalancer IP。

  1. 使用 Argo CD

现在你已经可以使用 Argo CD 来创建、运行和维护容器化应用程序了。

二,Argo CD持续交付

Argo CD 是一个基于 Kubernetes 的 GitOps 持续交付工具,可以将应用程序的所有部署和管理任务都自动化,从而提高生产力和可靠性。下面是使用 Argo CD 进行持续交付的步骤:

  1. 准备工作

首先,你需要安装并配置好以下工具:

  • Kubernetes 集群
  • kubectl 工具
  • Helm 包管理器
  • Argo CD 工具
  1. 创建应用程序

在 Argo CD 的 UI 界面中创建一个新的应用程序,并指定该应用程序所在的 Git 仓库和分支。例如,你可以使用以下 YAML 文件创建名为 myapp 的应用程序:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
spec:
  destination:
    namespace: default
    server: https://kubernetes.default.svc.cluster.local
  project: default
  source:
    path: .
    repoURL: https://github.com/username/myapp.git
    targetRevision: HEAD
  syncPolicy:
    automated:
      prune: true
      selfHealTimeout: 3600s

其中,destination.namespace 表示目标命名空间;destination.server 表示目标 Kubernetes API Server 地址;project 表示项目名称;source.path 表示源代码路径;source.repoURL 表示 Git 仓库地址;source.targetRevision 表示要同步的 Git 分支或提交。

  1. 定义部署模板

在 Git 仓库中定义 Kubernetes 部署模板,例如使用 Helm Chart。

  1. 启用自动同步

在应用程序的 syncPolicy 中启用自动同步,这样 Argo CD 就会自动检测 Git 仓库中的变更,并将其同步到 Kubernetes 集群中。例如:

syncPolicy:
  automated:
    prune: true
    selfHealTimeout: 3600s

其中,prune 表示删除未在 Git 仓库中定义的资源;selfHealTimeout 表示重新同步之前等待的时间。

  1. 定义环境

在 Argo CD 的 UI 界面中创建一个新的环境(如开发环境、测试环境、生产环境等),并指定该环境所在的 Kubernetes 集群和命名空间。例如:

apiVersion: argoproj.io/v1alpha1
kind: Environment
metadata:
  name: dev
spec:
  clusterName: mycluster
  namespace: development
  1. 定义发布策略

在 Argo CD 的 UI 界面中定义发布策略,例如:当代码提交到 master 分支时,自动触发部署到生产环境。

  1. 自动化测试

使用测试框架对应用程序进行自动化测试,并将测试结果作为注释添加到 Git 提交信息中。例如:

$ go test ./... -v | tee >(kubectl annotate deployment/myapp --overwrite=test-results=/dev/stdin)

其中,kubectl annotate deployment/myapp --overwrite=test-results=/dev/stdin 表示将测试结果作为注释添加到名为 myapp 的 Deployment 中。

  1. 执行持续交付

当代码提交到 Git 仓库时,Argo CD 就会自动检测变更,并执行持续交付流程。如果所有的自动化测试都通过了,应用程序就会被部署到指定的 Kubernetes 集群和命名空间中

三,Argo Canary和BlueGreen部署

Argo CD 支持 Canary 和 Blue-Green 部署模式,以下是使用 Argo CD 进行 Canary 和 Blue-Green 部署的步骤:

Canary 部署

Canary 部署模式可以让你逐渐将新版本应用程序引入到生产环境中,并在确保稳定性的情况下逐步增加流量。

  1. 准备工作

首先,你需要安装并配置好以下工具:

  • Kubernetes 集群
  • kubectl 工具
  • Helm 包管理器
  • Argo CD 工具
  1. 创建应用程序

在 Argo CD 的 UI 界面中创建一个新的应用程序,并指定该应用程序所在的 Git 仓库和分支。例如,你可以使用以下 YAML 文件创建名为 myapp 的应用程序:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
spec:
  destination:
    namespace: default
    server: https://kubernetes.default.svc.cluster.local
  project: default
  source:
    path: .
    repoURL: https://github.com/username/myapp.git
    targetRevision: HEAD
  syncPolicy:
    automated:
      prune: true
      selfHealTimeout: 3600s

其中,destination.namespace 表示目标命名空间;destination.server 表示目标 Kubernetes API Server 地址;project 表示项目名称;source.path 表示源代码路径;source.repoURL 表示 Git 仓库地址;source.targetRevision 表示要同步的 Git 分支或提交。

  1. 定义部署模板

在 Git 仓库中定义 Kubernetes 部署模板,例如使用 Helm Chart。

  1. 启用自动同步

在应用程序的 syncPolicy 中启用自动同步,这样 Argo CD 就会自动检测 Git 仓库中的变更,并将其同步到 Kubernetes 集群中。例如:

syncPolicy:
  automated:
    prune: true
    selfHealTimeout: 3600s

其中,prune 表示删除未在 Git 仓库中定义的资源;selfHealTimeout 表示重新同步之前等待的时间。

  1. 定义环境

在 Argo CD 的 UI 界面中创建一个新的环境(如开发环境、测试环境、生产环境等),并指定该环境所在的 Kubernetes 集群和命名空间。例如:

apiVersion: argoproj.io/v1alpha1
kind: Environment
metadata:
  name: dev
spec:
  clusterName: mycluster
  namespace: development
  1. 定义发布策略

定义 Canary 发布策略,例如:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: myapp-canary-rollout
spec:
  strategy: Canary

其中,strategy 表示采用 Canary 策略。

  1. 定义 Canary 规则

在 Kubernetes 中定义 Canary 规则,例如:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp-canary-vs
spec:
  hosts:
    - myapp.example.com
  http:
    - route:
        - destination:
            host: myapp
            subset: v1 
          weight: 90 
        - destination:
            host: myapp
            subset: v2 
          weight: 10

其中,subset 表示版本号;weight 表示流量占比。

  1. 执行持续交付

当代码提交到 Git 仓库时,Argo CD 就会自动检测变更,并执行持续交付流程。新版本的应用程序会先部署到 Canary 环境中,并将一小部分流量引入到生产环境中。如果没有发现问题,就可以逐步增加流量。

Blue-Green 部署

Blue-Green 部署模式可以让你在完全安装新版本应用程序之前,在一个与生产环境相同的环境中进行测试和验证。

  1. 准备工作

首先,你需要安装并配置好以下工具:

  • Kubernetes 集群
  • kubectl 工具
  • Helm 包管理器
  • Argo CD 工具
  1. 创建应用程序

在 Argo CD 的 UI 界面中创建一个新的应用程序,并指定该应用程序所在的 Git 仓库和分支。例如,你可以使用以下 YAML 文件创建名为 myapp 的应用程序:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
spec:
  destination:
    namespace: default
    server: https://kubernetes.default.svc.cluster.local
  project: default
  source:
    path: .
    repoURL: https://github.com/username/myapp.git
    targetRevision: HEAD
  syncPolicy:
    automated:
      prune: true
      selfHealTimeout: 3600s

其中,destination.namespace 表示目标命名空间;destination.server 表示目标 Kubernetes API Server 地址;project 表示项目名称;source.path 表示源代码路径;source.repoURL 表示 Git 仓库地址;source.targetRevision 表示要同步的 Git 分支或提交。

  1. 定义部署模板

在 Git 仓库中定义 Kubernetes 部署模板,例如使用 Helm Chart。

  1. 启用自动同步

在应用程序的 syncPolicy 中启用自动同步,这样 Argo CD 就会自动检测 Git 仓库中的变更,并将其同步到 Kubernetes 集群中。例如:

syncPolicy:
  automated:
    prune: true
    selfHealTimeout: 3600s

其中,prune 表示删除未在 Git 仓库中定义的资源;selfHealTimeout 表示重新同步之前等待的时间。

  1. 定义环境

在 Argo CD 的 UI 界面中创建一个新的环境(如开发环境、测试环境、生产环境等),并指定该环境所在的 Kubernetes 集群和命名空间。例如:

apiVersion: argoproj.io/v1alpha1
kind: Environment
metadata:
  name: dev
spec:
  clusterName: mycluster
  namespace: development
  1. 定义发布策略

定义 Blue-Green 发布策略,例如:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: myapp-bluegreen-rollout
spec:
  strategy: BlueGreen

其中,strategy 表示采用 Blue-Green 策略。

  1. 定义新版本规则

在 Kubernetes 中定义新版本规则,例如:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: myapp-new-ingress 
spec:
  rules:
    - host: myapp.example.com 
      http:
        paths:
          - pathType: Prefix 
            path: / 
            backend:
              servicePort: 80 
              serviceName: myapp-new

其中,serviceName 表示使用新版本服务;servicePort 表示服务端口号。

  1. 执行持续交付

当代码提交到 Git 仓库时,Argo CD 就会自动检测变更,并执行持续交付流程。新版本的应用程序会先部署到与生产环境相同的环境中,并进行测试和验证。如果一切正常,就可以切换流量到新版本应用程序上。

 

你可能感兴趣的:(golang,云原生,开发语言)