
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
- genereerida â 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
