
Neko vrijeme nakon pisanja , gdje sam spretno upravljao jsonnetom i gitlabom, shvatio sam da su cjevovodi svakako dobri, ali nepotrebno komplicirani i nezgodni.
U većini slučajeva potreban je tipičan zadatak: "generiraj YAML i stavi ga u Kubernetes." Zapravo, to je ono što Argo CD radi izvanredno dobro.
Argo CD vam omogućuje povezivanje Git repozitorija i slanje njegovog stanja u Kubernetes. Prema zadanim postavkama postoji podrška za nekoliko vrsta aplikacija: Kustomize, Helm charts, Ksonnet, goli Jsonnet ili samo direktorije s YAML/JSON manifestima.
Ovaj set će biti dovoljan za većinu korisnika, ali ne za sve. Kako bi zadovoljio potrebe svih, Argo CD ima mogućnost korištenja prilagođenog alata.
Prije svega me zanima mogućnost dodavanja podrške и , o kojima smo u cijelosti govorili u prethodnom članku.
Prije nego započnete s konfiguracijom, prvo trebate razumjeti kako točno Argo CD radi.
Za svaku dodatu aplikaciju postoje dvije faze:
- init — početna priprema prije postavljanja, svašta se može dogoditi ovdje: preuzimanje ovisnosti, raspakiranje tajni i više.
- generiranje — izravno izvršavanje naredbe za generiranje manifesta, izlaz mora biti važeći YAML tok, to je upravo ono što će se primijeniti na klaster.
Ono što je izvanredno je da Argo primjenjuje ovaj pristup na bilo koju vrstu aplikacije, uključujući Helm. To jest, u Argo CD Helm ne implementira izdanja u klaster, već se koristi samo za generiranje manifesta.
Sa svoje strane, Argo može nativno obraditi Helm udice, što mu omogućuje da ne krši logiku primjene izdanja.
QBEC
Qbec vam omogućuje prikladno opisivanje aplikacija pomoću jsonneta, a osim toga ima mogućnost renderiranja Helm grafikona, a budući da Argo CD može normalno obrađivati Helm hookove, korištenje ove značajke s Argo CD-om omogućuje vam postizanje još ispravnijih rezultata.
Za dodavanje podrške za qbec u argocd potrebne su vam dvije stvari:
- U Argo CD konfiguraciji, vaš prilagođeni dodatak i naredbe za generiranje manifesta moraju biti definirani.
- potrebne binarne datoteke moraju biti dostupne na slici argocd-repo-poslužitelj.
Prvi zadatak prilično jednostavno:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](tim init ne koristi se)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"Predlaže se dodavanje binarnih datoteka , ili koristiti :
# 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)"Sada da vidimo kako će izgledati manifest naše aplikacije:
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: trueU varijabli OKOLIŠ prosljeđujemo ime okruženja za koje trebamo generirati manifeste.
primijenimo ga i vidimo što ćemo dobiti:

Aplikacija je implementirana, super!
git-kripta
Git-crypt vam omogućuje postavljanje transparentne enkripcije za vaše spremište. To je jednostavan i siguran način za pohranu osjetljivih podataka izravno u git.
Pokazalo se da je implementacija git-crypta teža.
Teoretski bismo mogli git-crypt unlock u početnoj fazi našeg prilagođenog dodatka, ali to nije baš zgodno jer ne bi dopuštalo korištenje izvornih metoda implementacije. Na primjer, u slučaju Helma i Jsonneta, gubimo fleksibilno GUI sučelje koje nam omogućuje pojednostavljenje konfiguracije aplikacije (datoteke vrijednosti, itd.).
Zbog toga sam želio ispisati repozitorij u ranijoj fazi, tijekom kloniranja.
Budući da u ovom trenutku Argo CD ne pruža mogućnost opisivanja bilo kakvih kuka za sinkronizaciju repozitorija, morali smo zaobići ovo ograničenje lukavom skriptom ljuske koja zamjenjuje naredbu git:
#!/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 $ecNastupa Argo CD git fetch svaki put prije operacije postavljanja. To je naredba kojoj ćemo dodijeliti izvršenje git-crypt unlock za otključavanje spremišta.
za testove koje možete koristiti koja već ima sve što vam treba:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Sada moramo razmisliti o tome kako će Argo dešifrirati naša spremišta. Naime, generirajte gpg ključ za to:
$ 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'Sačuvajmo naziv ključa 8CB8B24F50B4797D za daljnje korake. Izvezite sam ključ:
$ 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 8CB8B24F50B4797DI dodajte to kao zasebnu tajnu:
# 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.yamlJedino što nam preostaje je baciti ga u kontejner argocd-repo-poslužitelj, da biste to učinili, uredite implementaciju:
$ kubectl -n argocd edit deploy/argocd-repo-serverI zamijenit ćemo postojeći gpg-ključevi glasnoća uključena projected, gdje navodimo našu tajnu:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmArgo CD automatski učitava gpg ključeve iz ovog direktorija kada se spremnik pokrene, tako da će također učitati naš privatni ključ.
provjerimo:
$ 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]Odlično, ključ je učitan! Sada samo trebamo dodati Argo CD u naš repozitorij kao suradnika i on će ga moći automatski dešifrirati u hodu.
Uvezite ključ na lokalno računalo:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemPostavimo razinu povjerenja:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Dodajmo argo kao suradnika našem projektu:
$ git-crypt add-gpg-user 8CB8B24F50B4797DSrodni linkovi:
Izvor: www.habr.com
