argoCD 应用

官方参考链接:https://artifacthub.io/packages/helm/argo/argo-cd

https://argo-cd.readthedocs.io/en/stable/

k8s集群版本 v1.23.5

部署方式

根据官方的的部署步骤直接使用helm的方式部署到集群中即可。对应的集群版本可以参考下面的链接。

https://argo-cd.readthedocs.io/en/stable/operator-manual/installation/#helm

argo-cd 5.5.22 · argoproj/argo (artifacthub.io)

helm repo add argo https://argoproj.github.io/argo-helm
helm install my-argo-cd argo/argo-cd --version 5.5.22

登录集群

对argoCD的操作需要先登录。

[root@node1 ~]# argocd login 10.233.37.63
WARNING: server certificate had error: x509: cannot validate certificate for 10.233.37.63 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password: 
'admin:login' logged in successfully
Context '10.233.37.63' updated

集群管理

添加集群

目前添加的方式只有通过argocd命令行的方式进行添加。

kubernetes-admin@kubernetes 这个是从指定的配置文件中获取的集群context;必须与配置文件中的命名是一样的才可以添加进去。context查看方法可以使用kubectl config get-contexts查看。

指定集群需要添加--kubeconfig指定配置文件。

使用--name可以给添加的集群添加一个名字。

目前从使用来看,一个argoCD对接多集群的环境比如预发、测试、开发对接很容易,但是对于用户对集群的鉴权不是很友好。

[root@node1 ~]# argocd cluster add kubernetes-admin@kubernetes  --kubeconfig ~/.kube/dev-config --name dev-k8s-master
WARNING: This will create a service account `argocd-manager` on the cluster referenced by context `kubernetes-admin@kubernetes` with full cluster level privileges. Do you want to continue [y/N]? y
INFO[0019] ServiceAccount "argocd-manager" created in namespace "kube-system" 
INFO[0019] ClusterRole "argocd-manager-role" created    
INFO[0019] ClusterRoleBinding "argocd-manager-role-binding" created 
Cluster 'https://192.168.21.205:16443' added

第一次添加集群可能会无法显示集群的健康状态,创建一个应用之后就可以显示出来。

查看集群

对集群资源的操作需要使到admin用户

# 查看集群
[root@node1 ~]# argocd cluster list
SERVER                          NAME             VERSION  STATUS      MESSAGE  PROJECT
https://kubernetes.default.svc  pre-k8s-cluster  1.23     Successful           
https://192.168.21.205:16443    dev-k8s-cluster  1.23     Successful

删除集群

# 删除集群
[root@node1 ~]# argocd cluster rm dev-k8s-cluster

也可以使用图形界面的方式来删除。

备份与恢复

官方的方法简单粗暴,使用会直接报错;需要给出argoCD部署所在集群的config文件和所在的命名空间。导出的内容为所有资源信息的yaml 资源配置清单

# 备份    export
# 恢复    import

argocd admin export --kubeconfig .kube/config -n argo > argocd_$(date +%F).conf_bak

# 恢复
argocd admin import --kubeconfig .kube/config -n argo < argocd_$(date +%F).conf_bak

用户管理

查看用户

[root@node1 ~]# argocd account list
NAME      ENABLED  CAPABILITIES
admin     true     login
dev-user  true     login
pre-user  true     login
system    true     login

# login 允许从UI登录

添加用户

在argoCD的命名空间里面直接编辑cm。

[root@node1 ~]# kubectl get cm -n argo
NAME                        DATA   AGE
argocd-cm                   7      7d21h    # 对用户的创建和删除
argocd-gpg-keys-cm          0      7d21h
argocd-notifications-cm     1      7d21h
argocd-rbac-cm              2      7d21h    # 用户对资源的鉴权
argocd-ssh-known-hosts-cm   1      7d21h
argocd-tls-certs-cm         0      7d21h
kube-root-ca.crt            1      7d21h

argocd-cm包含对admin的管理和普通用户的创建。下面的内容一共创建了三个accounts。非admin用户即使在rbac中全部放行了全部resource的权限但是还是无法操作全部的资源。

[root@node1 ~]# kubectl -n argo edit cm argocd-cm 
apiVersion: v1
data:
  accounts.dev-user: login
  accounts.pre-user: login
  accounts.system: login
  admin.enabled: "false"
  application.instanceLabelKey: argocd.argoproj.io/instance
  exec.enabled: "false"     # 命令终端
  server.rbac.log.enforce.enable: "false"
  
