├── README.md
├── apps
├── demo1
│ ├── .gitkeep
│ └── bgd
│ │ ├── base
│ │ ├── bgd-deployment.yaml
│ │ ├── bgd-route.yaml
│ │ ├── bgd-svc.yaml
│ │ └── kustomization.yaml
│ │ └── overlays
│ │ ├── bgd
│ │ ├── bgd-deployment.yaml
│ │ ├── bgd-ns.yaml
│ │ ├── bgd-route.yaml
│ │ └── bgd-svc.yaml
│ │ └── bgdk
│ │ ├── bgdk-ns.yaml
│ │ └── kustomization.yaml
├── demo2
│ ├── .gitkeep
│ └── todo
│ │ ├── postgres-create-table.yaml
│ │ ├── postgres-deployment.yaml
│ │ ├── postgres-service.yaml
│ │ ├── todo-deployment.yaml
│ │ ├── todo-insert-data.yaml
│ │ ├── todo-namespace.yaml
│ │ └── todo-service.yaml
├── demo3
│ ├── .gitkeep
│ ├── dev-env
│ │ ├── apps
│ │ │ └── dev-httpbin-app
│ │ │ │ ├── httpbin-deploy.yaml
│ │ │ │ ├── httpbin-ns.yaml
│ │ │ │ ├── httpbin-sa.yaml
│ │ │ │ ├── httpbin-svc.yaml
│ │ │ │ └── kustomization.yaml
│ │ ├── baseline
│ │ │ ├── compute-quota.yaml
│ │ │ ├── kustomization.yaml
│ │ │ ├── mem-limit-range.yaml
│ │ │ ├── netpol-deny-other-ns.yaml
│ │ │ ├── object-counts-quota.yaml
│ │ │ └── storage-class-quota.yaml
│ │ └── namespaces
│ │ │ ├── dev-project-001
│ │ │ ├── kustomization.yaml
│ │ │ ├── namespace.yaml
│ │ │ ├── rolebinding.yaml
│ │ │ └── storage-class-quota.yaml
│ │ │ ├── dev-project-002
│ │ │ ├── kustomization.yaml
│ │ │ ├── namespace.yaml
│ │ │ ├── netpol-allow-ingress.yaml
│ │ │ ├── netpol-allow-monitoring.yaml
│ │ │ └── rolebinding.yaml
│ │ │ └── dev-project-003
│ │ │ ├── kustomization.yaml
│ │ │ ├── namespace.yaml
│ │ │ └── rolebinding.yaml
│ ├── prod-env
│ │ ├── apps
│ │ │ └── prod-pacman-app
│ │ │ │ ├── kustomization.yaml
│ │ │ │ ├── mongo-deployment.yaml
│ │ │ │ ├── mongo-pvc.yaml
│ │ │ │ ├── mongo-service.yaml
│ │ │ │ ├── pacman-deployment.yaml
│ │ │ │ ├── pacman-ns.yaml
│ │ │ │ └── pacman-service.yaml
│ │ ├── baseline
│ │ │ ├── compute-quota.yaml
│ │ │ ├── kustomization.yaml
│ │ │ ├── mem-limit-range.yaml
│ │ │ ├── netpol-deny-other-ns.yaml
│ │ │ ├── object-counts-quota.yaml
│ │ │ └── storage-class-quota.yaml
│ │ └── namespaces
│ │ │ ├── prod-project-001
│ │ │ ├── kustomization.yaml
│ │ │ ├── namespace.yaml
│ │ │ ├── netpol-allow-ingress.yaml
│ │ │ ├── netpol-allow-monitoring.yaml
│ │ │ └── rolebinding.yaml
│ │ │ ├── prod-project-002
│ │ │ ├── kustomization.yaml
│ │ │ ├── namespace.yaml
│ │ │ ├── netpol-allow-ingress.yaml
│ │ │ ├── netpol-allow-monitoring.yaml
│ │ │ └── rolebinding.yaml
│ │ │ └── prod-project-003
│ │ │ ├── kustomization.yaml
│ │ │ ├── namespace.yaml
│ │ │ ├── netpol-allow-ingress.yaml
│ │ │ ├── netpol-allow-monitoring.yaml
│ │ │ └── rolebinding.yaml
│ └── staging-env
│ │ ├── apps
│ │ └── staging-parksmap-app
│ │ │ ├── kustomization.yaml
│ │ │ ├── parksmap-deployment.yaml
│ │ │ ├── parksmap-ns.yaml
│ │ │ ├── parksmap-route.yaml
│ │ │ └── parksmap-svc.yaml
│ │ ├── baseline
│ │ ├── compute-quota.yaml
│ │ ├── kustomization.yaml
│ │ ├── mem-limit-range.yaml
│ │ ├── netpol-deny-other-ns.yaml
│ │ ├── object-counts-quota.yaml
│ │ └── storage-class-quota.yaml
│ │ └── namespaces
│ │ ├── staging-project-001
│ │ ├── kustomization.yaml
│ │ ├── namespace.yaml
│ │ ├── netpol-allow-ingress.yaml
│ │ ├── netpol-allow-monitoring.yaml
│ │ └── rolebinding.yaml
│ │ ├── staging-project-002
│ │ ├── kustomization.yaml
│ │ ├── namespace.yaml
│ │ ├── netpol-allow-ingress.yaml
│ │ ├── netpol-allow-monitoring.yaml
│ │ └── rolebinding.yaml
│ │ └── staging-project-003
│ │ ├── kustomization.yaml
│ │ ├── namespace.yaml
│ │ ├── netpol-allow-ingress.yaml
│ │ ├── netpol-allow-monitoring.yaml
│ │ └── rolebinding.yaml
├── demo4
│ ├── .gitkeep
│ └── base
│ │ ├── kustomization.yaml
│ │ ├── welcome-app-deployment.yaml
│ │ ├── welcome-app-namespace.yaml
│ │ └── welcome-app-svc.yaml
├── demo5
│ ├── .gitkeep
│ ├── dev-env
│ │ └── base
│ │ │ ├── kustomization.yaml
│ │ │ ├── welcome-app-deployment.yaml
│ │ │ ├── welcome-app-namespace.yaml
│ │ │ └── welcome-app-svc.yaml
│ ├── prod-env
│ │ ├── base
│ │ │ ├── kustomization.yaml
│ │ │ ├── welcome-app-deployment.yaml
│ │ │ ├── welcome-app-namespace.yaml
│ │ │ └── welcome-app-svc.yaml
│ │ └── overlays
│ │ │ ├── deployment.yaml
│ │ │ └── kustomization.yaml
│ └── staging-env
│ │ ├── base
│ │ ├── kustomization.yaml
│ │ ├── welcome-app-deployment.yaml
│ │ ├── welcome-app-namespace.yaml
│ │ └── welcome-app-svc.yaml
│ │ └── overlays
│ │ ├── deployment.yaml
│ │ └── kustomization.yaml
└── demo6
│ ├── base
│ ├── kustomization.yaml
│ ├── welcome-app-deployment.yaml
│ ├── welcome-app-namespace.yaml
│ └── welcome-app-svc.yaml
│ ├── envs
│ ├── dev-gpu
│ │ ├── deployment.yaml
│ │ ├── kustomization.yaml
│ │ ├── replicas.yaml
│ │ └── version.yaml
│ ├── dev-nogpu
│ │ ├── deployment.yaml
│ │ ├── kustomization.yaml
│ │ └── version.yaml
│ ├── prod-eu
│ │ ├── deployment.yaml
│ │ ├── kustomization.yaml
│ │ └── version.yaml
│ ├── prod-us
│ │ ├── deployment.yaml
│ │ ├── kustomization.yaml
│ │ └── version.yaml
│ ├── staging-eu
│ │ ├── deployment.yaml
│ │ ├── kustomization.yaml
│ │ └── version.yaml
│ └── staging-us
│ │ ├── deployment.yaml
│ │ ├── kustomization.yaml
│ │ └── version.yaml
│ └── variants
│ ├── eu
│ ├── kustomization.yaml
│ └── region.yaml
│ └── us
│ ├── kustomization.yaml
│ └── region.yaml
├── demo.sh
├── demos
├── bootstrap
│ ├── README.md
│ └── multicluster.md
├── demo1
│ ├── .gitkeep
│ ├── README.md
│ └── bgdk-app.yaml
├── demo2
│ ├── .gitkeep
│ ├── README.md
│ └── todo-application.yaml
├── demo3
│ ├── .gitkeep
│ ├── README.md
│ ├── argo-apps
│ │ ├── dev-environment.yaml
│ │ ├── kustomization.yaml
│ │ ├── prod-environment.yaml
│ │ └── staging-environment.yaml
│ ├── argo-projects
│ │ ├── dev-env-project.yaml
│ │ ├── kustomization.yaml
│ │ ├── prod-env-project.yaml
│ │ └── staging-env-project.yaml
│ └── deploy
│ │ └── kustomization.yaml
├── demo4
│ ├── .gitkeep
│ ├── README.md
│ ├── argo-apps
│ │ ├── kustomization.yaml
│ │ └── multi-cluster-app.yaml
│ ├── argo-projects
│ │ ├── apps-project.yaml
│ │ └── kustomization.yaml
│ ├── deploy
│ │ └── kustomization.yaml
│ └── docs
│ │ ├── pic1.png
│ │ └── pic2.png
├── demo5
│ ├── .gitkeep
│ ├── README.md
│ ├── argo-apps
│ │ ├── dev-env-multicluster-app.yaml
│ │ ├── kustomization.yaml
│ │ ├── prod-env-multicluster-app.yaml
│ │ └── staging-env-multicluster-app.yaml
│ ├── argo-projects
│ │ ├── apps-project.yaml
│ │ └── kustomization.yaml
│ ├── deploy
│ │ └── kustomization.yaml
│ └── docs
│ │ ├── pic1.png
│ │ └── pic2.png
└── demo6
│ └── README.md
└── docs
├── agenda.md
├── main.png
└── slides.pdf
/README.md:
--------------------------------------------------------------------------------
1 | # cdCon and GitOpsCon 2023 - Managing GitOps deployments in multi-cluster production environments
2 |
3 | Repository for the [cdCon & GitOpsCon 2023](https://events.linuxfoundation.org/cdcon-gitopscon/) about Managing GitOps deployments in multi-cluster production environments.
4 |
5 |
6 | ## Abstract
7 |
8 | During [this session](https://sched.co/1LAFy) we will demonstrate how to manage and scale productive ArgoCD deployments in a multi cluster environment easily and securely using GitOps patterns.
9 |
10 | We will present the deployment of applications across multiple Kubernetes clusters on various public and private clouds and explore the best practices for scaling and managing highly available, reliable and secure applications. We will also demonstrate how you can structure your Git repositories to share and scale within your teams and organization in order to deploy your cloud native deployments in an automatic and predictive way.
11 |
12 | After this technical session you will know more about the challenges and the benefits of using GitOps patterns to scale your productive applications in multi cluster scenarios and in a Cloud agnostic way.
13 |
14 |
15 |
16 |
17 | ## Demos
18 |
19 | * [Demo 1 - GitOps Application with Kustomize](./demos/demo1/README.md)
20 | * [Demo 2 - Deploying GitOps Apps in Remote Clusters](./demos/demo2/README.md)
21 | * [Demo 3 - Managing GitOps Apps at scale](./demos/demo3/README.md)
22 | * [Demo 4 - GitOps Multi-Cluster Deployment Strategies](./demos/demo4/README.md)
23 | * [Demo 5 - GitOps Multi Cluster & Multi-Environment Strategies](./demos/demo5/README.md)
24 | * [Demo 6 - Promotion between GitOps environments](./demos/demo6/README.md)
25 |
26 | ## Slides
27 |
28 | * [Slides - CdCon & GitOpsCon - Managing GitOps deployments in multi-cluster production environments](./docs/slides.pdf)
29 |
30 | ## Audience
31 |
32 | For anyone interested in DevOps, SRE, application platform management, and anyone who manages complex Kubernetes environments at scale.
33 |
34 | After this session, DevSecOps teams, SREs, Kubernetes sysadmins, will learn about the best practices and strategies to deploy complex and advanced deployments using GitOps.
35 |
36 | ## Contributors / Maintainers
37 |
38 | * [Roberto Carratalá](github.com/rcarrata)
39 |
--------------------------------------------------------------------------------
/apps/demo1/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/apps/demo1/.gitkeep
--------------------------------------------------------------------------------
/apps/demo1/bgd/base/bgd-deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | labels:
6 | app: bgd
7 | name: bgd
8 | namespace: bgd
9 | spec:
10 | replicas: 1
11 | selector:
12 | matchLabels:
13 | app: bgd
14 | strategy: {}
15 | template:
16 | metadata:
17 | creationTimestamp: null
18 | labels:
19 | app: bgd
20 | spec:
21 | containers:
22 | - image: quay.io/redhatworkshops/bgd:latest
23 | name: bgd
24 | env:
25 | - name: COLOR
26 | value: "blue"
27 | resources: {}
28 | ---
29 |
--------------------------------------------------------------------------------
/apps/demo1/bgd/base/bgd-route.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: route.openshift.io/v1
2 | kind: Route
3 | metadata:
4 | labels:
5 | app: bgd
6 | name: bgd
7 | namespace: bgd
8 | spec:
9 | port:
10 | targetPort: 8080
11 | to:
12 | kind: Service
13 | name: bgd
14 | weight: 100
15 |
--------------------------------------------------------------------------------
/apps/demo1/bgd/base/bgd-svc.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | labels:
6 | app: bgd
7 | name: bgd
8 | namespace: bgd
9 | spec:
10 | ports:
11 | - port: 8080
12 | protocol: TCP
13 | targetPort: 8080
14 | selector:
15 | app: bgd
16 | ---
17 |
--------------------------------------------------------------------------------
/apps/demo1/bgd/base/kustomization.yaml:
--------------------------------------------------------------------------------
1 | namespace: bgd
2 | resources:
3 | - bgd-svc.yaml
4 | - bgd-deployment.yaml
5 | #- bgd-route.yaml
6 |
--------------------------------------------------------------------------------
/apps/demo1/bgd/overlays/bgd/bgd-deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | labels:
6 | app: bgd
7 | name: bgd
8 | namespace: bgd
9 | spec:
10 | replicas: 1
11 | selector:
12 | matchLabels:
13 | app: bgd
14 | strategy: {}
15 | template:
16 | metadata:
17 | creationTimestamp: null
18 | labels:
19 | app: bgd
20 | spec:
21 | containers:
22 | - image: quay.io/redhatworkshops/bgd:latest
23 | name: bgd
24 | env:
25 | - name: COLOR
26 | value: "blue"
27 | resources: {}
28 | ---
29 |
--------------------------------------------------------------------------------
/apps/demo1/bgd/overlays/bgd/bgd-ns.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: bgd
5 |
--------------------------------------------------------------------------------
/apps/demo1/bgd/overlays/bgd/bgd-route.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: route.openshift.io/v1
2 | kind: Route
3 | metadata:
4 | labels:
5 | app: bgd
6 | name: bgd
7 | namespace: bgd
8 | spec:
9 | port:
10 | targetPort: 8080
11 | to:
12 | kind: Service
13 | name: bgd
14 | weight: 100
15 |
--------------------------------------------------------------------------------
/apps/demo1/bgd/overlays/bgd/bgd-svc.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | labels:
6 | app: bgd
7 | name: bgd
8 | namespace: bgd
9 | spec:
10 | ports:
11 | - port: 8080
12 | protocol: TCP
13 | targetPort: 8080
14 | selector:
15 | app: bgd
16 | ---
17 |
--------------------------------------------------------------------------------
/apps/demo1/bgd/overlays/bgdk/bgdk-ns.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: bgdk
5 |
--------------------------------------------------------------------------------
/apps/demo1/bgd/overlays/bgdk/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 | namespace: bgdk
4 | resources:
5 | - ../../base
6 | - bgdk-ns.yaml
7 | patchesJson6902:
8 | - target:
9 | version: v1
10 | group: apps
11 | kind: Deployment
12 | name: bgd
13 | namespace: bgdk
14 | patch: |-
15 | - op: replace
16 | path: /spec/template/spec/containers/0/env/0/value
17 | value: yellow
18 |
--------------------------------------------------------------------------------
/apps/demo2/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/apps/demo2/.gitkeep
--------------------------------------------------------------------------------
/apps/demo2/todo/postgres-create-table.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: batch/v1
2 | kind: Job
3 | metadata:
4 | name: todo-table
5 | namespace: todo
6 | annotations:
7 | argocd.argoproj.io/sync-wave: "1"
8 | spec:
9 | template:
10 | spec:
11 | containers:
12 | - name: postgresql-client
13 | image: postgres:12
14 | imagePullPolicy: Always
15 | env:
16 | - name: PGPASSWORD
17 | value: admin
18 | command: ["psql"]
19 | args:
20 | [
21 | "--host=postgresql",
22 | "--username=admin",
23 | "--no-password",
24 | "--dbname=todo",
25 | "--command=create table Todo (id bigint not null,completed boolean not null,ordering integer,title varchar(255),url varchar(255),primary key (id));create sequence hibernate_sequence start with 1 increment by 1;",
26 | ]
27 | restartPolicy: Never
28 | backoffLimit: 1
--------------------------------------------------------------------------------
/apps/demo2/todo/postgres-deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: postgresql
6 | namespace: todo
7 | annotations:
8 | argocd.argoproj.io/sync-wave: "0"
9 | spec:
10 | selector:
11 | matchLabels:
12 | app: postgresql
13 | template:
14 | metadata:
15 | labels:
16 | app: postgresql
17 | spec:
18 | containers:
19 | - name: postgresql
20 | image: quay.io/redhatdemo/openshift-pgsql12-primary:centos7
21 | imagePullPolicy: Always
22 | ports:
23 | - name: tcp
24 | containerPort: 5432
25 | env:
26 | - name: PG_USER_PASSWORD
27 | value: admin
28 | - name: PG_USER_NAME
29 | value: admin
30 | - name: PG_DATABASE
31 | value: todo
32 | - name: PG_NETWORK_MASK
33 | value: all
34 |
35 |
--------------------------------------------------------------------------------
/apps/demo2/todo/postgres-service.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | name: postgresql
6 | namespace: todo
7 | annotations:
8 | argocd.argoproj.io/sync-wave: "0"
9 | spec:
10 | selector:
11 | app: postgresql
12 | ports:
13 | - name: pgsql
14 | port: 5432
15 | targetPort: 5432
--------------------------------------------------------------------------------
/apps/demo2/todo/todo-deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: "v1"
3 | kind: "ServiceAccount"
4 | metadata:
5 | labels:
6 | app.kubernetes.io/name: "todo-gitops"
7 | app.kubernetes.io/version: "1.0.0"
8 | name: "todo-gitops"
9 | namespace: todo
10 | annotations:
11 | argocd.argoproj.io/sync-wave: "2"
12 | ---
13 | apiVersion: "apps/v1"
14 | kind: "Deployment"
15 | metadata:
16 | labels:
17 | app.kubernetes.io/name: "todo-gitops"
18 | app.kubernetes.io/version: "1.0.0"
19 | name: "todo-gitops"
20 | namespace: todo
21 | annotations:
22 | argocd.argoproj.io/sync-wave: "2"
23 | spec:
24 | replicas: 1
25 | selector:
26 | matchLabels:
27 | app.kubernetes.io/name: "todo-gitops"
28 | app.kubernetes.io/version: "1.0.0"
29 | template:
30 | metadata:
31 | labels:
32 | app.kubernetes.io/name: "todo-gitops"
33 | app.kubernetes.io/version: "1.0.0"
34 | spec:
35 | containers:
36 | - env:
37 | - name: "KUBERNETES_NAMESPACE"
38 | valueFrom:
39 | fieldRef:
40 | fieldPath: "metadata.namespace"
41 | image: "quay.io/rhdevelopers/todo-gitops:1.0.0"
42 | imagePullPolicy: "Always"
43 | name: "todo-gitops"
44 | ports:
45 | - containerPort: 8080
46 | name: "http"
47 | protocol: "TCP"
48 | serviceAccount: "todo-gitops"
--------------------------------------------------------------------------------
/apps/demo2/todo/todo-insert-data.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: batch/v1
2 | kind: Job
3 | metadata:
4 | name: todo-insert
5 | annotations:
6 | argocd.argoproj.io/hook: PostSync
7 | argocd.argoproj.io/hook-delete-policy: HookSucceeded
8 | spec:
9 | ttlSecondsAfterFinished: 100
10 | template:
11 | spec:
12 | containers:
13 | - name: httpie
14 | image: alpine/httpie:2.4.0
15 | imagePullPolicy: Always
16 | command: ["http"]
17 | args:
18 | [
19 | "POST",
20 | "todo-gitops:8080/api",
21 | "title=Finish ArgoCD tutorial",
22 | "--ignore-stdin"
23 | ]
24 | restartPolicy: Never
25 | backoffLimit: 1
26 |
--------------------------------------------------------------------------------
/apps/demo2/todo/todo-namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: todo
5 | annotations:
6 | argocd.argoproj.io/sync-wave: "-1"
7 |
--------------------------------------------------------------------------------
/apps/demo2/todo/todo-service.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: "v1"
3 | kind: "Service"
4 | metadata:
5 | labels:
6 | app.kubernetes.io/name: "todo-gitops"
7 | app.kubernetes.io/version: "1.0.0"
8 | name: "todo-gitops"
9 | annotations:
10 | argocd.argoproj.io/sync-wave: "2"
11 | namespace: todo
12 | spec:
13 | ports:
14 | - name: "http"
15 | port: 8080
16 | targetPort: 8080
17 | selector:
18 | app.kubernetes.io/name: "todo-gitops"
19 | app.kubernetes.io/version: "1.0.0"
--------------------------------------------------------------------------------
/apps/demo3/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/apps/demo3/.gitkeep
--------------------------------------------------------------------------------
/apps/demo3/dev-env/apps/dev-httpbin-app/httpbin-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: httpbin
5 | spec:
6 | replicas: 1
7 | selector:
8 | matchLabels:
9 | app: httpbin
10 | version: v1
11 | template:
12 | metadata:
13 | labels:
14 | app: httpbin
15 | version: v1
16 | spec:
17 | serviceAccountName: httpbin
18 | containers:
19 | - image: docker.io/kennethreitz/httpbin
20 | imagePullPolicy: IfNotPresent
21 | name: httpbin
22 | ports:
23 | - containerPort: 80
24 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/apps/dev-httpbin-app/httpbin-ns.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: httpbin
5 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/apps/dev-httpbin-app/httpbin-sa.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | name: httpbin
5 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/apps/dev-httpbin-app/httpbin-svc.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | name: httpbin
5 | labels:
6 | app: httpbin
7 | service: httpbin
8 | spec:
9 | ports:
10 | - name: http
11 | port: 8000
12 | targetPort: 80
13 | selector:
14 | app: httpbin
15 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/apps/dev-httpbin-app/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: httpbin
5 |
6 | namePrefix: dev-
7 |
8 | resources:
9 | - httpbin-deploy.yaml
10 | - httpbin-sa.yaml
11 | - httpbin-svc.yaml
12 | - httpbin-ns.yaml
13 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/baseline/compute-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: compute-quota
5 | spec:
6 | hard:
7 | requests.cpu: '2'
8 | requests.memory: 2Gi
9 | limits.cpu: '2'
10 | limits.memory: 2Gi
11 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/baseline/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - compute-quota.yaml
6 | - mem-limit-range.yaml
7 | - storage-class-quota.yaml
8 | - object-counts-quota.yaml
9 | - netpol-deny-other-ns.yaml
10 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/baseline/mem-limit-range.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: LimitRange
3 | metadata:
4 | name: mem-limit-range
5 | spec:
6 | limits:
7 | - default:
8 | memory: 512Mi
9 | defaultRequest:
10 | memory: 256Mi
11 | type: Container
12 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/baseline/netpol-deny-other-ns.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: deny-other-namespaces
5 | spec:
6 | podSelector: {}
7 | ingress:
8 | - from:
9 | - podSelector: {}
10 | policyTypes:
11 | - Ingress
--------------------------------------------------------------------------------
/apps/demo3/dev-env/baseline/object-counts-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: object-counts
5 | spec:
6 | hard:
7 | configmaps: '100'
8 | secrets: '100'
9 | services: '100'
10 | services.loadbalancers: '2'
11 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/baseline/storage-class-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: storage-class-quota
5 | spec:
6 | hard:
7 | requests.storage: 2Gi
8 | persistentvolumeclaims: '2'
9 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-001/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: dev-project-001
5 |
6 | bases:
7 | - ../../baseline
8 |
9 | patchesStrategicMerge:
10 | - storage-class-quota.yaml
11 |
12 | resources:
13 | - namespace.yaml
14 | - rolebinding.yaml
15 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-001/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: dev-project-001
5 | spec: {}
6 | status: {}
7 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-001/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: admin
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: admin
9 | subjects:
10 | - apiGroup: rbac.authorization.k8s.io
11 | kind: User
12 | name: user001
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-001/storage-class-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: storage-class-quota
5 | spec:
6 | hard:
7 | requests.storage: 20Gi
8 | persistentvolumeclaims: '15'
9 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-002/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: dev-project-002
5 |
6 | bases:
7 | - ../../baseline
8 |
9 | resources:
10 | - namespace.yaml
11 | - netpol-allow-ingress.yaml
12 | - netpol-allow-monitoring.yaml
13 | - rolebinding.yaml
14 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-002/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: dev-project-002
5 | spec: {}
6 | status: {}
7 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-002/netpol-allow-ingress.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-ingress
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: ingress
14 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-002/netpol-allow-monitoring.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-monitoring
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: monitoring
14 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-002/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: admin
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: view
9 | subjects:
10 | - apiGroup: rbac.authorization.k8s.io
11 | kind: User
12 | name: user001
13 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-003/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: dev-project-003
5 |
6 | bases:
7 | - ../../baseline
8 |
9 | resources:
10 | - namespace.yaml
11 | - rolebinding.yaml
12 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-003/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: dev-project-003
5 | spec: {}
6 | status: {}
7 |
--------------------------------------------------------------------------------
/apps/demo3/dev-env/namespaces/dev-project-003/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: admin
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: edit
9 | subjects:
10 | - apiGroup: rbac.authorization.k8s.io
11 | kind: User
12 | name: user001
13 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/apps/prod-pacman-app/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - pacman-service.yaml
6 | - pacman-deployment.yaml
7 | - pacman-ns.yaml
8 | - mongo-service.yaml
9 | - mongo-pvc.yaml
10 | - mongo-deployment.yaml
11 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/apps/prod-pacman-app/mongo-deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | labels:
5 | name: mongo
6 | app.kubernetes.io/name: pacman
7 | name: mongo
8 | namespace: pacman-app
9 | spec:
10 | replicas: 1
11 | selector:
12 | matchLabels:
13 | name: mongo
14 | app.kubernetes.io/name: pacman
15 | template:
16 | metadata:
17 | labels:
18 | name: mongo
19 | app.kubernetes.io/name: pacman
20 | spec:
21 | containers:
22 | - image: bitnami/mongodb:latest
23 | name: mongo
24 | ports:
25 | - name: mongo
26 | containerPort: 27017
27 | volumeMounts:
28 | - name: mongo-db
29 | mountPath: /data/db
30 | volumes:
31 | - name: mongo-db
32 | persistentVolumeClaim:
33 | claimName: mongo-storage
34 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/apps/prod-pacman-app/mongo-pvc.yaml:
--------------------------------------------------------------------------------
1 | kind: PersistentVolumeClaim
2 | apiVersion: v1
3 | metadata:
4 | name: mongo-storage
5 | namespace: pacman-app
6 | labels:
7 | app.kubernetes.io/name: pacman
8 | spec:
9 | accessModes:
10 | - ReadWriteOnce
11 | resources:
12 | requests:
13 | storage: 8Gi
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/apps/prod-pacman-app/mongo-service.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | labels:
5 | name: mongo
6 | app.kubernetes.io/name: pacman
7 | name: mongo
8 | namespace: pacman-app
9 | spec:
10 | type: ClusterIP
11 | ports:
12 | - port: 27017
13 | targetPort: 27017
14 | selector:
15 | name: mongo
16 | app.kubernetes.io/name: pacman
17 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/apps/prod-pacman-app/pacman-deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | labels:
5 | name: pacman
6 | app.kubernetes.io/name: pacman
7 | name: pacman
8 | namespace: pacman-app
9 | spec:
10 | replicas: 1
11 | selector:
12 | matchLabels:
13 | name: pacman
14 | app.kubernetes.io/name: pacman
15 | template:
16 | metadata:
17 | labels:
18 | name: pacman
19 | app.kubernetes.io/name: pacman
20 | spec:
21 | containers:
22 | - image: quay.io/jpacker/nodejs-pacman-app:latest
23 | name: pacman
24 | ports:
25 | - containerPort: 8080
26 | name: http-server
27 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/apps/prod-pacman-app/pacman-ns.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: pacman-app
5 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/apps/prod-pacman-app/pacman-service.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | name: pacman
5 | namespace: pacman-app
6 | labels:
7 | name: pacman
8 | app.kubernetes.io/name: pacman
9 | spec:
10 | type: ClusterIP
11 | ports:
12 | - port: 80
13 | targetPort: 8080
14 | protocol: TCP
15 | selector:
16 | name: pacman
17 | app.kubernetes.io/name: pacman
18 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/baseline/compute-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: compute-quota
5 | spec:
6 | hard:
7 | requests.cpu: '2'
8 | requests.memory: 2Gi
9 | limits.cpu: '2'
10 | limits.memory: 2Gi
11 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/baseline/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - compute-quota.yaml
6 | - mem-limit-range.yaml
7 | - storage-class-quota.yaml
8 | - object-counts-quota.yaml
9 | - netpol-deny-other-ns.yaml
10 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/baseline/mem-limit-range.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: LimitRange
3 | metadata:
4 | name: mem-limit-range
5 | spec:
6 | limits:
7 | - default:
8 | memory: 512Mi
9 | defaultRequest:
10 | memory: 256Mi
11 | type: Container
12 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/baseline/netpol-deny-other-ns.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: deny-other-namespaces
5 | spec:
6 | podSelector: {}
7 | ingress:
8 | - from:
9 | - podSelector: {}
10 | policyTypes:
11 | - Ingress
--------------------------------------------------------------------------------
/apps/demo3/prod-env/baseline/object-counts-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: object-counts
5 | spec:
6 | hard:
7 | configmaps: '100'
8 | secrets: '100'
9 | services: '100'
10 | services.loadbalancers: '2'
11 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/baseline/storage-class-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: storage-class-quota
5 | spec:
6 | hard:
7 | requests.storage: 2Gi
8 | persistentvolumeclaims: '2'
9 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-001/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: prod-project-001
5 |
6 | bases:
7 | - ../../baseline
8 |
9 | resources:
10 | - namespace.yaml
11 | - netpol-allow-ingress.yaml
12 | - netpol-allow-monitoring.yaml
13 | - rolebinding.yaml
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-001/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: prod-project-001
5 | spec: {}
6 | status: {}
7 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-001/netpol-allow-ingress.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-ingress
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: ingress
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-001/netpol-allow-monitoring.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-monitoring
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: monitoring
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-001/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: admin
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: view
9 | subjects:
10 | - apiGroup: rbac.authorization.k8s.io
11 | kind: User
12 | name: user001
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-002/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: prod-project-002
5 |
6 | bases:
7 | - ../../baseline
8 |
9 | resources:
10 | - namespace.yaml
11 | - netpol-allow-ingress.yaml
12 | - netpol-allow-monitoring.yaml
13 | - rolebinding.yaml
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-002/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: prod-project-002
5 | spec: {}
6 | status: {}
7 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-002/netpol-allow-ingress.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-ingress
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: ingress
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-002/netpol-allow-monitoring.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-monitoring
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: monitoring
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-002/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: admin
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: view
9 | subjects:
10 | - apiGroup: rbac.authorization.k8s.io
11 | kind: User
12 | name: user001
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-003/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: prod-project-003
5 |
6 | bases:
7 | - ../../baseline
8 |
9 | resources:
10 | - namespace.yaml
11 | - netpol-allow-ingress.yaml
12 | - netpol-allow-monitoring.yaml
13 | - rolebinding.yaml
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-003/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: prod-project-003
5 | spec: {}
6 | status: {}
7 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-003/netpol-allow-ingress.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-ingress
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: ingress
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-003/netpol-allow-monitoring.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-monitoring
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: monitoring
14 |
--------------------------------------------------------------------------------
/apps/demo3/prod-env/namespaces/prod-project-003/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: admin
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: view
9 | subjects:
10 | - apiGroup: rbac.authorization.k8s.io
11 | kind: User
12 | name: user001
--------------------------------------------------------------------------------
/apps/demo3/staging-env/apps/staging-parksmap-app/kustomization.yaml:
--------------------------------------------------------------------------------
1 | namespace: parksmap
2 | resources:
3 | - parksmap-svc.yaml
4 | - parksmap-deployment.yaml
5 | #- parksmap-route.yaml
6 | - parksmap-ns.yaml
7 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/apps/staging-parksmap-app/parksmap-deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | labels:
6 | app: parksmap
7 | name: parksmap
8 | namespace: parksmap
9 | spec:
10 | replicas: 1
11 | selector:
12 | matchLabels:
13 | app: parksmap
14 | strategy: {}
15 | template:
16 | metadata:
17 | creationTimestamp: null
18 | labels:
19 | app: parksmap
20 | spec:
21 | containers:
22 | - image: quay.io/openshiftroadshow/parksmap:latest
23 | name: parksmap
24 | env:
25 | - name: COLOR
26 | value: "blue"
27 | resources: {}
28 | ---
29 |
30 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/apps/staging-parksmap-app/parksmap-ns.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: parksmap
5 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/apps/staging-parksmap-app/parksmap-route.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: route.openshift.io/v1
2 | kind: Route
3 | metadata:
4 | labels:
5 | app: parksmap
6 | name: parksmap
7 | namespace: parksmap
8 | spec:
9 | port:
10 | targetPort: 8080
11 | to:
12 | kind: Service
13 | name: parksmap
14 | weight: 100
15 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/apps/staging-parksmap-app/parksmap-svc.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | labels:
6 | app: parksmap
7 | name: parksmap
8 | namespace: parksmap
9 | spec:
10 | ports:
11 | - port: 8080
12 | protocol: TCP
13 | targetPort: 8080
14 | selector:
15 | app: parksmap
16 | ---
17 |
18 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/baseline/compute-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: compute-quota
5 | spec:
6 | hard:
7 | requests.cpu: '2'
8 | requests.memory: 2Gi
9 | limits.cpu: '2'
10 | limits.memory: 2Gi
11 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/baseline/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - compute-quota.yaml
6 | - mem-limit-range.yaml
7 | - storage-class-quota.yaml
8 | - object-counts-quota.yaml
9 | - netpol-deny-other-ns.yaml
10 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/baseline/mem-limit-range.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: LimitRange
3 | metadata:
4 | name: mem-limit-range
5 | spec:
6 | limits:
7 | - default:
8 | memory: 512Mi
9 | defaultRequest:
10 | memory: 256Mi
11 | type: Container
12 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/baseline/netpol-deny-other-ns.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: deny-other-namespaces
5 | spec:
6 | podSelector: {}
7 | ingress:
8 | - from:
9 | - podSelector: {}
10 | policyTypes:
11 | - Ingress
--------------------------------------------------------------------------------
/apps/demo3/staging-env/baseline/object-counts-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: object-counts
5 | spec:
6 | hard:
7 | configmaps: '100'
8 | secrets: '100'
9 | services: '100'
10 | services.loadbalancers: '2'
11 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/baseline/storage-class-quota.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ResourceQuota
3 | metadata:
4 | name: storage-class-quota
5 | spec:
6 | hard:
7 | requests.storage: 2Gi
8 | persistentvolumeclaims: '2'
9 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-001/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: staging-project-001
5 |
6 | bases:
7 | - ../../baseline
8 |
9 | resources:
10 | - namespace.yaml
11 | - netpol-allow-ingress.yaml
12 | - netpol-allow-monitoring.yaml
13 | - rolebinding.yaml
14 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-001/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: staging-project-001
5 | spec: {}
6 | status: {}
7 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-001/netpol-allow-ingress.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-ingress
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: ingress
14 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-001/netpol-allow-monitoring.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-monitoring
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: monitoring
14 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-001/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: admin
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: view
9 | subjects:
10 | - apiGroup: rbac.authorization.k8s.io
11 | kind: User
12 | name: user001
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-002/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: staging-project-002
5 |
6 | bases:
7 | - ../../baseline
8 |
9 | resources:
10 | - namespace.yaml
11 | - netpol-allow-ingress.yaml
12 | - netpol-allow-monitoring.yaml
13 | - rolebinding.yaml
14 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-002/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: staging-project-002
5 | spec: {}
6 | status: {}
7 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-002/netpol-allow-ingress.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-ingress
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: ingress
14 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-002/netpol-allow-monitoring.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-monitoring
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: monitoring
14 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-002/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: admin
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: view
9 | subjects:
10 | - apiGroup: rbac.authorization.k8s.io
11 | kind: User
12 | name: user001
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-003/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: staging-project-003
5 |
6 | bases:
7 | - ../../baseline
8 |
9 | resources:
10 | - namespace.yaml
11 | - netpol-allow-ingress.yaml
12 | - netpol-allow-monitoring.yaml
13 | - rolebinding.yaml
14 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-003/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: staging-project-003
5 | spec: {}
6 | status: {}
7 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-003/netpol-allow-ingress.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-ingress
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: ingress
14 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-003/netpol-allow-monitoring.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: networking.k8s.io/v1
2 | kind: NetworkPolicy
3 | metadata:
4 | name: allow-from-openshift-monitoring
5 | spec:
6 | policyTypes:
7 | - Ingress
8 | podSelector: {}
9 | ingress:
10 | - from:
11 | - namespaceSelector:
12 | matchLabels:
13 | network.openshift.io/policy-group: monitoring
14 |
--------------------------------------------------------------------------------
/apps/demo3/staging-env/namespaces/staging-project-003/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: admin
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: view
9 | subjects:
10 | - apiGroup: rbac.authorization.k8s.io
11 | kind: User
12 | name: user001
--------------------------------------------------------------------------------
/apps/demo4/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/apps/demo4/.gitkeep
--------------------------------------------------------------------------------
/apps/demo4/base/kustomization.yaml:
--------------------------------------------------------------------------------
1 | resources:
2 | - welcome-app-deployment.yaml
3 | - welcome-app-namespace.yaml
4 | - welcome-app-svc.yaml
5 |
--------------------------------------------------------------------------------
/apps/demo4/base/welcome-app-deployment.yaml:
--------------------------------------------------------------------------------
1 | kind: Deployment
2 | apiVersion: apps/v1
3 | metadata:
4 | name: welcome-app
5 | namespace: welcome-app
6 | labels:
7 | app: welcome-app
8 | app.kubernetes.io/component: welcome-app
9 | app.kubernetes.io/instance: welcome-app
10 | app.kubernetes.io/name: welcome-app
11 | app.kubernetes.io/part-of: welcome-app-app
12 | spec:
13 | replicas: 1
14 | selector:
15 | matchLabels:
16 | app: welcome-app
17 | template:
18 | metadata:
19 | creationTimestamp: null
20 | labels:
21 | app: welcome-app
22 | deployment: welcome-app
23 | spec:
24 | containers:
25 | - name: welcome-app
26 | image: quay.io/redhatworkshops/welcome-app:latest
27 | ports:
28 | - containerPort: 8080
29 | protocol: TCP
30 | - containerPort: 8443
31 | protocol: TCP
32 | resources: {}
33 | terminationMessagePath: /dev/termination-log
34 | terminationMessagePolicy: File
35 | imagePullPolicy: Always
36 | env: []
37 | restartPolicy: Always
38 | terminationGracePeriodSeconds: 30
39 | dnsPolicy: ClusterFirst
40 | securityContext: {}
41 | schedulerName: default-scheduler
42 | imagePullSecrets: []
43 | strategy:
44 | type: RollingUpdate
45 | rollingUpdate:
46 | maxSurge: 25%
47 | maxUnavailable: 25%
48 | revisionHistoryLimit: 10
49 | progressDeadlineSeconds: 600
50 | paused: false
51 |
--------------------------------------------------------------------------------
/apps/demo4/base/welcome-app-namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: welcome-app
5 |
--------------------------------------------------------------------------------
/apps/demo4/base/welcome-app-svc.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | creationTimestamp: null
6 | labels:
7 | app: welcome-app
8 | app.kubernetes.io/component: welcome-app
9 | app.kubernetes.io/instance: welcome-app
10 | app.kubernetes.io/name: welcome-app
11 | app.kubernetes.io/part-of: welcome-app-app
12 | app.openshift.io/runtime-version: latest
13 | name: welcome-app
14 | namespace: welcome-app
15 | spec:
16 | ports:
17 | - name: 8080-tcp
18 | protocol: TCP
19 | port: 8080
20 | targetPort: 8080
21 | - name: 8443-tcp
22 | protocol: TCP
23 | port: 8443
24 | targetPort: 8443
25 | selector:
26 | app: welcome-app
27 | deployment: welcome-app
28 |
--------------------------------------------------------------------------------
/apps/demo5/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/apps/demo5/.gitkeep
--------------------------------------------------------------------------------
/apps/demo5/dev-env/base/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: dev
5 | namePrefix: dev-
6 |
7 | resources:
8 | - welcome-app-deployment.yaml
9 | - welcome-app-namespace.yaml
10 | - welcome-app-svc.yaml
11 |
--------------------------------------------------------------------------------
/apps/demo5/dev-env/base/welcome-app-deployment.yaml:
--------------------------------------------------------------------------------
1 | kind: Deployment
2 | apiVersion: apps/v1
3 | metadata:
4 | name: welcome-app
5 | labels:
6 | app: welcome-app
7 | spec:
8 | replicas: 1
9 | selector:
10 | matchLabels:
11 | app: welcome-app
12 | template:
13 | metadata:
14 | creationTimestamp: null
15 | labels:
16 | app: welcome-app
17 | deployment: welcome-app
18 | spec:
19 | containers:
20 | - name: welcome-app
21 | image: quay.io/redhatworkshops/welcome-app:latest
22 | ports:
23 | - containerPort: 8080
24 | protocol: TCP
25 | - containerPort: 8443
26 | protocol: TCP
27 | resources: {}
28 | terminationMessagePath: /dev/termination-log
29 | terminationMessagePolicy: File
30 | imagePullPolicy: Always
31 | env: []
32 | restartPolicy: Always
33 | terminationGracePeriodSeconds: 30
34 | dnsPolicy: ClusterFirst
35 | securityContext: {}
36 | schedulerName: default-scheduler
37 | imagePullSecrets: []
38 | strategy:
39 | type: RollingUpdate
40 | rollingUpdate:
41 | maxSurge: 25%
42 | maxUnavailable: 25%
43 | revisionHistoryLimit: 10
44 | progressDeadlineSeconds: 600
45 | paused: false
46 |
--------------------------------------------------------------------------------
/apps/demo5/dev-env/base/welcome-app-namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: welcome-app
5 |
--------------------------------------------------------------------------------
/apps/demo5/dev-env/base/welcome-app-svc.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | creationTimestamp: null
6 | labels:
7 | app: welcome-app
8 | name: welcome-app
9 | spec:
10 | ports:
11 | - name: 8080-tcp
12 | protocol: TCP
13 | port: 8080
14 | targetPort: 8080
15 | - name: 8443-tcp
16 | protocol: TCP
17 | port: 8443
18 | targetPort: 8443
19 | selector:
20 | app: welcome-app
21 | deployment: welcome-app
22 |
--------------------------------------------------------------------------------
/apps/demo5/prod-env/base/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - welcome-app-deployment.yaml
6 | - welcome-app-namespace.yaml
7 | - welcome-app-svc.yaml
8 |
--------------------------------------------------------------------------------
/apps/demo5/prod-env/base/welcome-app-deployment.yaml:
--------------------------------------------------------------------------------
1 | kind: Deployment
2 | apiVersion: apps/v1
3 | metadata:
4 | name: welcome-app
5 | labels:
6 | app: welcome-app
7 | spec:
8 | replicas: 1
9 | selector:
10 | matchLabels:
11 | app: welcome-app
12 | template:
13 | metadata:
14 | creationTimestamp: null
15 | labels:
16 | app: welcome-app
17 | deployment: welcome-app
18 | spec:
19 | containers:
20 | - name: welcome-app
21 | image: quay.io/redhatworkshops/welcome-app:latest
22 | ports:
23 | - containerPort: 8080
24 | protocol: TCP
25 | - containerPort: 8443
26 | protocol: TCP
27 | resources: {}
28 | terminationMessagePath: /dev/termination-log
29 | terminationMessagePolicy: File
30 | imagePullPolicy: Always
31 | env: []
32 | restartPolicy: Always
33 | terminationGracePeriodSeconds: 30
34 | dnsPolicy: ClusterFirst
35 | securityContext: {}
36 | schedulerName: default-scheduler
37 | imagePullSecrets: []
38 | strategy:
39 | type: RollingUpdate
40 | rollingUpdate:
41 | maxSurge: 25%
42 | maxUnavailable: 25%
43 | revisionHistoryLimit: 10
44 | progressDeadlineSeconds: 600
45 | paused: false
46 |
--------------------------------------------------------------------------------
/apps/demo5/prod-env/base/welcome-app-namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: welcome-app
5 |
--------------------------------------------------------------------------------
/apps/demo5/prod-env/base/welcome-app-svc.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | creationTimestamp: null
6 | labels:
7 | app: welcome-app
8 | name: welcome-app
9 | spec:
10 | ports:
11 | - name: 8080-tcp
12 | protocol: TCP
13 | port: 8080
14 | targetPort: 8080
15 | - name: 8443-tcp
16 | protocol: TCP
17 | port: 8443
18 | targetPort: 8443
19 | selector:
20 | app: welcome-app
21 | deployment: welcome-app
22 |
--------------------------------------------------------------------------------
/apps/demo5/prod-env/overlays/deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: welcome-app
6 | spec:
7 | template:
8 | spec:
9 | containers:
10 | - name: welcome-app
11 | env:
12 | - name: ENV
13 | value: "prod-gpu"
14 | - name: GPU_ENABLED
15 | value: "0"
16 | - name: REGION
17 | value: "eu"
18 |
--------------------------------------------------------------------------------
/apps/demo5/prod-env/overlays/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: prod
5 | namePrefix: prod-
6 |
7 | resources:
8 | - ../base
9 |
10 | patchesStrategicMerge:
11 | - deployment.yaml
12 |
--------------------------------------------------------------------------------
/apps/demo5/staging-env/base/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - welcome-app-deployment.yaml
6 | - welcome-app-namespace.yaml
7 | - welcome-app-svc.yaml
8 |
--------------------------------------------------------------------------------
/apps/demo5/staging-env/base/welcome-app-deployment.yaml:
--------------------------------------------------------------------------------
1 | kind: Deployment
2 | apiVersion: apps/v1
3 | metadata:
4 | name: welcome-app
5 | labels:
6 | app: welcome-app
7 | spec:
8 | replicas: 1
9 | selector:
10 | matchLabels:
11 | app: welcome-app
12 | template:
13 | metadata:
14 | creationTimestamp: null
15 | labels:
16 | app: welcome-app
17 | deployment: welcome-app
18 | spec:
19 | containers:
20 | - name: welcome-app
21 | image: quay.io/redhatworkshops/welcome-app:latest
22 | ports:
23 | - containerPort: 8080
24 | protocol: TCP
25 | - containerPort: 8443
26 | protocol: TCP
27 | resources: {}
28 | terminationMessagePath: /dev/termination-log
29 | terminationMessagePolicy: File
30 | imagePullPolicy: Always
31 | env: []
32 | restartPolicy: Always
33 | terminationGracePeriodSeconds: 30
34 | dnsPolicy: ClusterFirst
35 | securityContext: {}
36 | schedulerName: default-scheduler
37 | imagePullSecrets: []
38 | strategy:
39 | type: RollingUpdate
40 | rollingUpdate:
41 | maxSurge: 25%
42 | maxUnavailable: 25%
43 | revisionHistoryLimit: 10
44 | progressDeadlineSeconds: 600
45 | paused: false
46 |
--------------------------------------------------------------------------------
/apps/demo5/staging-env/base/welcome-app-namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: welcome-app
5 |
--------------------------------------------------------------------------------
/apps/demo5/staging-env/base/welcome-app-svc.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | creationTimestamp: null
6 | labels:
7 | app: welcome-app
8 | name: welcome-app
9 | spec:
10 | ports:
11 | - name: 8080-tcp
12 | protocol: TCP
13 | port: 8080
14 | targetPort: 8080
15 | - name: 8443-tcp
16 | protocol: TCP
17 | port: 8443
18 | targetPort: 8443
19 | selector:
20 | app: welcome-app
21 | deployment: welcome-app
22 |
--------------------------------------------------------------------------------
/apps/demo5/staging-env/overlays/deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: welcome-app
6 | spec:
7 | template:
8 | spec:
9 | containers:
10 | - name: welcome-app
11 | env:
12 | - name: ENV
13 | value: "staging-nogpu"
14 | - name: GPU_ENABLED
15 | value: "0"
16 | - name: REGION
17 | value: "eu"
--------------------------------------------------------------------------------
/apps/demo5/staging-env/overlays/kustomization.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: kustomize.config.k8s.io/v1beta1
3 | kind: Kustomization
4 |
5 | namespace: staging
6 | namePrefix: staging-
7 |
8 | resources:
9 | - ../base
10 |
11 | patchesStrategicMerge:
12 | - deployment.yaml
13 |
--------------------------------------------------------------------------------
/apps/demo6/base/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - welcome-app-deployment.yaml
6 | # - welcome-app-namespace.yaml
7 | - welcome-app-svc.yaml
8 |
--------------------------------------------------------------------------------
/apps/demo6/base/welcome-app-deployment.yaml:
--------------------------------------------------------------------------------
1 | kind: Deployment
2 | apiVersion: apps/v1
3 | metadata:
4 | name: welcome-app
5 | labels:
6 | app: welcome-app
7 | spec:
8 | replicas: 1
9 | selector:
10 | matchLabels:
11 | app: welcome-app
12 | template:
13 | metadata:
14 | creationTimestamp: null
15 | labels:
16 | app: welcome-app
17 | deployment: welcome-app
18 | spec:
19 | containers:
20 | - name: welcome-app
21 | image: quay.io/redhatworkshops/welcome-app:latest
22 | ports:
23 | - containerPort: 8080
24 | protocol: TCP
25 | - containerPort: 8443
26 | protocol: TCP
27 | resources: {}
28 | terminationMessagePath: /dev/termination-log
29 | terminationMessagePolicy: File
30 | imagePullPolicy: Always
31 | env: []
32 | restartPolicy: Always
33 | terminationGracePeriodSeconds: 30
34 | dnsPolicy: ClusterFirst
35 | securityContext: {}
36 | schedulerName: default-scheduler
37 | imagePullSecrets: []
38 | strategy:
39 | type: RollingUpdate
40 | rollingUpdate:
41 | maxSurge: 25%
42 | maxUnavailable: 25%
43 | revisionHistoryLimit: 10
44 | progressDeadlineSeconds: 600
45 | paused: false
46 |
--------------------------------------------------------------------------------
/apps/demo6/base/welcome-app-namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: welcome-app
5 |
--------------------------------------------------------------------------------
/apps/demo6/base/welcome-app-svc.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | creationTimestamp: null
6 | labels:
7 | app: welcome-app
8 | name: welcome-app
9 | spec:
10 | ports:
11 | - name: 8080-tcp
12 | protocol: TCP
13 | port: 8080
14 | targetPort: 8080
15 | - name: 8443-tcp
16 | protocol: TCP
17 | port: 8443
18 | targetPort: 8443
19 | selector:
20 | app: welcome-app
21 | deployment: welcome-app
22 |
--------------------------------------------------------------------------------
/apps/demo6/envs/dev-gpu/deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: welcome-app
5 | spec:
6 | template:
7 | spec:
8 | containers:
9 | - name: welcome-app
10 | env:
11 | - name: ENV
12 | value: "load-gpu"
13 | - name: GPU_ENABLED
14 | value: "1"
15 |
--------------------------------------------------------------------------------
/apps/demo6/envs/dev-gpu/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: dev
5 | namePrefix: dev-gpu-
6 |
7 | resources:
8 | - ../../base
9 |
10 | patchesStrategicMerge:
11 | - deployment.yaml
12 | - replicas.yaml
13 | - version.yaml
14 |
--------------------------------------------------------------------------------
/apps/demo6/envs/dev-gpu/replicas.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: welcome-app
5 | spec:
6 | replicas: 4
7 |
--------------------------------------------------------------------------------
/apps/demo6/envs/dev-gpu/version.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: welcome-app
5 | spec:
6 | template:
7 | spec:
8 | containers:
9 | - name: welcome-app
10 | image: quay.io/rcarrata/welcome-app:2.0
11 |
--------------------------------------------------------------------------------
/apps/demo6/envs/dev-nogpu/deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: welcome-app
6 | spec:
7 | template:
8 | spec:
9 | containers:
10 | - name: welcome-app
11 | env:
12 | - name: ENV
13 | value: "dev-nogpu"
14 | - name: GPU_ENABLED
15 | value: "0"
16 |
--------------------------------------------------------------------------------
/apps/demo6/envs/dev-nogpu/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: dev
5 | namePrefix: dev-nogpu-
6 |
7 | resources:
8 | - ../../base
9 |
10 | patchesStrategicMerge:
11 | - deployment.yaml
12 | - version.yaml
13 |
--------------------------------------------------------------------------------
/apps/demo6/envs/dev-nogpu/version.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: welcome-app
5 | spec:
6 | template:
7 | spec:
8 | containers:
9 | - name: welcome-app
10 | image: quay.io/rcarrata/welcome-app:2.0
11 |
--------------------------------------------------------------------------------
/apps/demo6/envs/prod-eu/deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: welcome-app
6 | spec:
7 | template:
8 | spec:
9 | containers:
10 | - name: welcome-app
11 | env:
12 | - name: ENV
13 | value: "prod-nogpu"
14 | - name: GPU_ENABLED
15 | value: "0"
16 |
--------------------------------------------------------------------------------
/apps/demo6/envs/prod-eu/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: prod
5 | namePrefix: prod-eu-
6 |
7 | resources:
8 | - ../../base
9 |
10 | components:
11 | - ../../variants/eu
12 |
13 | patchesStrategicMerge:
14 | - deployment.yaml
15 | - version.yaml
16 |
--------------------------------------------------------------------------------
/apps/demo6/envs/prod-eu/version.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: welcome-app
5 | spec:
6 | template:
7 | spec:
8 | containers:
9 | - name: welcome-app
10 | image: quay.io/rcarrata/welcome-app:1.0
11 |
--------------------------------------------------------------------------------
/apps/demo6/envs/prod-us/deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: welcome-app
6 | spec:
7 | template:
8 | spec:
9 | containers:
10 | - name: welcome-app
11 | env:
12 | - name: ENV
13 | value: "prod-nogpu"
14 | - name: GPU_ENABLED
15 | value: "0"
16 |
--------------------------------------------------------------------------------
/apps/demo6/envs/prod-us/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: integration
5 | namePrefix: integration-gpu-
6 |
7 | resources:
8 | - ../../base
9 |
10 | components:
11 | - ../../variants/us
12 |
13 | patchesStrategicMerge:
14 | - deployment.yaml
15 | - version.yaml
16 |
--------------------------------------------------------------------------------
/apps/demo6/envs/prod-us/version.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: welcome-app
5 | spec:
6 | template:
7 | spec:
8 | containers:
9 | - name: welcome-app
10 | image: quay.io/rcarrata/welcome-app:1.0
11 |
--------------------------------------------------------------------------------
/apps/demo6/envs/staging-eu/deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: welcome-app
6 | spec:
7 | template:
8 | spec:
9 | containers:
10 | - name: welcome-app
11 | env:
12 | - name: ENV
13 | value: "staging-nogpu"
14 | - name: GPU_ENABLED
15 | value: "0"
16 |
--------------------------------------------------------------------------------
/apps/demo6/envs/staging-eu/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: staging
5 | namePrefix: staging-eu-
6 |
7 | resources:
8 | - ../../base
9 |
10 | components:
11 | - ../../variants/eu
12 |
13 | patchesStrategicMerge:
14 | - deployment.yaml
15 | - version.yaml
16 |
--------------------------------------------------------------------------------
/apps/demo6/envs/staging-eu/version.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: welcome-app
5 | spec:
6 | template:
7 | spec:
8 | containers:
9 | - name: welcome-app
10 | image: quay.io/rcarrata/welcome-app:1.0
11 |
--------------------------------------------------------------------------------
/apps/demo6/envs/staging-us/deployment.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: welcome-app
6 | spec:
7 | template:
8 | spec:
9 | containers:
10 | - name: welcome-app
11 | env:
12 | - name: ENV
13 | value: "staging-nogpu"
14 | - name: GPU_ENABLED
15 | value: "0"
16 |
--------------------------------------------------------------------------------
/apps/demo6/envs/staging-us/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: integration
5 | namePrefix: integration-gpu-
6 |
7 | resources:
8 | - ../../base
9 |
10 | components:
11 | - ../../variants/us
12 |
13 | patchesStrategicMerge:
14 | - deployment.yaml
15 | - version.yaml
16 |
--------------------------------------------------------------------------------
/apps/demo6/envs/staging-us/version.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: welcome-app
5 | spec:
6 | template:
7 | spec:
8 | containers:
9 | - name: welcome-app
10 | image: quay.io/rcarrata/welcome-app:1.0
11 |
--------------------------------------------------------------------------------
/apps/demo6/variants/eu/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1alpha1
2 | kind: Component
3 |
4 | patchesStrategicMerge:
5 | - region.yaml
6 |
--------------------------------------------------------------------------------
/apps/demo6/variants/eu/region.yaml:
--------------------------------------------------------------------------------
1 | kind: Deployment
2 | metadata:
3 | name: welcome-app
4 | spec:
5 | template:
6 | spec:
7 | containers:
8 | - name: welcome-app
9 | env:
10 | - name: REGION
11 | value: "eu"
12 |
--------------------------------------------------------------------------------
/apps/demo6/variants/us/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1alpha1
2 | kind: Component
3 |
4 | patchesStrategicMerge:
5 | - region.yaml
6 |
--------------------------------------------------------------------------------
/apps/demo6/variants/us/region.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: welcome-app
6 | spec:
7 | template:
8 | spec:
9 | containers:
10 | - name: welcome-app
11 | env:
12 | - name: REGION
13 | value: "us"
14 |
--------------------------------------------------------------------------------
/demo.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | ## USAGE
4 | function usage() {
5 | echo
6 | echo "Usage:"
7 | echo " $0 [command] [options]"
8 | echo " $0 --help"
9 | echo
10 | echo "Example:"
11 | echo " $0 demo1"
12 | echo
13 | echo "COMMANDS:"
14 | echo " demo1 Demo 1 - GitOps Application with Kustomize"
15 | echo " demo2 Demo 2 - Deploying GitOps Apps in Remote Clusters"
16 | echo " demo3 Demo 3 - Managing GitOps Apps at scale"
17 | echo " demo4 Demo 4 - GitOps Multi-Cluster Deployment Strategies"
18 | echo " demo5 Demo 5 - Promotion between GitOps environments"
19 | echo " demoX-delete Delete DemoX cluster - specify num of demo"
20 | echo
21 | }
22 |
23 | while :; do
24 | case $1 in
25 | demo1)
26 | ARG_COMMAND=demo1
27 | ;;
28 | demo2)
29 | ARG_COMMAND=demo2
30 | ;;
31 | demo3)
32 | ARG_COMMAND=demo3
33 | ;;
34 | demo4)
35 | ARG_COMMAND=demo4
36 | ;;
37 | demo5)
38 | ARG_COMMAND=demo5
39 | ;;
40 | demo6)
41 | ARG_COMMAND=demo6
42 | ;;
43 | -h|--help)
44 | usage
45 | exit 0
46 | ;;
47 | *) # Default case: If no more options then break out of the loop.
48 | break
49 | esac
50 |
51 | shift
52 | done
53 |
54 | # Deploy DemoX functions
55 | function demo1() {
56 | kubectl apply -f demos/demo1/bgdk-app.yaml
57 | kubectl patch app bgdk-app -n argocd \
58 | -p '{"metadata": {"finalizers": ["resources-finalizer.argocd.argoproj.io"]}}' --type merge
59 | }
60 |
61 | function demo2() {
62 | kubectl apply -f demos/demo2/todo-application.yaml
63 | kubectl patch app todo-app -n argocd \
64 | -p '{"metadata": {"finalizers": ["resources-finalizer.argocd.argoproj.io"]}}' --type merge
65 | }
66 |
67 | function demo3() {
68 | kubectl apply -k demos/demo3/deploy/
69 | }
70 |
71 | function demo4() {
72 | kubectl apply -k demos/demo4/deploy/
73 | }
74 |
75 | function demo5() {
76 | kubectl apply -k demos/demo5/deploy/
77 | }
78 |
79 |
80 | ## Delete Functions
81 | function demo1-delete() {
82 | kubectl delete -f demos/demo1/bgdk-app.yaml
83 | }
84 |
85 | function demo2-delete() {
86 | kubectl delete -f demos/demo2/todo-application.yaml
87 | }
88 |
89 | function demo3-delete() {
90 | kubectl delete -k demos/demo3/deploy/
91 | }
92 |
93 | function demo4-delete() {
94 | kubectl delete -k demos/demo4/deploy/
95 | }
96 |
97 |
98 | function demo5-delete() {
99 | kubectl delete -k demos/demo5/deploy/
100 | }
101 |
102 | ## MAIN
103 | case "$ARG_COMMAND" in
104 | demo1)
105 | echo "Deploying Demo1 - GitOps Application with Kustomize"
106 | demo1
107 | echo
108 | echo "Completed successfully!"
109 | ;;
110 |
111 | demo2)
112 | echo "Deploying Demo2 - Deploying GitOps Apps in Remote Clusters"
113 | demo2
114 | echo
115 | echo "Completed successfully!"
116 | ;;
117 |
118 | demo3)
119 | echo "Deploying Demo3 - Managing GitOps Apps at scale"
120 | demo3
121 | echo
122 | echo "Completed successfully!"
123 | ;;
124 |
125 | demo4)
126 | echo "Deploying Demo4 - GitOps Multi-Cluster Deployment Strategies"
127 | demo4
128 | echo
129 | echo "Completed successfully!"
130 | ;;
131 |
132 | demo5)
133 | echo "Deploying Demo5 - Promotion between GitOps environments"
134 | demo5
135 | echo
136 | echo "Completed successfully!"
137 | ;;
138 |
139 | demo1-delete)
140 | echo "Deleting Demo1"
141 | demo1-delete
142 | echo
143 | echo "Completed successfully!"
144 | ;;
145 |
146 | demo2-delete)
147 | echo "Deleting Demo2"
148 | demo2-delete
149 | echo
150 | echo "Completed successfully!"
151 | ;;
152 |
153 | demo3-delete)
154 | echo "Deleting Demo3"
155 | demo3-delete
156 | echo
157 | echo "Completed successfully!"
158 | ;;
159 |
160 | demo4-delete)
161 | echo "Deleting Demo4"
162 | demo4-delete
163 | echo
164 | echo "Completed successfully!"
165 | ;;
166 |
167 | demo5-delete)
168 | echo "Deleting Demo5"
169 | demo5-delete
170 | echo
171 | echo "Completed successfully!"
172 | ;;
173 |
174 | *)
175 | echo "Invalid command specified: '$ARG_COMMAND'"
176 | usage
177 | ;;
178 | esac
--------------------------------------------------------------------------------
/demos/bootstrap/README.md:
--------------------------------------------------------------------------------
1 | ### Bootstrap GitOps Demo Environment
2 |
3 | * Create Kind Cluster for GitOps Demo:
4 |
5 | ```sh
6 | CLUSTER_NAME="gitops"
7 | cat < oc_bash_completion
22 | sudo cp oc_bash_completion /etc/bash_completion.d/
23 | ````
24 |
25 | * Create the kubeconfig:
26 |
27 | ```sh
28 | touch /var/tmp/lab-kubeconfig
29 | export KUBECONFIG=/var/tmp/lab-kubeconfig
30 | kubectl login --username xxx --password xxx --server=xxx
31 | kubectl config rename-context $(oc config current-context) cluster1
32 | kubectl config use-context cluster1
33 | ```
34 |
35 | * Add the k8s cluster credentials into ArgoCD server:
36 |
37 | ```sh
38 | argocd cluster add cluster1
39 | ```
40 |
41 | * Check the list of clusters in ArgoCD:
42 |
43 | ```sh
44 | argocd cluster list
45 | ```
46 |
47 | ## Adding ROSA into ArgoCD
48 |
49 | * Create ROSA cluster
50 |
51 | ```sh
52 | export VERSION=4.11.31 \
53 | ROSA_CLUSTER_NAME=rosagitops \
54 | AWS_ACCOUNT_ID=`aws sts get-caller-identity --query Account --output text` \
55 | REGION=us-east-2 \
56 | AWS_PAGER=""
57 |
58 | rosa create cluster -y --cluster-name ${ROSA_CLUSTER_NAME} \
59 | --region ${REGION} --version ${VERSION} \
60 | --machine-cidr $CIDR \
61 | --sts
62 | rosa create operator-roles --cluster rosagitops --mode auto --yes
63 | rosa create oidc-provider --cluster rosagitops
64 | ```
65 |
66 | * Add cluster-admin user to the ROSA cluster:
67 |
68 | ```sh
69 | rosa create admin --cluster=$ROSA_CLUSTER_NAME
70 | ```
71 |
72 | * Create the kubeconfig:
73 |
74 | ```sh
75 | touch /var/tmp/lab-kubeconfig
76 | export KUBECONFIG=/var/tmp/lab-kubeconfig
77 | kubectl login --username cluster-admin --password xxx --server=xxx
78 | kubectl config rename-context $(oc config current-context) cluster2
79 | kubectl config use-context cluster2
80 | ```
81 |
82 | * Add the k8s cluster credentials into ArgoCD server:
83 |
84 | ```sh
85 | argocd cluster add cluster2
86 | ```
87 |
88 | * Check the list of clusters in ArgoCD:
89 |
90 | ```sh
91 | argocd cluster list
92 | ```
93 |
94 | ## Adding AKS into ArgoCD
95 |
96 | * Add the Kubeconfig AKS credentials:
97 |
98 | ```sh
99 | export KUBECONFIG=/var/tmp/lab-kubeconfig
100 | az aks get-credentials --resource-group rcs-rg --name rcs-test
101 | kubectl config rename-context $(oc config current-context) cluster3
102 | kubectl config use-context cluster3
103 | kubectl get nodes
104 | ```
105 |
106 | * Add the k8s cluster credentials into ArgoCD server:
107 |
108 | ```sh
109 | argocd cluster add cluster3
110 | ```
111 |
112 | * Check the list of clusters in ArgoCD:
113 |
114 | ```sh
115 | argocd cluster list
116 | ```
117 |
118 | ## Adding ARO into ArgoCD
119 |
120 | * Create the kubeconfig:
121 |
122 | ```sh
123 | touch /var/tmp/lab-kubeconfig
124 | export KUBECONFIG=/var/tmp/lab-kubeconfig
125 | kubectl login --username cluster-admin --password xxx --server=xxx
126 | kubectl config rename-context $(oc config current-context) cluster4
127 | kubectl config use-context cluster4
128 | ```
129 |
130 | * Add the k8s cluster credentials into ArgoCD server:
131 |
132 | ```sh
133 | argocd cluster add cluster4
134 | ```
135 |
136 | * Check the list of clusters in ArgoCD:
137 |
138 | ```sh
139 | argocd cluster list
140 | ```
--------------------------------------------------------------------------------
/demos/demo1/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/demos/demo1/.gitkeep
--------------------------------------------------------------------------------
/demos/demo1/README.md:
--------------------------------------------------------------------------------
1 | # Demo 1 - GitOps Application with Kustomize
2 |
3 | * Deploy a Kustomized Application using ArgoCD Application:
4 |
5 | ```
6 | cd ~/CdCon23-GitOpsMultiCluster/demos/demo1/
7 | kubectl apply -f bgdk-app.yaml
8 | ```
9 |
10 | ## Delete BGD and BGDK apps (in cascade)
11 |
12 | * To delete all the objects generated in the bgd application use:
13 |
14 | ```
15 | kubectl patch app bgdk-app -n argocd -p '{"metadata": {"finalizers": ["resources-finalizer.argocd.argoproj.io"]}}' --type merge
16 |
17 | kubectl delete -f bgdk-app.yaml
18 | ```
19 |
20 | ## Kustomize Documentation
21 |
22 | * [Kustomization](https://kubectl.docs.kubernetes.io/guides/introduction/kustomize/)
23 |
24 | * [Examples Kustomize](https://github.com/kubernetes-sigs/kustomize/tree/master/examples)
25 |
26 | * [PatchesJSON6902](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patchesjson6902/)
27 |
28 | * [Examples Inline Patches](https://github.com/kubernetes-sigs/kustomize/blob/master/examples/inlinePatch.md#inline-patch-for-patchesjson6902)
29 |
30 | * [Documentation Patches](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/patchesstrategicmerge/)
--------------------------------------------------------------------------------
/demos/demo1/bgdk-app.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: Application
3 | metadata:
4 | name: bgdk-app
5 | namespace: argocd
6 | spec:
7 | destination:
8 | namespace: bgdk
9 | server: https://kubernetes.default.svc
10 | project: default
11 | source:
12 | path: apps/demo1/bgd/overlays/bgdk
13 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
14 | targetRevision: main
15 | syncPolicy:
16 | automated:
17 | prune: true
18 | selfHeal: true
19 | syncOptions:
20 | - CreateNamespace=true
21 |
--------------------------------------------------------------------------------
/demos/demo2/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/demos/demo2/.gitkeep
--------------------------------------------------------------------------------
/demos/demo2/README.md:
--------------------------------------------------------------------------------
1 | # Demo 2 - Deploying GitOps Apps in Remote Clusters
2 |
3 | This demo will deploy the TODO app in a remote cluster (cluster1), showing how you can use ArgoCD to deploy remote Apps.
4 |
5 | ## Add new Managed clusters into ArgoCD
6 |
7 | * Follow the [Managed Clusters into ArgoCD guide](../bootstrap/multicluster.md)
8 |
9 | ## Deploy TODO app
10 |
11 | ```
12 | cd ~/CdCon23-GitOpsMultiCluster/demos/demo2/
13 | kubectl apply -f todo-application.yaml
14 | ```
15 |
16 | NOTE: the app it's exposed in the /todo.html
17 |
18 | ## Delete TODO app (in cascade)
19 |
20 | * To delete all the objects generated patch first the ArgoCD app:
21 |
22 | ```
23 | kubectl patch app todo-app -n argocd -p '{"metadata": {"finalizers": ["resources-finalizer.argocd.argoproj.io"]}}' --type merge
24 | ```
25 |
26 | * Delete the ArgoCD app:
27 |
28 | ```
29 | kubectl delete app todo-app -n argocd
30 | ```
31 |
32 | * [Delete in cascade](https://argoproj.github.io/argo-cd/user-guide/app_deletion/#about-the-deletion-finalizer)
33 |
34 | ## SyncWaves
35 |
36 | A Syncwave is a way to order how Argo CD applies the manifests that are stored in git. All manifests have a wave of zero by default, but you can set these by using the argocd.argoproj.io/sync-wave annotation.
37 |
38 | ```
39 | metadata:
40 | annotations:
41 | argocd.argoproj.io/sync-wave: "5"
42 | ```
43 |
44 | When Argo CD starts a sync action, the manifest get placed in the following order:
45 |
46 | * The Phase that they’re in (we’ll cover phases in the next section)
47 | * The wave the resource is annotated in (starting from the lowest value to the highest)
48 | * By kind (Namespaces first, then services, then deployments, etc …)
49 | * By name (ascending order)
50 |
51 | * [**Sync Waves Documentation**](https://argoproj.github.io/argo-cd/user-guide/sync-waves/#sync-phases-and-waves)
52 |
53 | ## Resource Hooks
54 |
55 | Controlling your sync operation can be futher redefined by using hooks. These hooks can run before, during, and after a sync operation. These hooks are:
56 |
57 | * **PreSync** - Runs before the sync operation. This can be something like a database backup before a schema change
58 | * **Sync** - Runs after PreSync has successfully ran. This will run alongside your normal manifesets.
59 | * **PostSync** - Runs after Sync has ran successfully. This can be something like a Slack message or an email notification.
60 | * **SyncFail** - Runs if the Sync operation as failed. This is also used to send notifications or do other evasive actions.
61 |
62 | ```
63 | metadata:
64 | annotations:
65 | argocd.argoproj.io/hook: PreSync
66 | ```
67 |
68 | You can also have the hooks be deleted after a successful/unsuccessful run.
69 |
70 | * **HookSucceeded** - The resouce will be deleted after it has succeeded.
71 | * **HookFailed** - The resource will be deleted if it has failed.
72 | * **BeforeHookCreation** - The resource will be deleted before a new one is created (when a new sync is triggered).
73 |
74 | ```
75 | metadata:
76 | annotations:
77 | argocd.argoproj.io/hook: PostSync
78 | argocd.argoproj.io/hook-delete-policy: HookSucceeded
79 | ```
80 |
--------------------------------------------------------------------------------
/demos/demo2/todo-application.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: Application
3 | metadata:
4 | name: todo-app
5 | namespace: argocd
6 | spec:
7 | destination:
8 | name: cluster1
9 | namespace: todo
10 | project: default
11 | source:
12 | path: apps/demo2/todo
13 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
14 | targetRevision: main
15 | syncPolicy:
16 | automated:
17 | prune: true
18 | selfHeal: true
19 | syncOptions:
20 | - CreateNamespace=true
21 |
--------------------------------------------------------------------------------
/demos/demo3/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/demos/demo3/.gitkeep
--------------------------------------------------------------------------------
/demos/demo3/README.md:
--------------------------------------------------------------------------------
1 |
2 | # Demo 3 - Managing GitOps Apps at scale
3 |
4 | Deploy Dev, Staging and Prod environments using ApplicationSets in the same collocated Kubernetes cluster (where the ArgoCD instance is deployed).
5 |
6 | ## Deploy Dev + Staging + Prod Environments
7 |
8 | ```
9 | cd ~/CdCon23-GitOpsMultiCluster/demos/demo3/
10 | kubectl apply -k deploy/
11 | ```
12 |
13 | ## Application Sets
14 |
15 | Argo CD ApplicationSets are an evolution of the “App of Apps” deployment pattern. It took the idea of “App of Apps” and expanded it to be more flexible and deal with a wide range of use cases. The ArgoCD ApplicationSets runs as its own controller and supplements the functionality of the Argo CD Application CRD.
16 |
17 | ApplicationSets provide the following functionality:
18 |
19 | * Use a single manifest to target multiple Kubernetes clusters.
20 | * Use a single manifest to deploy multiple Applications from a single, or multiple, git repos.
21 | * Improve support for monolithic repository patterns (also known as a “monorepo”). This is where you have many applications and/or environments defined in a single repository.
22 | * Within multi-tenant clusters, it improves the ability of teams within a cluster to deploy applications using Argo CD (without the need for privilege escalation).
23 |
24 | ApplicationSets interact with Argo CD by creating, updating, managing, and deleting Argo CD Applications. The ApplicationSets job is to make sure that the Argo CD Application remains consistent with the declared ApplicationSet resource. ApplicationSets can be thought of as sort of an “Application factory”. It takes an ApplicationSet and outputs one or more Argo CD Applications.
25 |
26 | You can read more about ApplicationSets from the [ApplicationSets documentation site](https://argocd-applicationset.readthedocs.io/en/stable/).
27 |
28 | ## Delete ApplicationSet for Apps
29 |
30 | Just delete the application set and the ArgoCD ApplicationSet controller will do the magic!
31 |
32 | ```
33 | kubectl demo -k deploy/
34 | ```
35 |
36 | ## Links of interest
37 |
38 | * [Getting Started with Application Sets](https://cloud.redhat.com/blog/getting-started-with-applicationsets)
39 | * [GitOps Guide to the Galaxy (Ep 15): Introducing the App of Apps and ApplicationSets](https://www.youtube.com/watch?v=HqzUIJMYnfY&ab_channel=OpenShift)
40 |
--------------------------------------------------------------------------------
/demos/demo3/argo-apps/dev-environment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: ApplicationSet
3 | metadata:
4 | name: dev-env-appset
5 | namespace: argocd
6 | spec:
7 | generators:
8 | - git:
9 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
10 | revision: main
11 | directories:
12 | - path: apps/demo3/dev-env/apps/*
13 | - path: apps/demo3/dev-env/namespaces/*
14 | template:
15 | metadata:
16 | name: "{{path.basename}}"
17 | spec:
18 | project: dev-env-appset-project
19 | syncPolicy:
20 | automated:
21 | prune: true
22 | selfHeal: true
23 | source:
24 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
25 | targetRevision: main
26 | path: "{{path}}"
27 | destination:
28 | server: https://kubernetes.default.svc
29 |
--------------------------------------------------------------------------------
/demos/demo3/argo-apps/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - dev-environment.yaml
6 | - prod-environment.yaml
7 | - staging-environment.yaml
8 |
--------------------------------------------------------------------------------
/demos/demo3/argo-apps/prod-environment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: ApplicationSet
3 | metadata:
4 | name: prod-env-appset
5 | namespace: argocd
6 | spec:
7 | generators:
8 | - git:
9 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
10 | revision: main
11 | directories:
12 | - path: apps/demo3/prod-env/apps/*
13 | - path: apps/demo3/prod-env/namespaces/*
14 | template:
15 | metadata:
16 | name: "{{path.basename}}"
17 | spec:
18 | project: prod-env-appset-project
19 | syncPolicy:
20 | automated:
21 | prune: true
22 | selfHeal: true
23 | source:
24 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
25 | targetRevision: main
26 | path: "{{path}}"
27 | destination:
28 | server: https://kubernetes.default.svc
29 |
--------------------------------------------------------------------------------
/demos/demo3/argo-apps/staging-environment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: ApplicationSet
3 | metadata:
4 | name: staging-env-appset
5 | namespace: argocd
6 | spec:
7 | generators:
8 | - git:
9 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
10 | revision: main
11 | directories:
12 | - path: apps/demo3/staging-env/apps/*
13 | - path: apps/demo3/staging-env/namespaces/*
14 | template:
15 | metadata:
16 | name: "{{path.basename}}"
17 | spec:
18 | project: staging-env-appset-project
19 | syncPolicy:
20 | automated:
21 | prune: true
22 | selfHeal: true
23 | source:
24 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
25 | targetRevision: main
26 | path: "{{path}}"
27 | destination:
28 | server: https://kubernetes.default.svc
29 |
--------------------------------------------------------------------------------
/demos/demo3/argo-projects/dev-env-project.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: AppProject
3 | metadata:
4 | name: dev-env-appset-project
5 | spec:
6 | clusterResourceWhitelist:
7 | - group: "*"
8 | kind: "*"
9 | destinations:
10 | - namespace: "*"
11 | server: "*"
12 | sourceRepos:
13 | - "*"
14 |
--------------------------------------------------------------------------------
/demos/demo3/argo-projects/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - dev-env-project.yaml
6 | - staging-env-project.yaml
7 | - prod-env-project.yaml
8 |
--------------------------------------------------------------------------------
/demos/demo3/argo-projects/prod-env-project.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: AppProject
3 | metadata:
4 | name: prod-env-appset-project
5 | spec:
6 | clusterResourceWhitelist:
7 | - group: "*"
8 | kind: "*"
9 | destinations:
10 | - namespace: "*"
11 | server: "*"
12 | sourceRepos:
13 | - "*"
14 |
--------------------------------------------------------------------------------
/demos/demo3/argo-projects/staging-env-project.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: AppProject
3 | metadata:
4 | name: staging-env-appset-project
5 | spec:
6 | clusterResourceWhitelist:
7 | - group: "*"
8 | kind: "*"
9 | destinations:
10 | - namespace: "*"
11 | server: "*"
12 | sourceRepos:
13 | - "*"
14 |
--------------------------------------------------------------------------------
/demos/demo3/deploy/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: argocd
5 |
6 | bases:
7 | - ../argo-apps
8 | - ../argo-projects
9 |
--------------------------------------------------------------------------------
/demos/demo4/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/demos/demo4/.gitkeep
--------------------------------------------------------------------------------
/demos/demo4/README.md:
--------------------------------------------------------------------------------
1 | # Demo 4 - GitOps Cluster Deployment Strategies
2 |
3 | ## Add new Managed clusters into ArgoCD
4 |
5 | * Follow the [Managed Clusters into ArgoCD guide](../bootstrap/multicluster.md)
6 |
7 | NOTE: if you did this step in the demo2, skip the previous guide.
8 |
9 | * Check the existing ArgoCD Managed clusters available:
10 |
11 | ```
12 | argocd cluster list
13 | SERVER NAME VERSION STATUS MESSAGE
14 | https://api.cluster-35d4.35d4.xxxx.opentlc.com:6443 cluster2 1.20 Successful
15 | https://api.k8s.xxxx.com:6443 cluster1 1.21 Successful
16 | https://kubernetes.default.svc in-cluster 1.20 Successful
17 | ```
18 |
19 |
20 |
21 | * https://argoproj.github.io/argo-cd/operator-manual/declarative-setup/#clusters
22 |
23 | ## Deploy Applications in Multi Cluster Environment
24 |
25 | ```
26 | cd ~/CdCon23-GitOpsMultiCluster/demos/demo4/
27 | kubectl apply -k deploy
28 | ```
29 |
30 |
31 |
32 | ## Application Sets with Multi Clustering Environments
33 |
34 | In Argo CD, managed clusters are stored within Secrets in the Argo CD namespace. The ApplicationSet
35 | controller uses those same Secrets to generate parameters to identify and target available clusters.
36 |
37 | For each cluster registered with Argo CD, the Cluster generator produces parameters based on the
38 | list of items found within the cluster secret.
39 |
40 | * [ApplicationSets documentation site](https://argocd-applicationset.readthedocs.io/en/stable/)
41 |
42 | * [Generator Cluster Documentation](https://argocd-applicationset.readthedocs.io/en/stable/Generators-Cluster/)
43 |
44 | ## Delete ApplicationSet for Apps
45 |
46 | For delete the multicluster environment:
47 |
48 | ```
49 | kubectl delete applicationset -n argo welcome-app-appset
50 | ```
51 |
52 | ## Links of interest
53 |
54 | * [Getting Started with Application Sets](https://cloud.redhat.com/blog/getting-started-with-applicationsets)
55 | * [GitOps Guide to the Galaxy (Ep 15): Introducing the App of Apps and ApplicationSets](https://www.youtube.com/watch?v=HqzUIJMYnfY&ab_channel=OpenShift)
56 |
--------------------------------------------------------------------------------
/demos/demo4/argo-apps/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - multi-cluster-app.yaml
6 |
--------------------------------------------------------------------------------
/demos/demo4/argo-apps/multi-cluster-app.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: ApplicationSet
3 | metadata:
4 | name: welcome-app-appset
5 | namespace: argocd
6 | spec:
7 | generators:
8 | - clusters: {}
9 | template:
10 | metadata:
11 | name: "{{name}}-welcome-app"
12 | spec:
13 | project: apps-project
14 | syncPolicy:
15 | automated:
16 | prune: true
17 | selfHeal: true
18 | source:
19 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
20 | targetRevision: main
21 | path: apps/demo4/base/
22 | destination:
23 | server: "{{server}}"
24 | namespace: welcome-app
25 |
--------------------------------------------------------------------------------
/demos/demo4/argo-projects/apps-project.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: AppProject
3 | metadata:
4 | name: apps-project
5 | spec:
6 | clusterResourceWhitelist:
7 | - group: '*'
8 | kind: '*'
9 | destinations:
10 | - namespace: '*'
11 | server: '*'
12 | sourceRepos:
13 | - '*'
14 |
--------------------------------------------------------------------------------
/demos/demo4/argo-projects/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - apps-project.yaml
--------------------------------------------------------------------------------
/demos/demo4/deploy/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: argocd
5 |
6 | bases:
7 | - ../argo-apps
8 | - ../argo-projects
9 |
--------------------------------------------------------------------------------
/demos/demo4/docs/pic1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/demos/demo4/docs/pic1.png
--------------------------------------------------------------------------------
/demos/demo4/docs/pic2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/demos/demo4/docs/pic2.png
--------------------------------------------------------------------------------
/demos/demo5/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/demos/demo5/.gitkeep
--------------------------------------------------------------------------------
/demos/demo5/README.md:
--------------------------------------------------------------------------------
1 | # Demo 5 - GitOps Multi Cluster & Multi-Environment Strategies
2 |
3 | ## Patch the Cluster Managed Secrets in ArgoCD
4 |
5 | * Patch the AKS cluster as dev:
6 |
7 | ```bash
8 | DEV=$(kubectl get secret -n argocd | grep azm | awk '{ print $1 }')
9 | kubectl patch secret -n argocd $DEV -p '{"metadata":{"labels":{"dev":"true"}}}'
10 | ```
11 |
12 | * Patch the On-Prem k8s/OCP cluster as staging:
13 |
14 | ```bash
15 | STAGING=$(kubectl get secret -n argocd | grep ocp4 | awk '{ print $1 }')
16 | kubectl patch secret $STAGING -n argocd -p '{"metadata":{"labels":{"staging":"true"}}}'
17 | ```
18 |
19 | * Patch the ROSA/ARO clusters as prod:
20 |
21 | ```bash
22 | PROD=$(kubectl get secret -n argocd | grep 'rosa\|aro' | awk '{ print $1 }')
23 | kubectl patch secret $PROD -n argocd -p '{"metadata":{"labels":{"prod":"true"}}}'
24 | ```
25 |
26 | ## Add new Managed clusters into ArgoCD
27 |
28 | * Follow the [Managed Clusters into ArgoCD guide](../bootstrap/multicluster.md)
29 |
30 | NOTE: if you did this step in the demo2, skip the previous guide.
31 |
32 | * Check the existing ArgoCD Managed clusters available:
33 |
34 | ```
35 | argocd cluster list
36 | SERVER NAME VERSION STATUS MESSAGE
37 | https://api.cluster-35d4.35d4.xxxx.opentlc.com:6443 cluster2 1.20 Successful
38 | https://api.k8s.xxxx.com:6443 cluster1 1.21 Successful
39 | https://kubernetes.default.svc in-cluster 1.20 Successful
40 | ```
41 |
42 | ## Deploy Applications in Multi Cluster Environment
43 |
44 | ```
45 | cd ~/CdCon23-GitOpsMultiCluster/demos/demo5/
46 | kubectl apply -k deploy
47 | ```
48 |
49 | ## Delete ApplicationSet for Apps
50 |
51 | For delete all the multicluster & multienv environment:
52 |
53 | ```
54 | kubectl delete applicationset -n argocd --all
55 | ```
56 |
--------------------------------------------------------------------------------
/demos/demo5/argo-apps/dev-env-multicluster-app.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: ApplicationSet
3 | metadata:
4 | name: dev-env-multicluster-app
5 | namespace: argocd
6 | spec:
7 | generators:
8 | - clusters:
9 | selector:
10 | matchLabels:
11 | dev: "true"
12 | template:
13 | metadata:
14 | name: "{{name}}-dev-env-awesome-app"
15 | spec:
16 | project: apps-project
17 | syncPolicy:
18 | automated:
19 | prune: true
20 | selfHeal: true
21 | source:
22 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
23 | targetRevision: main
24 | path: apps/demo5/dev-env/base
25 | destination:
26 | server: "{{server}}"
27 | namespace: welcome-app
28 |
--------------------------------------------------------------------------------
/demos/demo5/argo-apps/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - dev-env-multicluster-app.yaml
6 | - staging-env-multicluster-app.yaml
7 | - prod-env-multicluster-app.yaml
8 |
--------------------------------------------------------------------------------
/demos/demo5/argo-apps/prod-env-multicluster-app.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: ApplicationSet
3 | metadata:
4 | name: prod-env-multicluster-app
5 | namespace: argocd
6 | spec:
7 | generators:
8 | - clusters:
9 | selector:
10 | matchLabels:
11 | prod: "true"
12 | template:
13 | metadata:
14 | name: "{{name}}-prod-env-awesome-app"
15 | spec:
16 | project: apps-project
17 | syncPolicy:
18 | automated:
19 | prune: true
20 | selfHeal: true
21 | source:
22 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
23 | targetRevision: main
24 | path: apps/demo5/prod-env/overlays
25 | destination:
26 | server: "{{server}}"
27 | namespace: welcome-app
28 |
--------------------------------------------------------------------------------
/demos/demo5/argo-apps/staging-env-multicluster-app.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: ApplicationSet
3 | metadata:
4 | name: staging-env-multicluster-app
5 | namespace: argocd
6 | spec:
7 | generators:
8 | - clusters:
9 | selector:
10 | matchLabels:
11 | staging: "true"
12 | template:
13 | metadata:
14 | name: "{{name}}-staging-env-awesome-app"
15 | spec:
16 | project: apps-project
17 | syncPolicy:
18 | automated:
19 | prune: true
20 | selfHeal: true
21 | source:
22 | repoURL: https://github.com/rcarrata/CdCon23-GitOpsMultiCluster.git
23 | targetRevision: main
24 | path: apps/demo5/staging-env/overlays
25 | destination:
26 | server: "{{server}}"
27 | namespace: welcome-app
28 |
--------------------------------------------------------------------------------
/demos/demo5/argo-projects/apps-project.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: argoproj.io/v1alpha1
2 | kind: AppProject
3 | metadata:
4 | name: apps-project
5 | spec:
6 | clusterResourceWhitelist:
7 | - group: '*'
8 | kind: '*'
9 | destinations:
10 | - namespace: '*'
11 | server: '*'
12 | sourceRepos:
13 | - '*'
14 |
--------------------------------------------------------------------------------
/demos/demo5/argo-projects/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | resources:
5 | - apps-project.yaml
--------------------------------------------------------------------------------
/demos/demo5/deploy/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 |
4 | namespace: argocd
5 |
6 | bases:
7 | - ../argo-apps
8 | - ../argo-projects
9 |
--------------------------------------------------------------------------------
/demos/demo5/docs/pic1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/demos/demo5/docs/pic1.png
--------------------------------------------------------------------------------
/demos/demo5/docs/pic2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/demos/demo5/docs/pic2.png
--------------------------------------------------------------------------------
/demos/demo6/README.md:
--------------------------------------------------------------------------------
1 | # Demo 6 - Promotion between GitOps environments
2 |
3 | ## Folder Structure
4 |
5 | ```md
6 | $ tree -L 2 apps/pattern6
7 | apps/pattern6
8 | ├── base
9 | │ ├── kustomization.yaml
10 | │ ├── welcome-app-deployment.yaml
11 | │ ├── welcome-app-namespace.yaml
12 | │ └── welcome-app-svc.yaml
13 | ├── envs
14 | │ ├── dev-gpu
15 | │ ├── dev-nogpu
16 | │ ├── prod-eu
17 | │ ├── prod-us
18 | │ ├── staging-eu
19 | │ └── staging-us
20 | └── variants
21 | ├── eu
22 | └── us
23 | ```
24 |
25 | ## Scenario 1 - Promote application version from Dev to Staging Environment in the US:
26 |
27 | ```md
28 | cp envs/dev-gpu/version.yaml envs/staging-us/version.yaml
29 | ```
30 |
31 | ## Scenario 2 - Promote application version from Staging to Prod Environment in the US:
32 |
33 | ```md
34 | cp envs/staging-us/version.yaml envs/prod-us/version.yaml
35 | ```
--------------------------------------------------------------------------------
/docs/agenda.md:
--------------------------------------------------------------------------------
1 | ## Agenda and Demos (35 mins)
2 |
3 | 1. Intro GitOps and ArgoCD
4 | 2. Demo 1 - Kustomize to the Rescue!
5 | 3. Demo 2 - Sync Waves and Hooks to rule the world
6 | 4. Demo 3 - App of Apps - The GitOps order awakens
7 | 5. Demo 4 - ApplicationSet - The Rise of ArgoCD Applications
8 | 6. Demo 5 - MultiCluster Management - How to rule them all!
9 | 7. Demo 6 - Promotion Releases with GitOps without dying
10 | 8. Wrap Up!
--------------------------------------------------------------------------------
/docs/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/docs/main.png
--------------------------------------------------------------------------------
/docs/slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rcarrata/CdCon23-GitOpsMultiCluster/c27a30fa5746c284e21538dbf333671a692b3c1b/docs/slides.pdf
--------------------------------------------------------------------------------