Búsqueda de sitios web

Cómo instalar ArgoCD en Kubernetes/OpenShift |


Si has estado en modo alerta por las tendencias en Automatización de desarrollo e implementación de aplicaciones, debes haber leído sobre GitOps. GitOps es una metodología de implementación continua para aplicaciones nativas de la nube. Se centra en una experiencia centrada en el desarrollador para operaciones de infraestructura, mediante el uso de herramientas con las que los desarrolladores ya están familiarizados, incluidas Git y herramientas de implementación continua.

Argo CD es una herramienta declarativa de entrega continua de GitOps para Kubernetes. Sigue el patrón GitOps de utilizar repositorios Git como fuente de verdad para definir el estado deseado de sus aplicaciones. En ArgoCD, las definiciones, configuraciones y entornos de las aplicaciones deben ser declarativos y tener control de versión.

Argo CD automatiza la implementación de los estados de aplicación deseados en los entornos de destino especificados. Las implementaciones de aplicaciones pueden rastrear actualizaciones de ramas, etiquetas o anclarlas a una versión específica de manifiestos en una confirmación de Git.

Instale ArgoCD en OpenShift Cluster/Kubernetes Cluster

Siga los pasos a continuación para instalar ArgoCD en su OpenShift Container Platform.

Paso 1: crear el espacio de nombres del proyecto

ArgoCD deberá ejecutarse en su espacio de nombres. Vamos a crearlo:

### With oc command ##
oc create namespace argocd

### With kubectl command ###
kubectl create namespace argocd

Debes tener configurado kubectl para ejecutar los comandos. Puede consultar nuestra guía a continuación.

  • Administre fácilmente múltiples clústeres de Kubernetes con kubectl y kubectx

Paso 2: aplique el manifiesto ArgoCD

A continuación podemos realizar la instalación real de ArgoCD en OpenShift/Kubernetes ejecutando el manifiesto de instalación.

### 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

Salida de ejecución:

customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/applicationsets.argoproj.io created
customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
serviceaccount/argocd-application-controller created
serviceaccount/argocd-applicationset-controller created
serviceaccount/argocd-dex-server created
serviceaccount/argocd-notifications-controller created
serviceaccount/argocd-redis created
serviceaccount/argocd-repo-server created
serviceaccount/argocd-server created
role.rbac.authorization.k8s.io/argocd-application-controller created
role.rbac.authorization.k8s.io/argocd-applicationset-controller created
role.rbac.authorization.k8s.io/argocd-dex-server created
role.rbac.authorization.k8s.io/argocd-notifications-controller 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-applicationset-controller created
rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
rolebinding.rbac.authorization.k8s.io/argocd-notifications-controller 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-cmd-params-cm created
configmap/argocd-gpg-keys-cm created
configmap/argocd-notifications-cm created
configmap/argocd-rbac-cm created
configmap/argocd-ssh-known-hosts-cm created
configmap/argocd-tls-certs-cm created
secret/argocd-notifications-secret created
secret/argocd-secret created
service/argocd-applicationset-controller created
service/argocd-dex-server created
service/argocd-metrics created
service/argocd-notifications-controller-metrics created
service/argocd-redis created
service/argocd-repo-server created
service/argocd-server created
service/argocd-server-metrics created
deployment.apps/argocd-applicationset-controller created
deployment.apps/argocd-dex-server created
deployment.apps/argocd-notifications-controller created
deployment.apps/argocd-redis created
deployment.apps/argocd-repo-server created
deployment.apps/argocd-server created
statefulset.apps/argocd-application-controller created
networkpolicy.networking.k8s.io/argocd-application-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-applicationset-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-dex-server-network-policy created
networkpolicy.networking.k8s.io/argocd-notifications-controller-network-policy created
networkpolicy.networking.k8s.io/argocd-redis-network-policy created
networkpolicy.networking.k8s.io/argocd-repo-server-network-policy created
networkpolicy.networking.k8s.io/argocd-server-network-policy created

Las cápsulas se iniciarán en unos segundos o minutos.

$ 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