admin.enabled: "false"      # 是否启用admin用户
accounts.pre-user: login    # 新建pre-user的用户,允许从UI登录

用户的鉴权

参考链接:https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/

目前现有环境中有三个用户admin用户在环境配置好了之后直接禁用掉,然后运维人员使用system用户来操作集群的资源,pre-user限制特定的资源来给用户使用。

[root@node1 ~]# argocd account list
NAME      ENABLED  CAPABILITIES
admin     true     login
pre-user  true     login
system    true     login
[root@node1 ~]# kubectl -n argo edit cm argocd-rbac-cm
apiVersion: v1
data:
  policy.csv: |
    p, system, *, *, */*, allow
    p, pre-user, *, *, argo-ng-kboss/*, allow
    p, pre-user, clusters, *, argo-ng-kboss/*, deny
    
p           # policy
dev-user    # 用户
*           # 集群
*           # 动作
*/*         # 项目/app
allow       # 允许 拒绝/deny

# 如果用户没有在组中或者是关联特定的role,默认使用这条策略,对资源只有只读的权限且无法修改资源。
policy.default: role:readonly

# 此策略展示了test role对test 环境的应用权限。
p, role:test-admins, applications, create, test-*/*, allow
p, role:test-admins, applications, delete, test-*/*, allow
p, role:test-admins, applications, get, test-*/*, allow
p, role:test-admins, applications, override, test-*/*, allow
p, role:test-admins, applications, sync, test-*/*, allow
p, role:test-admins, applications, update, test-*/*, allow
p, role:test-admins, logs, get, test-*/*, allow
p, role:test-admins, exec, create, test-*/*, allow
p, role:test-admins, projects, get, test-*, allow
g, test-admin, role:test-admins

# g test-admin用户 绑定test-admins的role。

里面的clusters字段指对argoCD中集群功能的管理,无法做到用户对单一集群的鉴权。* 表示支持正则匹配。

资源:clusters``projects``applications``repositories``certificates``accounts``gpgkeys``logs``exec

动作:get``create``update``delete``sync``override``action/<group/kind/action-name>

修改用户密码

默认输入admin用户的秘密码就可以更改其它用的权限配置。根据交互的提示信息输入即可。

# argocd account update-password --account dev-user

--account   # 指定用户,默认是修改当前登录用户

system
system.1

pre-user
pre-user

dev-user
dev-user

项目管理

新建项目

setting -> projects->NEW PROJECT

几个重要的信息,项目的基础信息,可以添加名称和描述,添加label用来过滤。

SOURCE REPOSITORIES 部署应用的源信息,设置之后创建的app属于这个项目,那么模板的源信息只能从这个url获得。

DESTINATIONS应用部署到的目的集群,如果应用属于这个项目那么同步的目的集群只能是项目中配置的集群。

app管理

创建app的时需要注意app与projects中配置的资源信息对应,不然会直接报错。

CLI创建app

argocd app create pre-front-jian-butler-admin-ui --project pre-jian-butler --repo https://git.kailinesb.com/ops/argocd-helm-template.git --path jian-butler-admin-ui/cluspre-front-jian-butler-admin-ui ter-pre/helm --dest-namespace jian-butler --dest-server https://kubernetes.default.svc --helm-set app_name=front-jian-butler-admin-ui --helm-set type=nginx

pre-front-jian-butler-admin-ui    # 创建的app名称
--project                         # 属于哪个项目
--repo                            # 部署的源仓库地址
--path                            # 模板在仓库的路径
--dest-namespace                  # app部署的命名空间
--dest-server                     # app部署到的k8s cluster
--helm-set k1=v1                  # 设置helm的变量,多个值重复使用 --helm-set
--help                            # 查看帮助信息

图形界面创建

Application Name app的名称。

Project Name app属于哪个项目的。

SYNC POLICY 同步的策略,可以选择手动或者自动。

Repository URL git仓库的地址

Path 模板所在的路径

如果路径正取会显示helm被渲染的所有变量。如果需要手动设置的,在设置之后会有一个锤子状的图案。

argoCD 时间问题

[官方文档](模板 – Argo CD – 声明性 GitOps CD 用于 Kubernetes (argo-cd.readthedocs.io))

需要给每个pod的控制器添加环境变量,需要修改deployment 和 sts 控制器的env

