Kubernetes argo
Argo CD 部署及应用2021年06月18日前言缘起:针对自动构建工具一直都是运维同学不能避免的话题,而我也不可避免,在没有接触该软件之前一直在使用 Jenkins配合 Gitlab、Docker进行 CICD 的一系列整合。并且已经实现了日常工作自动化。但是在浏览云原生计算基金会(Cloud Native Computing Foundation)1,发现 Kubernetes周边生态很活跃
Argo CD 部署及应用
2021年06月18日
前言
缘起:针对自动构建工具一直都是运维同学不能避免的话题,而我也不可避免,在没有接触该软件之前一直在使用 Jenkins
配合 Gitlab
、Docker
进行 CICD
的一系列整合。并且已经实现了日常工作自动化。但是在浏览云原生计算基金会
(Cloud Native Computing Foundation)1,发现 各种周边生态很活跃进而查看我关注的 CICD
类别,发现 argo
非常符合我目前的需求,从而决定研究下。
入迷: 在研究的过程中随着不断的深入发现设计者想的真的很全面,内部不但包括(k8s 的多集群管理、k8s 内生态管理、GitOPS 的结合等等)这使我深深的着迷,不单单是设计的思想还有确实能解决我目前在公司推动 DEVOPS理念。
实现:因本地存在自建 Kubernetes 集群所以直接在集群上构建此应用,具体步骤在下文。
评价:
- K8S结合GITOPS 实现日常服务持续交付;
- 将开发引入 K8S 自动 CICD 的场景中,推动 DEVOPS 进度;
- 实现应用程序定义、配置和环境版本控制。应用程序部署和生命周期管理的自动化、可审计;
部署 Argo
本文使用 Helm 方式进行Argo 的部署,其中的细节都会在下文列出
-
获取 Argo Helm 源2
$ helm repo add argo https://argoproj.github.io/argo-helm
-
缓存并解压所需仓库到本地(方便自定义配置)
$ helm fetch argo/argo-cd $ tar xzf argo-cd-3.6.8.tgz
-
更改镜像地址
# 更改主配置文件 values.yaml global.image.repository: # 更改为自己的镜像,或者使用官方镜像
-
更改 argocd-server command 参数(因为需要将部署好的 argocd 服务通过 ingerss 发布到私网)
# 在文件argo-cd/templates/argocd-server/deployment.yaml的 49 行左右添加如下字段 command: - argocd-server - --staticassets - /shared/app - --repo-server - {{ template "argo-cd.repoServer.fullname" . }}:{{ .Values.repoServer.service.port }} - --insecure # 添加该字段,不能更换位置添加,不然 ingress 不能使用 {{- if .Values.dex.enabled }} - --dex-server - http://{{ template "argo-cd.dex.fullname" . }}:{{ .Values.dex.servicePortHttp }} {{- end }} - --logformat - {{ .Values.server.logFormat }} - --loglevel - {{ .Values.server.logLevel }} {{- if or (and .Values.redis.enabled (not $redisHa.enabled)) (and $redisHa.enabled $redisHa.haproxy.enabled) }} - --redis - {{ template "argo-cd.redis.fullname" . }}:{{ .Values.redis.servicePort }} {{- end }} {{- with .Values.server.extraArgs }} {{- . | toYaml | nindent 8 }} {{- end }}
-
配置 ingress
因该服务存在 2 个对外服务所以本文使用多域名进行拆分,如需其他方法请参考3
# ingress_ui.yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: argocd-server-http-ingress namespace: argocd annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTP" spec: rules: - http: paths: - backend: serviceName: argocd-server servicePort: http host: argocd.magic.com tls: - hosts: - argocd.magic.com secretName: argocd-secret # 不要更改此项 # ingress_grps.yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: argocd-server-grpc-ingress namespace: argocd annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/backend-protocol: "GRPC" spec: rules: - http: paths: - backend: serviceName: argocd-server servicePort: https host: grpc.argocd.magic.com tls: - hosts: - grpc.argocd.magic.com secretName: argocd-secret # do not change, this is provided by Argo CD
-
部署 Argo CD
$ cd argo-cd $ helm install --namespace argocd argocd . # 此处命名空间如果不存在需要预先创建,并且不建议更换其他名称。 $ helm list -n argocd NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION argocd argocd 4 2021-06-18 16:04:36.028762 +0800 CST deployed argo-cd-3.6.8 2.0.3 $ kubectl apply -f ingress_grps.yaml && kubectl apply -f ingress_ui.yaml
# 查看各个部署信息 $ kubectl get pod,svc,ingress -n argocd NAME READY STATUS RESTARTS AGE pod/argocd-application-controller-64dc54fb54-m24zw 1/1 Running 0 4h20m pod/argocd-dex-server-846cd5d6f4-649t6 1/1 Running 0 4h20m pod/argocd-redis-7dfb666bc9-f7248 1/1 Running 0 4h20m pod/argocd-repo-server-c5b8b6bcb-7vws4 1/1 Running 0 4h20m pod/argocd-server-5465554-b82vh 1/1 Running 0 4h20m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/argocd-application-controller ClusterIP 10.150.100.219 <none> 8082/TCP 4h20m service/argocd-dex-server ClusterIP 10.150.168.106 <none> 5556/TCP,5557/TCP 4h20m service/argocd-redis ClusterIP 10.150.158.168 <none> 6379/TCP 4h20m service/argocd-repo-server ClusterIP 10.150.70.81 <none> 8081/TCP 4h20m service/argocd-server ClusterIP 10.150.25.143 <none> 80/TCP,443/TCP 4h20m NAME HOSTS ADDRESS PORTS AGE ingress.extensions/argocd-server-grpc-ingress grpc.argocd.magic.com 80, 443 26h ingress.extensions/argocd-server-http-ingress argocd.magic.com 80, 443 26h
-
查看并登陆页面
- 登陆用户名: admin
- 登陆密码:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
使用 Argo
此处注意: 因为本列中 Argo 安装在 Kubernetes 中,所以在 Argo 中所配置的 gitlab或者其他仓库地址需要保证 Kubernetes 集群内的 pod 可以访问,不让会出现同步失败
-
添加Git仓库
-
git 仓库结构
. ├── README.md └── argocd ├── app.yaml ├── configmaps │ └── configmap.yaml ├── deployments │ └── deployment.yaml ├── ingress │ └── ingress.yaml ├── secrets │ └── secret.yaml └── services └── service.yaml
-
应用 app.yaml
$ kubectl apply -n argocd -f app.yaml
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: argocd-yulong namespace: argocd spec: project: default source: repoURL: http://gitlab.magic.com/root/arogocd.git targetRevision: HEAD path: argocd directory: recurse: true destination: server: https://kubernetes.default.svc namespace: argocd-yulong syncPolicy: automated: prune: false selfHeal: false
-
页面查看
-
测试git 提交自动同步更新(默认 3 分钟自动同步更新)
提交代码忽略,本次测试缩减 replicas: 1 到replicas: 3
-
细节问题
在测试过程中添加了 ingress 后 argo cd 的检测心跳一直是Progressing 导致页面显示异常,经过大量的资料查询4、Issues5、Argo Halth6,做出如下解决
# 在部署 argo value.yaml 中搜索 argocd-cm 添加如下配置 # 相当于自定义 ingress 检测,使用 lua 当为空时显示正常 application.instanceLabelKey: argocd.argoproj.io/instance resource.customizations: | extensions/Ingress: health.lua: | hs = {} hs.status = "Healthy" return hs
完成
经过以上部署和使用,可以实现 argo 的部署和使用,本次的文档就写到这里,后续继续更新 webhooks 等一系列关联使用
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)