
MĂ”ni aeg pĂ€rast esimese artikli kirjutamist Enamasti on nĂ”utav tĂŒĂŒpiline ĂŒlesanne: "genereerida YAML ja paigutada see Kubernetesesse". Selle ĂŒlesandega suudab Argo CD suurepĂ€raselt hakkama saada.
Argo CD vĂ”imaldab ĂŒhendada Git-repo ja sĂŒnkroniseerida selle oleku Kubernetesega. Vaikimisi toetab see mitmeid rakenduste tĂŒĂŒpe: Kustomize, Helm chart'id, Ksonnet, puhas Jsonnet vĂ”i lihtsalt kaustad, kus on YAML/JSON manifestid.
Selle komplekti enamikule kasutajatele piisab, kuid mitte kÔigile. Argo CD-s on vÔimalus kasutada custom tooling'ut, et rahuldada kÔigi vajadusi.
Esiteks huvitab mind vÔimalus lisada toe
qbec ja Enne seadistuse alustamist on kÔigepealt vaja aru saada, kuidas tÀpselt Argo CD töötab.
Iga lisatud rakenduse jaoks on tal kaks faasi:
init
- â algne ettevalmistus enne juurutamist, siin vĂ”ib olla kĂ”ike: sĂ”ltuvuste allalaadimist, saladuste lahtipakkimist ja muud. generate
- â kĂ€su genereerimise tĂ€itmine, vĂ€ljund peaks olema valideeritud YAML streaming, see on tĂ€pselt see, mis rakendatakse klastris. TĂ€htis on, et Argo rakendab seda lĂ€henemist igat tĂŒĂŒpi rakenduste jaoks, sealhulgas Helm'i jaoks. Argo CD-s ei tegele Helm versioonide juurutamisega klastrisse, vaid kasutatakse ainult manifestide genereerimiseks.
Omaette on Argo suudab natiivselt töödelda Helm hook'e, mis vÔimaldab mitte rikkuda versioonide rakendamise loogikat.
QBEC
Qbec vÔimaldab mugavalt kirjeldada rakendusi jsonnet'i abil ning tal on ka vÔimalus renderdada Helm chart'e. Kuna Argo CD suudab normaalselt töödelda Helm hook'e, vÔimaldab selle funktsiooni kasutamine Argo CD-s saavutada veelgi tÀpsemaid tulemusi.
Qbec toe lisamiseks argocd-sse on vaja kahte asja:
Argo CD konfiguratsioonis peab olema mÀÀratud teie custom plugin ja kÀsud manifestide genereerimiseks.
- vajalikud binaarfailid peavad olema kergesti kÀttesaadavad pildis
- argocd-repo-server Esimene ĂŒlesanne.
lahendatakse (kÀsku
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"']ei kasutata) â algne ettevalmistus enne juurutamist, siin vĂ”ib olla kĂ”ike: sĂ”ltuvuste allalaadimist, saladuste lahtipakkimist ja muud. $ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"
Binaarfailide lisamiseks on soovitatavBinaarfailide lisamiseks pakutakse , vÔi kasutada :
# 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)"NĂŒĂŒd vaatame, kuidas nĂ€eb vĂ€lja meie rakenduse manifest:
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: trueMu variables ENVIRONMENT edastame keskkonna nime, mille jaoks tuleb manifeste genereerida.
rakendame ja vaatame, mis meil vÀlja tuli:

rakendus on edukalt juurde installitud, suurepÀrane!
, mida kÀsitleti pÔhjalikult eelnevas artiklis.
Git-crypt vĂ”imaldab seadistada lĂ€bipaistva krĂŒpteerimise hoidlat. See on lihtne ja turvaline viis hoiduda konfidentsiaalseteandmete otse git-is salvestamisest.
git-crypti rakendamine osutus keerulisemaks.
Teoreetiliselt saaksime kÀivitada git-crypt unlock meie custom-plugin'i init-etapis, kuid see pole eriti mugav, kuna ei vÔimaldaks kasutada kohalikke juurutamismeetodeid. NÀiteks Helm ja Jsonnet puhul kaotame paindliku GUI-liidese, mis lihtsustab rakenduse seadistamist (values-failid ja muud).
Just seetĂ”ttu tahtsin hoidlat dekrĂŒpteerida veel varasemal etapil, kopeerimise ajal.
Kuna Argo CD ei paku hetkel vĂ”imalust kirjeldada mingeid hook'e hoidla sĂŒnkroniseerimiseks, pidime selle piirangu mööda juhtima nutika shell skriptiga, mis asendab git kĂ€sku:
#!/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 tĂ€idab git fetch igal korral enne juurutamise operatsiooni. Just selle kĂ€su kĂŒlge kinnitame git-crypt unlock hoidla dekrĂŒpteerimise.
katsetamiseks saate kasutada milles on juba kÔik vajalik:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3NĂŒĂŒd peame mĂ”tlema, kuidas Argo dekrĂŒpteerib meie hoidlaid. EelkĂ”ige peame genereerima gpg- vĂ”tme:
$ kubectl exec -ti deploy/argocd-repo-server -- bash
$ printf "%sn"
"%no-protection"
"Key-Type: default"
"Subkey-Type: default"
"Name-Real: TEIE NIMI"
"Name-Email: TEIE 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'Salvestame vÔtme nime 8CB8B24F50B4797D jÀrgmiste sammude jaoks. Ekspordime vÔtme:
$ 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
sub rsa3072 2020-09-04 [E]
$ gpg --armor --export-secret-keys 8CB8B24F50B4797DJa lisame selle eraldi salajana:
# 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.yamlAinus, mis meil on jÀÀnud, on see konteinerisse suunamine Esimene ĂŒlesanne, selleks redigeerime deployment'i:
$ kubectl -n argocd edit deploy/argocd-repo-serverJa asendame olemasoleva gpg-keys mahu projected, kuhu mÀrkime meie salajase:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmArgo CD laadib kÀivitamisel automaatselt kÔik gpg-vÔtmed sellest kaustast, seega laadib ta ka meie privaatvÔtme.
kontrollime:
$ 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)
sec rsa3072 2020-09-03 [SC]
9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid [ultimate] YOUR NAME
ssb rsa3072 2020-09-03 [E]SuurepĂ€rane, vĂ”tme laadimine Ă”nnestus! NĂŒĂŒd peame lihtsalt lisama Argo CD meie registrisse koostööpartnerina ja see suudab selle automaatselt reaalajas dekrĂŒpteerida.
Impordime vÔtme kohalikku arvutisse:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemSeame usaldusastme:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Lisame argo koostööpartneriks meie projekti:
$ git-crypt add-gpg-user 8CB8B24F50B4797DTeemakohased lingid:
Allikas: habr.com
