如何在OpenShift群集上安装ArgoCD
如果我们处于警报模式下,以了解应用程序开发和部署自动化的趋势,那么我们必须已阅读有关GitOps的信息。 GitOps是针对云本机应用程序的持续部署方法。通过使用开发人员已经熟悉的工具(包括Git和Continuous Deployment工具),它专注于以开发人员为中心的基础结构操作体验。
Argo CD是用于Kubernetes的声明性GitOps连续交付工具。它遵循GitOps模式,该模式使用Git存储库作为定义应用程序所需状态的真实来源。在ArgoCD中,应用程序定义,配置和环境应为声明性的,并受版本控制。
Argo CD可在指定的目标环境中自动部署所需的应用程序状态。应用程序部署可以在Git提交时跟踪对分支,标签的更新,或者固定到列表的特定版本。
在OpenShift群集上安装ArgoCD
请按照以下步骤将ArgoCD安装到OpenShift容器平台上。
创建项目名称空间
ArgoCD将需要在其命名空间上运行。让我们创建它:
--- With oc command -- $oc create namespace argocd --- With kubectl command -- $kubectl create namespace argocd
我们需要配置kubectl才能运行命令。我们可以参考下面的教程。
使用kubectl和kubectx轻松管理多个Kubernetes集群
在OpenShift上应用ArgoCD列表
接下来,我们可以通过运行安装列表在OpenShift上执行ArgoCD的实际安装。
--- With oc command -- mkdir argocd cd argocd wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml oc apply -n argocd -f ./install.yaml --- With kubectl command -- mkdir argocd cd argocd wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml kubectl apply -n argocd -f ./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
Pod将在几秒钟或者几分钟内启动。
$oc get pods -n argocd NAME READY STATUS RESTARTS AGE argocd-application-controller-56cc786677-jmlr7 1/1 Running 0 110s argocd-dex-server-9755c5c9c-mpg8g 1/1 Running 0 110s argocd-redis-8c568b5db-r6ffj 1/1 Running 0 110s argocd-repo-server-778f98fc8f-7gttj 1/1 Running 0 110s argocd-server-7696cd5f89-v66rn 1/1 Running 0 110s
通过执行以下命令来确认更新的Dex Pod正在运行:
$oc get pods -l=app.kubernetes.io/name=argocd-dex-server NAME READY STATUS RESTARTS AGE argocd-dex-server-78b8dd8b75-qvbjk 1/1 Running 0 4m49s
第3步:获取ArgoCD服务器密码
确认所有Pod都在运行后,获取自动生成的ArgoCD Server初始密码。
ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')
确认密码已保存:
$echo $ARGOCD_SERVER_PASSWORD argocd-server-7696cd5f99-v86rn
使用OpenShift Route公开ArgoCD服务器
我们需要在OpenShift上修补ArgoCD Server部署,以使服务通过OpenShift路由公开:
oc -n argocd patch deployment argocd-server -p '{"spec":{"template":{"spec":{"$setElementOrder/containers":[{"name":"argocd-server"}],"containers":[{"command":["argocd-server","--insecure","--staticassets","/shared/app"],"name":"argocd-server"}]}}}}'
如果成功,应该在输出中打补丁。
deployment.apps/argocd-server patched
然后,我们可以继续公开ArgoCD服务器:
oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirect
确认路由已创建。
$oc get route -n argocd NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD argocd-server argocd-server-argocd.apps.mycluster.example.com argocd-server http edge/Redirect None
通过导航到执行以下命令提供的位置,确认可访问Web控制台:
echo https://$(oc get routes argocd-server -o=jsonpath='{ .spec.host }')
我们可以通过动态编辑yaml配置来更新路由中使用的主机名:
$oc edit route -n argocd
下载Argo CD CLI
从发行页面下载最新的Argo CD版本。
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*//') curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
使argocd CLI可执行:
sudo chmod +x /usr/local/bin/argocd
检查客户端版本:
$argocd version --client argocd: v1.5.5+0fdef48 BuildDate: 2017-05-16T04:02:57Z GitCommit: 0fdef4861e12026e133224f7c9413072340e2983 GitTreeState: clean GoVersion: go1.14.1 Compiler: gc Platform: linux/amd64
使用用户名admin和密码登录Argo CD的IP或者主机名:
--- Get route -- ARGOCD_ROUTE=$(oc -n argocd get route argocd-server -o jsonpath='{.spec.host}') --- Get Admin password -- ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}') --- Login to ArgoCD API -- argocd --insecure --grpc-web login ${ARGOCD_ROUTE}:443 --username admin --password ${ARGOCD_SERVER_PASSWORD}
使用以下命令更改密码:
argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password theitroad@localhost
访问ArgoCD仪表板
然后,我们可以使用路由URL访问ArgoCD控制台。
登录凭据将是
用户名:admin
初始密码可以通过以下方式获得:
kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
登录后将显示ArgoCD仪表板。
重置管理员密码
默认情况下,密码设置为服务器窗格的名称。
要更改密码,我们需要:编辑argocd-secret秘密使用新的bcrypt哈希更新admin.password字段。
我们可以使用https://www.browserling.com/tools/bcrypt之类的来生成新的哈希。
这是一个例子。
# bcrypt(password)=a$EGMTnwQa7543lA3Ry28Y7.ZjJbsyDIzmQyAsnoGyVdyaTTM4eP5IW kubectl -n argocd patch secret argocd-secret \ -p '{"stringData": { "admin.password": "a$EGMTnwQa7543lA3Ry28Y7.ZjJbsyDIzmQyAsnoGyVdyaTTM4eP5IW", "admin.passwordMtime": "'$(date +%FT%T%Z)'" }}'
将ArgoCD与OpenShift身份验证集成
仔细阅读OpenShift身份验证与ArgoCD的集成教程,以实现完整的集成。