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.

  1. 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
  1. 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     

Da 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)