8.3 Deployment
Inhalt
Deployment erstellen
Damit Argo CD alles findet, müssen im Repo die richtigen Ordner und Dateien angelegt werden.
1
2
3
4
5
6
7
8
9
10
11
| .
├── argocd
│ └── values.yaml
└── deployments
├── base
│ ├── kustomization.yaml
│ ├── deployment.yaml
│ └── service.yaml
└── overlays
└── dev
└── kustomization.yaml
|
Der argocd-Ordner enthält die Argo CD-Konfiguration und der deployments Ordner enthält die kustomize basierten Manifeste.
Für dieses Lab werden die gleichen Ressourcen verwendet wie im OpenShift Lab. Hier werden wir sie jedoch nicht von Hand anwenden, sondern via Argo CD.
Jetzt kannst du die Dateien im Ordner deployments/base abfüllen mit den folgenden Manifesten:
deployments/base/deployment.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: example-web-go
name: example-web-go
spec:
replicas: 1
selector:
matchLabels:
app: example-web-go
template:
metadata:
labels:
app: example-web-go
spec:
containers:
- image: quay.io/acend/example-web-go:latest
name: example-web-go
resources:
requests:
cpu: 10m
memory: 16Mi
limits:
cpu: 20m
memory: 32Mi
|
deployments/base/service.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| apiVersion: v1
kind: Service
metadata:
labels:
app: example-web-go
name: example-web-go
spec:
ports:
- port: 5000
protocol: TCP
targetPort: 5000
selector:
app: example-web-go
type: ClusterIP
|
Kustomize
Damit Argo CD alle Ressourcen anziehen kann, verwenden wir Kustomize
.
Dafür definierst du im deployment/base/kustomization.yaml alle Dateien, die im base Ordner sind, als Ressource:
1
2
3
4
5
6
| apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
|
Danach passe deployment/overlays/dev/kustomization.yaml so an, dass die base angezogen wird:
1
2
3
4
5
| apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
|
Argo CD
Wenn du das jetzt committen würdest, würde noch nichts passieren und das liegt daran, dass die Argo CD Konfiguration noch leer ist. Alle möglichen Konfigurations Möglichkeiten sind auf docs.puzzle.ch
dokumentiert. Passe argocd/values.yaml folgendermassen an:
1
2
3
4
5
6
7
8
9
10
11
| environments:
- namespace: pitc-bbt-<username>-dev
name: <username>-dev
spoc: bbt_AT_puzzle_ch
sla: nonprod
customer: pitc
argocd:
kustomize:
path: overlays/dev
|
Mit all diesen Änderungen kannst du jetzt alles im Repo committen.
1
2
3
| git add argocd deployments
git commit -m "create new deployment"
git push
|
Nachdem alles committet ist, sollte innerhalb von wenigen Minuten die Applikation auf Argo CD
auftauchen und kurz später auch im OpenShift
.
Prod
Für fast alle Applikationen will man mehr als eine Umgebung deployen. In diesem Beispiel hast du bis jetzt eine dev Umgebung erstellt. Als nächstes kommt noch eine Prod Umgebung dazu. Dafür müssen zwei Sachen angepasst werden.
- Argo CD Konfiguration erweitern:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| environments:
- namespace: pitc-bbt-<username>-dev
name: <username>-dev
spoc: bbt_AT_puzzle_ch
sla: nonprod
customer: pitc
argocd:
kustomize:
path: overlays/dev
- namespace: pitc-bbt-<username>-prod
name: <username>-prod
spoc: bbt_AT_puzzle_ch
sla: nonprod
customer: pitc
argocd:
kustomize:
path: overlays/prod
|
deployment/overlays/prod/kustomization.yaml erstellen mit diesem Inhalt:
1
2
3
4
5
| apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
|
Wenn du diese Änderungen dann committest, sollte innerhalb von ein paar Minuten die neue Umgebung hochkommen.
Route
Jetzt hast du eine Applikation in zwei Umgebungen deployed, aber keine von beiden ist erreichbar. Dazu kommt noch, dass nicht beide Umgebungen die gleiche Route verwenden können.
Als erstes erstelle die Route im base Ordner:
route.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: example-web-go
spec:
# Wird dann später via Kustomize überschrieben
host: placeholder
port:
targetPort: 5000
to:
kind: Service
name: example-web-go
weight: 100
wildcardPolicy: None
tls:
insecureEdgeTerminationPolicy: Redirect
termination: edge
|
Danach muss die Route im deployment/base/kustomization.yaml angezogen werden:
1
2
3
4
5
6
7
| apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- route.yaml
- service.yaml
|
Und am Schluss muss noch die Route je nach Umgebung gepatched werden:
deployment/overlays/dev/kustomization.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- target:
version: v1
kind: Route
name: example-web-go
patch: |-
- op: replace
path: /spec/host
value: <username>-dev.ocp-internal.cloudscale.puzzle.ch
|
deployment/overlays/prod/kustomization.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- target:
version: v1
kind: Route
name: example-web-go
patch: |-
- op: replace
path: /spec/host
value: <username>-prod.ocp-internal.cloudscale.puzzle.ch
|
Wichtig
Diese Route ist nur im Puzzle-internen Netz erreichbarDa wir die Applikation jetzt deployed haben, sollten wir Änderungen nicht mehr direkt auf main committen, sondern einen Pullrequest erstellen und den dann mergen.
Zuletzt geändert May 19, 2026:
review changes (51daa4b)