Confirme que el pod Dex actualizado se esté ejecutando ejecutando el siguiente comando:

$ 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

Paso 3: Obtenga la contraseña del servidor ArgoCD

Una vez que confirme que todos los pods se están ejecutando, obtenga la contraseña inicial del servidor ArgoCD que se genera automáticamente.

ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')

Confirme que la contraseña fue guardada:

$ echo $ARGOCD_SERVER_PASSWORD
argocd-server-67f667d48c-trhjg

Paso 4: exponer ArgoCD Server mediante OpenShift Route

Necesitamos parchear la implementación de ArgoCD Server en OpenShift para que el servicio quede expuesto a través de OpenShift Route:

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"}]}}}}'

Debería recibir un parche en la salida si esto tuvo éxito.

deployment.apps/argocd-server patched

Luego puedes proceder a exponer ArgoCD Server:

oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=Redirect

Confirme que se haya creado la ruta.

$ 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

Confirme que se puede acceder a la consola web navegando a la ubicación proporcionada ejecutando el siguiente comando:

echo https://$(oc get routes argocd-server -o=jsonpath='{ .spec.host }')

Puede actualizar el nombre de host utilizado en la ruta editando la configuración de yaml sobre la marcha:

oc edit route -n argocd

Paso 5: Descargue Argo CD CLI

Descargue la última versión en CD de Argo desde la página de lanzamientos.

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

Haga ejecutable la CLI argocd:

sudo chmod +x /usr/local/bin/argocd

Verifique la versión del cliente:

$ argocd version --client
argocd: v2.8.0+804d4b8
  BuildDate: 2023-08-07T19:41:16Z
  GitCommit: 804d4b8ca6bc4c2cf02c5c971aa923ec5b8623f0
  GitTreeState: clean
  GoVersion: go1.20.6
  Compiler: gc
  Platform: linux/amd64

Usando el nombre de usuario admin y la contraseña para iniciar sesión en la IP o el nombre de host de Argo CD:

### 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}

Cambie la contraseña usando el comando:

argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password StrOngP@ssw0rd

Paso 6: acceda al panel de ArgoCD

Luego podrá acceder a la consola de ArgoCD con la URL de la ruta.

Las credenciales de inicio de sesión serán

Nombre de usuario: admin

La Contraseña inicial se puede obtener con:

kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2

El panel de ArgoCD se mostrará después de iniciar sesión.

Restablecer la contraseña de administrador

De forma predeterminada, la contraseña se establece en el nombre del módulo del servidor.

Para cambiar la contraseña, necesita:

  • Editar el secreto argocd-secret
  • Actualice el campo admin.password con un nuevo hash bcrypt.

Puede utilizar un sitio como https://www.browserling.com/tools/bcrypt para generar un nuevo hash.

Aquí hay un ejemplo.

# bcrypt(password)=$2a$10$EGMTnwQa7543lA3Ry28Y7.ZjJbsyDIzmQyAsnoGyVdyaTTM4eP5IW
kubectl -n argocd patch secret argocd-secret \
  -p '{"stringData": {
    "admin.password": "$2a$10$EGMTnwQa7543lA3Ry28Y7.ZjJbsyDIzmQyAsnoGyVdyaTTM4eP5IW",
    "admin.passwordMtime": "'$(date +%FT%T%Z)'"
  }}'

Paso 7: Integrar ArgoCD con la autenticación OpenShift

Lea la guía Integración de autenticación de OpenShift con ArgoCD para una integración completa.

Visite la página de documentación de ArgoCD para aprender cómo se implementan las aplicaciones con la herramienta ArgoCD GitOps. Otro recurso útil es la página de inicio.

Más artículos sobre Kubernetes/OpenShift:

Cómo migrar la aplicación Docker Compose a Kubernetes con Kompose

Ejecute la caja de herramientas Ceph para Rook en Kubernetes/OpenShift

Agregue el secreto de extracción del registro de imágenes de Harbor a Kubernetes/OpenShift

Cómo verificar las métricas de pods/contenedores en OpenShift y Kubernetes