# kubectl get all -n argo
deployment.apps/argo-cd-argocd-applicationset-controller
deployment.apps/argo-cd-argocd-dex-server
deployment.apps/argo-cd-argocd-notifications-controller
deployment.apps/argo-cd-argocd-redis
deployment.apps/argo-cd-argocd-repo-server
deployment.apps/argo-cd-argocd-server

statefulset.apps/argo-cd-argocd-application-controller

# 添加容器的环境变量
env:
- name: LC_TIME
  value: POSIX
- name: TZ
  value: Asia/Shanghai

打开终端功能

# kubectl edit cm -n argo argocd-cm
exec.enabled "true"

# kubectl edit clusterrole argo-cd-argocd-server
--------参考/添加到末尾-------
- apiGroups:
  - ""
  resources:
  - pods/exec
  verbs:
  - create
  
# 添加 RBAC 规则以允许用户访问资源,即createexec
p, role:myrole, exec, create, */*, allow

远程仓库管理

argoCD 的远程仓库,如果创建了同名的远程仓库会出现无法删除的情况,仓库配置信息是存储在部署的命名空间下使用secret来存储的。手动的在UI删除会直接报错。需要手动的在k8s集群中删除。

# kubectl get secrets -n argo
repo-1884816892  
repo-3508549329  
repo-507453937   
repo-533094657   

# kubectl get secrets repo-1015242351 -n argo -o yaml
apiVersion: v1
data:
  name: YXJnby10ZXN0
  project: YXJnby10ZXN0

# 通过base64 -d 解码来查看原始的内容
# echo YXJnby10ZXN0 | base64 -d
argo-test

# 删除远程仓库
# kubectl delete secrets repo-1015242351 -n argo

GitlabCI 实现对argoCD模板的更新.

通过在CI中运行stage运行脚本的方式,就可以对app的模板进行更新,而不用修改模板本身,这样实现了统一的部署模板。

#!/bin/bash

INSTANCE_ID=`uuid | base64 | cut -c1-21`
TIME_STAMP=`date +%s`

# 生成修改的变量,前端的加上front的路径前缀。
APP_NAME=front-${CI_PROJECT_NAME}

argocd login 192.168.21.101:30594 --username cisystem --password $GIT_CD_PASSWORD --insecure

case $ENVIRONMENT in
pre)
    argocd app set pre-$APP_NAME --helm-set envs.default.BUILD_AT=$TIME_STAMP \
--helm-set image.branch=$CI_COMMIT_BRANCH \
--helm-set envs.default.COMMIT_ID=$CI_COMMIT_SHA \
--helm-set image.tag=$CI_PIPELINE_ID ;;
dev)
    argocd app set dev-$APP_NAME --helm-set envs.default.BUILD_AT=$TIME_STAMP \
--helm-set image.branch=$CI_COMMIT_BRANCH \
--helm-set envs.default.COMMIT_ID=$CI_COMMIT_SHA \
--helm-set image.tag=$CI_PIPELINE_ID ;;
test)
    argocd app set test-$APP_NAME --helm-set envs.default.BUILD_AT=$TIME_STAMP \
--helm-set image.branch=$CI_COMMIT_BRANCH \
--helm-set envs.default.COMMIT_ID=$CI_COMMIT_SHA \
--helm-set image.tag=$CI_PIPELINE_ID ;;
*)
    echo -e "\033[31m 请给变量ENVT赋值 pre dev test !!! 对应要发布到的环境中 master --> pre \033[0m" 
    argocd logout 192.168.21.101:30594
    exit 1 ;;
esac

# 退出登录
argocd logout 192.168.21.101:30594

echo -e "\033[31m BUILD_AT:    ---------------------------------------------------------- $TIME_STAMP \033[0m"
echo -e "\033[31m COMMIT_ID:    --------------------------------------------------------- ${CI_COMMIT_SHA} \033[0m"
echo -e "\033[31m CI_PROJECT_NAME:    --------------------------------------------------- $CI_PROJECT_NAME \033[0m"
echo -e "\033[31m CI_PROJECT_PATH:    --------------------------------------------------- $CI_PROJECT_PATH \033[0m"
echo -e "\033[31m CI_PROJECT_NAMESPACE:    ---------------------------------------------- $CI_PROJECT_NAMESPACE \033[0m"
echo -e "\033[31m CI_PIPELINE_ID:     --------------------------------------------------- $CI_PIPELINE_ID \033[0m"

模板中生成随机数的问题

https://argo-cd.readthedocs.io/en/stable/user-guide/helm/#random-data

原文地址:http://www.cnblogs.com/gshelldon/p/16862801.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性