[Book] [OK!] GitOps Cookbook: 08. Advanced Topics: 8.4 Deploy to Multiple Clusters


Задача:
Вы хотите деплоить приложение на разные кластеры


Делаю:
2025.12.10


$ cat << 'EOF' | kubectl create -f -
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: bgd-app
  namespace: argocd
spec:
  generators:
    - list:
        elements:
          - cluster: staging
            url: https://kubernetes.default.svc
            location: default
          - cluster: prod
            url: https://kubernetes.default.svc
            location: app
  template:
    metadata:
      name: '-app'
    spec:
      project: default
      source:
        repoURL: https://github.com/gitops-cookbook/gitops-cookbook-sc.git
        targetRevision: main
        path: ch08/bgd-gen/
      destination:
        server: ''
        namespace: ''
      syncPolicy:
        syncOptions:
          - CreateNamespace=true
EOF


$ export ARGOCD_PASSWORD=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)
$ echo ${ARGOCD_PASSWORD}


$ argocd login \
    --insecure \
    --username admin \
    --password $ARGOCD_PASSWORD \
    --grpc-web \
    argocd.${INGRESS_HOST}.nip.io


$ argocd app list
NAME                CLUSTER                         NAMESPACE  PROJECT  STATUS     HEALTH   SYNCPOLICY  CONDITIONS  REPO                                                       PATH                  TARGET
argocd/prod-app     https://kubernetes.default.svc  app        default  OutOfSync  Missing  Manual      <none>      https://github.com/gitops-cookbook/gitops-cookbook-sc.git  ch08/bgd-gen/prod     main
argocd/staging-app  https://kubernetes.default.svc  default    default  OutOfSync  Missing  Manual      <none>      https://github.com/gitops-cookbook/gitops-cookbook-sc.git  ch08/bgd-gen/staging  main


$ kubectl get ApplicationSet -n argocd
NAME      AGE
bgd-app   17m


// Удаляем ранее созданный ApplicationSet
$ kubectl delete ApplicationSet bgd-app -n argocd


$ cat << 'EOF' | kubectl create -f -
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: cluster-addons
  namespace: argocd
spec:
  generators:
    - git:
        repoURL: https://github.com/gitops-cookbook/gitops-cookbook-sc.git
        revision: main
        directories:
          - path: ch08/bgd-gen/*
  template:
    metadata:
      name: ''
    spec:
      project: default
      source:
        repoURL: https://github.com/gitops-cookbook/gitops-cookbook-sc.git
        targetRevision: main
        path: ''
      destination:
        server: https://kubernetes.default.svc
        namespace: ''
EOF


$ argocd app list
NAME                CLUSTER                         NAMESPACE  PROJECT  STATUS     HEALTH   SYNCPOLICY  CONDITIONS  REPO                                                       PATH                  TARGET
argocd/ch08prod     https://kubernetes.default.svc  prod       default  OutOfSync  Missing  Manual      <none>      https://github.com/gitops-cookbook/gitops-cookbook-sc.git  ch08/bgd-gen/prod     main
argocd/ch08staging  https://kubernetes.default.svc  staging    default  OutOfSync  Missing  Manual      <none>      https://github.com/gitops-cookbook/gitops-cookbook-sc.git  ch08/bgd-gen/staging  main


$ kubectl get ApplicationSet -n argocd
NAME             AGE
cluster-addons   4m20s


// Удаляем ранее созданный ApplicationSet
$ kubectl delete ApplicationSet cluster-addons -n argocd