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

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环境

ArgoCD

什么是ArgoCD

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

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

在一个ArgoCD运行环境中包括以下组件:

1. API Server:API 服务器是一个 gRPC/REST 服务器,它公开 Web UI、CLI 和 CI/CD 系统使用的 API。

2. Repository Server:存储库服务器是一个内部服务,它维护包含应用程序清单的 Git 存储库的本地缓存。

3. Application Controller:应用程序控制器是 Kubernetes 控制器,它持续监视正在运行的应用程序,并将当前活动状态与所需目标状态进行比较(在Repo中的指定状态)。当它检测出OutOfSync应用程序状态后就会选择采取纠正措施。

安装ArgoCD客户端

<code>$ 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/<code>

安装ArgoCD服务端

1. 创建argocd项目。

<code>$ oc new-project argocd/<code>

2. 部署ArgoCD资源。

<code>$ oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.4.2/manifests/install.yaml/<code>

3. 查看部署的pod运行情况。

<code>$ 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/<code>

4. 修改ArgoCD缺省配置,使其支持通过“insecure”方式访问。

<code>$ 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/<code>

5. 创建访问ArgoCD的Route。

<code>$ 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}')/<code>

客户端登录

<code>$ 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/<code>

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

修改管理员密码

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

<code>$ 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/<code>

重置管理员密码

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

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

登录Web控制台

1. 获得ArgoCD的Route访问地址。

<code>$ oc get route argocd-server -o jsonpath='{.spec.host}'
argocd-server-argocd.apps.cluster-shanghai-c30f.shanghai-c30f.example.opentlc.com/<code>

2. 用浏览器访问Route地址,然后用admin/admin登录即可。

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


分享到:


相關文章: