OpenShift 4 之 GitOps(1)安装ArgoCD环境

文章目录

  • GitOps是什么?
  • ArgoCD
    • 什么是ArgoCD
    • 安装ArgoCD客户端
    • 安装ArgoCD服务端
    • 客户端登录
    • 修改管理员密码
    • 重置管理员密码
    • 登录Web控制台
  • 参考

GitOps是什么?

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

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

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

ArgoCD

什么是ArgoCD

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

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

安装ArgoCD客户端

$ sudo curl -L https://github.com/argoproj/argo-cd/releases/download/v1.4.2/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 -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.4.2/manifests/install.yaml
customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
serviceaccount/argocd-application-controller created
serviceaccount/argocd-dex-server 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-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-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-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-metrics created
service/argocd-server created
deployment.apps/argocd-application-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server 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 -n argocd patch deployment argocd-server -p $PATCH
deployment.extensions/argocd-server patched
  1. 创建访问ArgoCD的Route。
$ oc -n argocd 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 -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')
$ argocd --insecure --grpc-web login ${ARGOCD_ROUTE}:443 --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登录即可。
    OpenShift 4 之 GitOps(1)安装ArgoCD环境_第3张图片

参考

https://www.openshift.com/blog/introduction-to-gitops-with-openshift

你可能感兴趣的:(OpenShift,4,GitOps,ArgoCD)