如何在OpenShift群集上安装ArgoCD

时间:2020-02-23 14:31:33  来源:igfitidea点击:

如果我们处于警报模式下,以了解应用程序开发和部署自动化的趋势,那么我们必须已阅读有关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的集成教程,以实现完整的集成。