
Idatzi ondoren denbora pixka bat , non jsonnet eta gitlab trebetasunez kudeatzen nituen, hodiak onak direla konturatu nintzen, baina alferrikako konplikatuak eta deserosoak direla.
Kasu gehienetan, ohiko zeregin bat behar da: "sortu YAML eta jarri Kubernetes-en". Egia esan, hori da Argo CDak ikaragarri ondo egiten duena.
Argo CD-k Git biltegi bat konektatu eta bere egoera Kubernetesera bidaltzeko aukera ematen du. Lehenespenez, hainbat aplikazio motaren laguntza dago: Kustomize, Helm diagramak, Ksonnet, Jsonnet hutsa edo YAML/JSON manifestuak dituzten direktorioetan soilik.
Multzo hau nahikoa izango da erabiltzaile gehienentzat, baina ez denentzat. Guztion beharrak asetzeko, Argo CD-k tresna pertsonalizatuak erabiltzeko gaitasuna du.
Lehenik eta behin, laguntza gehitzeko aukera interesatzen zait и , aurreko artikuluan guztiz eztabaidatu zirenak.
Konfigurazioari ekin aurretik, Argo CD-ak nola funtzionatzen duen ulertu behar duzu.
Gehitutako aplikazio bakoitzeko, bi fase ditu:
- init — hedapenaren aurretik hasierako prestaketa, hemen edozer gerta daiteke: mendekotasunak deskargatzea, sekretuak desegitea eta abar.
- sortzen — manifestua sortzeko komandoa zuzenean exekutatuz, irteerak baliozko YAML korronte bat izan behar du, hau da, hain zuzen, klusterrean aplikatuko dena.
Azpimarragarria da Argo-k edozein aplikazio motari aplikatzen diola ikuspegi hau, Helm barne. Hau da, Argo CD-en Helm-ek ez ditu bertsioak zabaltzen klusterean, baizik eta manifestuak sortzeko soilik erabiltzen da.
Bere aldetik, Argo-k Helm amuak prozesatu ditzake natiboki, eta horri esker, oharra aplikatzearen logika ez urratzeko aukera ematen du.
QBEC
Qbec-ek jsonnet erabiliz aplikazioak eroso deskribatzeko aukera ematen du, eta, horrez gain, Helm diagramak errendatzeko gaitasuna du, eta Argo CD-k normalean Helm amuak prozesatu ditzakeenez, funtzio hau Argo CD-ekin erabiltzeak emaitza are zuzenagoak lortzeko aukera ematen du.
Argocd-i qbec laguntza gehitzeko bi gauza behar dituzu:
- Argo CD konfigurazioan, zure plugin pertsonalizatua eta manifestuak sortzeko komandoak definitu behar dira.
- beharrezko bitarrak irudian eskuragarri egon behar dira argocd-repo-server.
Lehen zeregina nahiko sinplea:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](taldea init ez da erabiltzen)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"Bitarrak gehitzeko iradokitzen da , edo erabili :
# 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)"Orain ikus dezagun nolakoa izango den gure aplikazioaren manifestua:
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: trueAldagaian INGURUMENA manifestuak sortu behar ditugun ingurunearen izena pasatzen dugu.
aplikatu dezagun eta ea zer lortzen dugun:

Aplikazioa zabaldu da, bikaina!
git-crypt
Git-crypt-ek zure biltegirako enkriptazio gardena konfiguratzeko aukera ematen dizu. Datu sentikorrak zuzenean git-en gordetzeko modu sinple eta segurua da.
Git-crypt-en ezarpena zailagoa izan zen.
Teorian egin genezake git-crypt unlock gure plugin pertsonalizatuaren hasierako fasean, baina hau ez da oso erosoa, ez bailuke baimenduko jatorrizko inplementazio-metodoak erabiltzea. Adibidez, Helm eta Jsonnet-en kasuan, aplikazioen konfigurazioa (balioen fitxategiak, etab.) errazteko aukera ematen duen GUI interfaze malgua galtzen dugu.
Horregatik, biltegia lehenago inprimatu nahi nuen, klonazioan.
Momentuz Argo CD-ak ez duelako biltegia sinkronizatzeko kakorik deskribatzeko gaitasunik ematen, muga hau git komandoa ordezkatzen duen shell script delikatua gainditu behar izan dugu:
#!/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 CDa egiten du git fetch hedapen-eragiketa baino lehen. Komando horri exekuzioa esleituko diogu git-crypt unlock biltegia desblokeatzeko.
erabil ditzakezun probetarako behar duzun guztia dauka dagoeneko:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Orain pentsatu behar dugu Argok nola deszifratuko dituen gure biltegiak. Alegia, sortu gpg gako bat horretarako:
$ 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'Gorde dezagun gakoaren izena 8CB8B24F50B4797D urrats gehiagorako. Esportatu gakoa bera:
$ 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 8CB8B24F50B4797DEta gehitu aparteko sekretu gisa:
# 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.yamlGuri geratzen zaigun gauza bakarra edukiontzira botatzea da argocd-repo-server, horretarako, editatu hedapena:
$ kubectl -n argocd edit deploy/argocd-repo-serverEta lehendik dagoena ordezkatuko dugu gpg-teklak bolumena piztuta projected, non gure sekretua adierazten dugun:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmArgo CD-ak automatikoki kargatzen ditu direktorio honetatik gpg gakoak edukiontzia hasten denean, beraz, gure gako pribatua ere kargatuko du.
egiaztatu dezagun:
$ 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]Bikaina, giltza kargatuta dago! Orain Argo CD-a gure biltegian kolaboratzaile gisa gehitzea besterik ez dugu eta automatikoki deszifratu ahal izango du hegan.
Inportatu gakoa tokiko ordenagailura:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemEzar dezagun konfiantza maila:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Gehi dezagun argo gure proiektuari kolaboratzaile gisa:
$ git-crypt add-gpg-user 8CB8B24F50B4797DLotutako estekak:
Iturria: www.habr.com
