
E puer Zäit nom Schreiwen , wou ech jsonnet a gitlab beherrscht hunn, hunn ech gemierkt datt Pipelines sécher gutt sinn, awer onnéideg komplizéiert an onbequem.
An deene meeschte Fäll ass eng typesch Aufgab erfuerderlech: "YAML generéieren a se a Kubernetes setzen." Eigentlech ass dat wat d'Argo CD bemierkenswäert gutt mécht.
Argo CD erlaabt Iech e Git Repository ze verbannen a säi Staat op Kubernetes ze schécken. Par défaut gëtt et Ënnerstëtzung fir verschidden Aarte vun Uwendungen: Kustomize, Helm Charts, Ksonnet, Bare Jsonnet, oder just Verzeechnes mat YAML / JSON Manifestatiounen.
Dëse Set wäert genuch fir déi meescht Benotzer sinn, awer net fir jiddereen. Fir d'Bedierfnesser vu jidderengem gerecht ze ginn, huet Argo CD d'Fäegkeet fir personaliséiert Tooling ze benotzen.
Fir d'éischt interesséieren ech mech fir d'Méiglechkeet Ënnerstëtzung ze addéieren и , déi voll am virege Artikel diskutéiert goufen.
Ier Dir d'Konfiguratioun ufänkt, musst Dir als éischt genee verstoen wéi Argo CD funktionnéiert.
Fir all zousätzlech Applikatioun huet et zwou Phasen:
- init - initial Virbereedung virum Ofbau, alles kann hei geschéien: Ofhängegkeeten eroflueden, Geheimnisser auspaken, a méi.
- generéieren - direkt de Manifest Generatioun Kommando ausféieren, d'Ausgab muss e gültege YAML Stream sinn, dat ass genau dat wat op de Cluster applizéiert gëtt.
Wat bemierkenswäert ass, ass datt Argo dës Approche fir all Typ vun Uwendung applizéiert, och Helm. Dat ass, an Argo CD setzt Helm keng Verëffentlechungen an de Cluster of, awer gëtt nëmme benotzt fir Manifestatiounen ze generéieren.
Fir säin Deel kann Argo Helm Haken nativ veraarbecht, wat et erlaabt net d'Logik vun der Verëffentlechung vun der Verëffentlechung ze verletzen.
QBEC
Qbec erlaabt Iech bequem Uwendungen mat jsonnet ze beschreiwen, an zousätzlech huet d'Fähegkeet Helm Charts ze maachen, a well Argo CD kann normalerweis Helm Haken veraarbecht ginn, andeems Dir dës Fonktioun mat Argo CD benotzt, kënnt Dir nach méi korrekt Resultater erreechen.
Fir qbec Ënnerstëtzung fir Argocd ze addéieren braucht Dir zwou Saachen:
- An der Argo CD Config muss Äre personaliséierte Plugin a Kommandoen fir Manifestatiounen definéiert ginn.
- déi néideg Binären mussen am Bild verfügbar sinn argocd-repo-server.
Éischt Aufgab zimmlech einfach:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](Equipe init net benotzt)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"Fir Binären ze addéieren gëtt et proposéiert , oder benotzen :
# deploy.yaml
spec:
template:
spec:
# 1. Define an emptyDir volume which will hold the custom binaries
volumes:
- name: custom-tools
emptyDir: {}
# 2. Use an init container to download/copy custom binaries into the emptyDir
initContainers:
- name: download-tools
image: alpine:3.12
command: [sh, -c]
args:
- wget -qO- https://github.com/splunk/qbec/releases/download/v0.12.2/qbec-linux-amd64.tar.gz | tar -xvzf - -C /custom-tools/
volumeMounts:
- mountPath: /custom-tools
name: custom-tools
# 3. Volume mount the custom binary to the bin directory (overriding the existing version)
containers:
- name: argocd-repo-server
volumeMounts:
- mountPath: /usr/local/bin/qbec
name: custom-tools
subPath: qbec
- mountPath: /usr/local/bin/jsonnet-qbec
name: custom-tools
subPath: jsonnet-qbec$ kubectl -n argocd patch deploy/argocd-repo-server -p "$(cat deploy.yaml)"Loosst eis elo kucken wéi eis Applikatiounsmanifest ausgesäit:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: qbec-app
namespace: argocd
spec:
destination:
namespace: default
server: https://kubernetes.default.svc
project: default
source:
path: qbec-app
plugin:
env:
- name: ENVIRONMENT
value: default
name: qbec
repoURL: https://github.com/kvaps/argocd-play
syncPolicy:
automated:
prune: trueAn variabelen UMWELTUNG mir passéieren den Numm vun der Ëmwelt fir déi mir mussen Manifestatiounen generéieren.
loosst eis et applizéieren a kucken wat mir kréien:

D'Applikatioun ass ofgebaut ginn, super!
git-krypta
Git-crypt erlaabt Iech transparent Verschlësselung fir Äre Repository opzestellen. Et ass en einfachen a séchere Wee fir sensibel Donnéeën direkt am Git ze späicheren.
D'Ëmsetzung vu Git-Krypta huet sech méi schwéier erausgestallt.
Theoretesch kënne mir maachen git-crypt unlock op der Initstadium vun eisem personaliséierte Plugin, awer dëst ass net ganz bequem, well et d'Benotzung vun natierlechen Deploymentmethoden net erlaabt. Zum Beispill, am Fall vun Helm a Jsonnet, verléieren mir eng flexibel GUI Interface, déi eis erlaabt d'Applikatiounskonfiguratioun (Wäerterdateien, asw.) ze vereinfachen.
Dofir wollt ech de Repository an engem fréiere Stadium drécken, während dem Klonen.
Well am Moment Argo CD keng Fäegkeet ubitt fir all Haken ze beschreiwen fir de Repository ze synchroniséieren, hu mir dës Begrenzung mat engem komplizéierte Shell-Skript missen ëmgoen, deen de git Kommando ersetzt:
#!/bin/sh
$(dirname $0)/git.bin "$@"
ec=$?
[ "$1" = fetch ] && [ -d .git-crypt ] || exit $ec
GNUPGHOME=/app/config/gpg/keys git-crypt unlock 2>/dev/null
exit $ecArgo CD spillt git fetch all Kéier virun der Deployment Operatioun. Et ass dëse Kommando dee mir d'Ausféierung zouginn git-crypt unlock fir de Repository opzemaachen.
fir Tester déi Dir benotze kënnt déi schonn alles huet wat Dir braucht:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Elo musse mir iwwerdenken wéi Argo eis Repositories entschlësselt. Generéiere nämlech e gpg Schlëssel dofir:
$ kubectl exec -ti deploy/argocd-repo-server -- bash
$ printf "%sn"
"%no-protection"
"Key-Type: default"
"Subkey-Type: default"
"Name-Real: YOUR NAME"
"Name-Email: YOUR EMAIL@example.com"
"Expire-Date: 0"
> genkey-batch
$ gpg --batch --gen-key genkey-batch
gpg: WARNING: unsafe ownership on homedir '/home/argocd/.gnupg'
gpg: keybox '/home/argocd/.gnupg/pubring.kbx' created
gpg: /home/argocd/.gnupg/trustdb.gpg: trustdb created
gpg: key 8CB8B24F50B4797D marked as ultimately trusted
gpg: directory '/home/argocd/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/argocd/.gnupg/openpgp-revocs.d/9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D.rev'Loosst eis de Schlësselnumm späicheren 8CB8B24F50B4797D fir weider Schrëtt. Export de Schlëssel selwer:
$ gpg --list-keys
gpg: WARNING: unsafe ownership on homedir '/home/argocd/.gnupg'
/home/argocd/.gnupg/pubring.kbx
-------------------------------
pub rsa3072 2020-09-04 [SC]
9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid [ultimate] YOUR NAME <YOUR EMAIL@example.com>
sub rsa3072 2020-09-04 [E]
$ gpg --armor --export-secret-keys 8CB8B24F50B4797DA füügt et als separat Geheimnis derbäi:
# argocd-gpg-keys-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: argocd-gpg-keys-secret
namespace: argocd
stringData:
8CB8B24F50B4797D: |-
-----BEGIN PGP PRIVATE KEY BLOCK-----
lQVYBF9Q8KUBDACuS4p0ctXoakPLqE99YLmdixfF/QIvXVIG5uBXClWhWMuo+D0c
ZfeyC5GvH7XPUKz1cLMqL6o/u9oHJVUmrvN/g2Mnm365nTGw1M56AfATS9IBp0HH
O/fbfiH6aMWmPrW8XIA0icoOAdP+bPcBqM4HRo4ssbRS9y/i
=yj11
-----END PGP PRIVATE KEY BLOCK-----$ kubectl apply -f argocd-gpg-keys-secret.yamlDat eenzegt wat fir eis bleift ass et an de Container ze geheien argocd-repo-server, fir dëst ze maachen, ännert d'Deployment:
$ kubectl -n argocd edit deploy/argocd-repo-serverA mir wäerten déi bestehend ersetzen gpg-Schlësselen volume an projected, wou mir eist Geheimnis uginn:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmArgo CD lued automatesch gpg Schlësselen aus dësem Verzeechnes wann de Container ufänkt, sou datt et och eise private Schlëssel lued.
loosst eis kucken:
$ kubectl -n argocd exec -ti deploy/argocd-repo-server -- bash
$ GNUPGHOME=/app/config/gpg/keys gpg --list-secret-keys
gpg: WARNING: unsafe ownership on homedir '/app/config/gpg/keys'
/app/config/gpg/keys/pubring.kbx
--------------------------------
sec rsa2048 2020-09-05 [SC] [expires: 2021-03-04]
ED6285A3B1A50B6F1D9C955E5E8B1B16D47FFC28
uid [ultimate] Anon Ymous (ArgoCD key signing key) <noreply@argoproj.io>
sec rsa3072 2020-09-03 [SC]
9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid [ultimate] YOUR NAME <YOUR EMAIL@example.com>
ssb rsa3072 2020-09-03 [E]Super, de Schlëssel ass gelueden! Elo brauche mir just Argo CD an eise Repository als Kollaborateur ze addéieren an et wäert fäeg sinn et automatesch ze entschlësselen.
Import de Schlëssel op de lokalen Computer:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemLoosst eis de Vertrauensniveau setzen:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Loosst eis Argo als Kollaborateur zu eisem Projet bäidroen:
$ git-crypt add-gpg-user 8CB8B24F50B4797DAssociéiert Links:
Source: will.com
