
Mõne aja pärast pärast esimese artikli kirjutamist Enamasti on vajalik tüüpiline ülesanne: "generaatori YAML ja paigaldada see Kubernetesesse". Just see on see, millega Argo CD suurepäraselt toime tuleb.
Argo CD võimaldab ühendada Git-repo ja sünkroonida selle olekut Kubernetesesse. Vaikeselt on toetatud mitut tüüpi rakendusi: Kustomize, Helm graafikud, Ksonnet, puhas Jsonnet või lihtsalt kataloogid YAML/JSON manifestide jaoks.
Enamikule kasutajatele peaks sellest piisama, kuid mitte kõigile. Kõikide vajaduste rahuldamiseks pakub Argo CD võimalust kasutada kohandatud tööriistu.
Esialgu huvitab mind toimetamise toe lisamise võimalus
, mida on käsitletud eelmises artiklis. ja Enne konfiguratsiooniga alustamist tuleb kõigepealt mõista, kuidas täpselt Argo CD töötab.
Iga lisatud rakenduse jaoks on kaks etappi:
— algne ettevalmistus enne juurutamist, siin võib olla kõike: sõltuvuste allalaadimine, saladuste lahtipakkimine ja muud.
- init generate
- generate — käsu täitmine manifestide genereerimiseks, väljund peab olema kehtiv YAML voog, see on see, mis rakendatakse klastris.
On tähelepanuväärne, et Argo kasutab seda lähenemist mistahes rakenduste puhul, sealhulgas Helm jaoks. See tähendab, et Argo CD ei tegele versioonide klastrisse paigaldamisega, vaid kasutatakse vaid manifestide genereerimiseks.
Omalt poolt oskab Argo natiivselt käsitleda Helm-hukke, mis võimaldab mitte rikkuda versioonide rakendamise loogikat.
QBEC
Qbec võimaldab mugavalt kirjeldada rakendusi jsonnet'i abil ning sellel on ka võimalus renderdada Helm-i graafikuid. Kuna Argo CD oskab korralikult käsitleda Helm-hukke, siis selle funktsionaalsuse kasutamine koos Argo CD-ga võimaldab saavutada veelgi täpsemaid tulemusi.
Käideldavuse lisamiseks qbec Argo CD-sse on vaja kahte asja:
- Argo CD konfiguratsioonis peab olema määratud teie kohandatud plugin ja käsud manifestide genereerimiseks.
- vajalikud biinaries peavad olema saadaval pildis argocd-repo-server.
Esimene ülesanne päris lihtsalt:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](käsku init ei kasutata)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"Binaaride lisamiseks soovitatakse , 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)"Vaadake nüüd, milline 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: trueMuutujas ENVIRONMENT me edastame keskkonna nime, mille jaoks tuleb manifeste genereerida.
rakendame ja vaatame, mis meil on:

rakendus on edukalt juurutatud, suurepärane!
git-crypt
Git-crypt võimaldab seada üles läbipaistva krüpteerimise hoidlat. See on lihtne ja turvaline viis konfidentsiaalsete andmete salvestamiseks otse git-s.
git-crypti rakendamine osutus keerulisemaks.
Teoreetiliselt võiksime käivitada git-crypt unlock meie custom-plugin'i algstaadiumis, kuid see ei oleks väga mugav, kuna see ei lubaks kasutada kohalikke juurutusmeetodeid. Näiteks Helm ja Jsonnet puhul kaotame paindliku GUI-liidese, mis lihtsustab rakenduse seadistamist (values-failid jms).
Seepärast tahtsin repositooriumi printimist teostada juba varasemal etapil, kloonimise käigus.
Kuna hetkel ei paku Argo CD võimalust kirjeldada mingeid repositooriumi sünkroniseerimise konksusid, tuli selle piirangu ületamiseks kasutada nutikat shell-skripti, 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 käivitab git fetch igal korral enne juurutamise operatsiooni. Just sellele käsule paneme käitamise git-crypt unlock repositooriumi avamiseks.
Testide jaoks 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 meie repositooriume dekrüpteerib. Täpsemalt peame genereerima selle jaoks gpg-võtme:
$ 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'Salvestame võtme nime 8CB8B24F50B4797D edasi sammude jaoks. Eksportime ise 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 veel alles jääb, on see, et saata see konteinerisse argocd-repo-server, selleks redigeerime deployment'i:
$ kubectl -n argocd edit deploy/argocd-repo-serverJa asendame olemasoleva gpg-keys volume'iga projected, kus 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 gpg- võtmed automaatselt selle kausta, kui konteiner käivitub, 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 võtme allkirjastamise võti)
sec rsa3072 2020-09-03 [SC]
9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid [ultimate] TEIE NIMI
ssb rsa3072 2020-09-03 [E]Suurepärane, võti on laaditud! Nüüd peame lihtsalt lisama Argo CD meie hoidlasse 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.pemSeadistame usaldusnivoo:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Lisame argo koostööpartnerina meie projekti:
$ git-crypt add-gpg-user 8CB8B24F50B4797DSeotud lingid:
Allikas: habr.com
