OpenShift 4- 用ArgoCD安装ArgoCD环境

OpenShift 4.x HOL教程汇总
说明:本文已经在OpenShift 4.6环境中验证

GitOps是什么?

简而言之,GitOps 是使用 Git 拉取请求来管理IaaS和应用程序配置的实践。GitOps 中的 Git 存储库被视为唯一的真理来源,它包含系统的整体状态,以便使系统状态的更改是可跟踪和可审核的。为了实现GitOps,需要通过代码实现对系统的定义和配置,这正是所谓的IaC(Infrastructure as Code)。那些定义了期望的系统或应用状态的配置文件被放在Git中,这样通过Git的版本管理功能就很容易对系统或应用的配置进行回滚。除此以外,还可将一个Git作为多个云环境的的统一配置库,这样能方便实现多云环境下的联邦集群、多云部署等统一管理功能。

  • 整个系统采用声明式描述
  • 在Git中可对系统状态版本化
  • 批准的更改可以自动应用于系统
  • 软件代理可确保正确性并警告差异

为了实现将Git中的系统配置生效,就要运行一个代理,这就是GitOps服务。它可通过webhook接收或主动获取Git的配置。当接收到系统配置发生变化事件后,GitOps服务可获取最新的配置,然后根据策略在相关的基础架构(例如OpenShift)上加以实施新的配置。
在这里插入图片描述

ArgoCD

什么是ArgoCD

ArgoCD是一个用于持续交付的Kubernetes配置管理工具。Argo CD 遵循 GitOps 模式,即使用 Git 存储库作为定义所需应用程序状态的源头。Argo CD 可在指定的目标环境中自动部署所需的应用程序状态。应用程序部署可以跟踪对分支、标记的更新,或将更新固定到 Git 提交中特定版本的清单。。
在这里插入图片描述
在一个ArgoCD运行环境中包括以下组件:

  1. API Server:API 服务器是一个 gRPC/REST 服务器,它公开 Web UI、CLI 和 CI/CD 系统使用的 API。
  2. Repository Server:存储库服务器是一个内部服务,它维护包含应用程序清单的 Git 存储库的本地缓存。
  3. Application Controller:应用程序控制器是 Kubernetes 控制器,它持续监视正在运行的应用程序,并将当前活动状态与所需目标状态进行比较(在Repo中的指定状态)。当它检测出OutOfSync应用程序状态后就会选择采取纠正措施。

安装ArgoCD客户端

$ VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
$ sudo curl -L https://github.com/argoproj/argo-cd/releases/download/${VERSION}/argocd-linux-amd64 -o /usr/local/bin/argocd
$ sudo chmod +x /usr/local/bin/argocd

安装ArgoCD服务端

  1. 创建argocd项目。
$ oc new-project argocd
  1. 部署ArgoCD资源。
$ oc apply -f https://raw.githubusercontent.com/argoproj/argo-cd/${VERSION}/manifests/install.yaml
W1226 03:32:48.640389    1709 warnings.go:67] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
W1226 03:32:48.689837    1709 warnings.go:67] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
W1226 03:32:48.701061    1709 warnings.go:67] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
W1226 03:32:48.713375    1709 warnings.go:67] apiextensions.k8s.io/v1beta1 CustomResourceDefinition is deprecated in v1.16+, unavailable in v1.22+; use apiextensions.k8s.io/v1 CustomResourceDefinition
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
serviceaccount/argocd-application-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-redis created
serviceaccount/argocd-server created
role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-redis created
role.rbac.authorization.k8s.io/argocd-server created
clusterrole.rbac.authorization.k8s.io/argocd-application-controller created
clusterrole.rbac.authorization.k8s.io/argocd-server created
rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-redis created
rolebinding.rbac.authorization.k8s.io/argocd-server created
clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller created
clusterrolebinding.rbac.authorization.k8s.io/argocd-server created
configmap/argocd-cm created
configmap/argocd-gpg-keys-cm created
configmap/argocd-rbac-cm created
configmap/argocd-ssh-known-hosts-cm created
configmap/argocd-tls-certs-cm created
secret/argocd-secret created
service/argocd-dex-server created
service/argocd-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server created
service/argocd-server-metrics created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created
statefulset.apps/argocd-application-controller created
  1. 查看部署的pod运行情况。
$ oc get pod
NAME                                            READY   STATUS    RESTARTS   AGE
argocd-application-controller-ddb8c7bbc-sgh9r   1/1     Running   0          7m16s
argocd-dex-server-8577c4574-p9bfn               1/1     Running   0          7m16s
argocd-redis-8c568b5db-wzgnp                    1/1     Running   0          7m16s
argocd-repo-server-7b7dc6b757-msfkl             1/1     Running   0          7m16s
argocd-server-746c59b779-lqtmh                  1/1     Running   0          7m16s
  1. 修改ArgoCD缺省配置,使其支持通过“insecure”方式访问。
$ PATCH='{"spec":{"template":{"spec":{"$setElementOrder/containers":[{"name":"argocd-server"}],"containers":[{"command":["argocd-server","--insecure","--staticassets","/shared/app"],"name":"argocd-server"}]}}}}'
$ oc patch deployment argocd-server -p $PATCH
deployment.extensions/argocd-server patched
  1. 创建访问ArgoCD的Route。
$ oc create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirect
route.route.openshift.io/argocd-server created
$ ARGOCD_ROUTE=$(oc -n argocd get route argocd-server -o jsonpath='{.spec.host}')

客户端登录

$ ARGOCD_SERVER_PASSWORD=$(oc get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')
$ argocd login ${ARGOCD_ROUTE}:443 --insecure --grpc-web --username admin --password ${ARGOCD_SERVER_PASSWORD}
'admin' logged in successfully
Context 'argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com:443' updated

注意:如果此时报“FATA[0000] rpc error: code = Unauthenticated desc = Invalid username or password”错误,参见下面“重置管理员密码”的说明。

修改管理员密码

将admin用户的密码修改为“admin”。

$ argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password admin
Password updated
Context 'argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com:443' updated

重置管理员密码

当安装ArgoCD后第一次登录的时候出现“FATA[0000] rpc error: code = Unauthenticated desc = Invalid username or password”错误,可以执行以下命令将admin用户的密码重置为“admin”。

$ oc -n argocd patch secret argocd-secret \
  -p '{"stringData": {
    "admin.password": "$2a$10$You1ZS2c11ew2qDZlWFlxOBXdl5P1L9R2NoR0Ib/.CMovnSN8dqZO",
    "admin.passwordMtime": "'$(date +%FT%T%Z)'"
  }}'

登录Web控制台

  1. 获得ArgoCD的Route访问地址。
$ oc get route argocd-server -o jsonpath='{.spec.host}'
argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com
  1. 用浏览器访问Route地址,然后用admin/admin登录即可。
    在这里插入图片描述

参考

https://www.openshift.com/blog/introduction-to-gitops-with-openshift
https://computingforgeeks.com/how-to-install-argocd-on-openshift-cluster/


版权声明:本文为weixin_43902588原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。