
Néhány idő elteltével az első cikk megírása után A legtöbb esetben egy tipikus feladat szükséges: "YAML generálása és elhelyezése a Kubernetesben". Ezt az Argo CD nagyszerűen végzi.
Az Argo CD lehetővé teszi egy Git-repozitórium csatlakoztatását és annak állapotának szinkronizálását a Kubernetesben. Alapértelmezés szerint többféle alkalmazástípust támogat: Kustomize, Helm chartok, Ksonnet, nyers Jsonnet vagy egyszerűen YAML/JSON manifesztumok könyvtára.
A felhasználók többsége számára ez a készlet elegendő, de nem mindenki számára. Ahhoz, hogy mindenki igényeit kielégítsük, az Argo CD lehetőséget kínál a testreszabott eszközök használatára.
Elsősorban a támogatás hozzáadásának lehetősége érdekli
, amelyeket a korábbi cikkben részletesen tárgyaltunk. és Mielőtt elkezdenénk a konfigurálást, először meg kell értenünk, hogyan működik az Argo CD.
Minden hozzáadott alkalmazásnak két fázisa van:
— az indítás előtti előkészítés, itt bármi lehet: függőségek letöltése, titkok kicsomagolása és egyebek.
- init generate
- — a manifesztumok generálására vonatkozó parancs közvetlen végrehajtása, a kimenetnek érvényes YAML stream-nek kell lennie, ez az, ami a klaszterben alkalmazásra kerül. Figyelemre méltó, hogy az Argo ezt a megközelítést bármilyen alkalmazás típus számára alkalmazza, beleértve a Helm-et is. Az Argo CD a Helm segítségével nem végez deployt a klaszterbe, hanem csak a manifesztumok generálására használják.
Az Argo natívan képes kezelni a Helm-hookokat, ami lehetővé teszi a kiadási logika megőrzését.
QBEC
A Qbec lehetővé teszi, hogy kényelmesen írjuk le az alkalmazásokat jsonnet segítségével, és emellett képes a Helm chartok renderelésére is. Mivel az Argo CD rendesen kezeli a Helm-hookokat, ennek a lehetőségnek a használata az Argo CD-vel még pontosabb eredményeket eredményez.
A Qbec támogatásának hozzáadásához az argocd-hez két dolog szükséges:
az Argo CD konfigurációjában definiálva kell lennie az Ön testreszabott pluginjának és a manifesztumok generálásához szükséges parancsoknak.
- a szükséges binárisoknak elérhetőnek kell lenniük a képnél
- argocd-repo-server Az első feladat.
viszonylag egyszerűen megoldható: nem használt)
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"']$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)" init A binárisok hozzáadásához javasolt
új képet építeni, vagy használni , vagy használja :
# 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)"Most nézzük meg, hogyan fog kinézni az alkalmazásunk manifestje:
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: trueAz KÖRNYEZET itt átadjuk a környezet nevét, amelyhez a manifestek generálását végezzük.
Alkalmazzuk, és nézzük, mi született:

az alkalmazás telepítve van, nagyszerű!
git-crypt
A Git-crypt lehetővé teszi a tároló átlátható titkosításának beállítását. Ez egy egyszerű és biztonságos mód a bizalmas adatok git-ben való tárolására.
A git-crypt megvalósítása bonyolultabbnak bizonyult.
Elméletileg futtathatnánk git-crypt unlock a custom pluginunk init szakaszában, de ez nem túl kényelmes, mivel nem engedné meg a natív telepítési módszerek használatát. Például Helm és Jsonnet esetén elveszítjük a rugalmas GUI felületet, ami megkönnyíti az alkalmazás beállításait (values fájlok és egyebek).
Ezért szeretnénk a tároló kibővítését még korábbi szakaszban végezni, a klónozás során.
Mivel jelenleg az Argo CD nem biztosít lehetőséget a tároló szinkronizálásának bármilyen hook-jának leírására, egy ügyes shell script wrapperrel kellett megkerülnünk ezt a korlátozást, amely helyettesíti a git parancsot:
#!/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 $ecAz Argo CD végrehajtja git fetch minden alkalommal a telepítési művelet előtt. Ezt a parancsot fogjuk használni a git-crypt unlock tároló feloldásához.
Teszteléshez használhatod amely már mindent tartalmaz, amire szükséged van:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Most gondolnunk kell arra, hogy az Argo hogyan fogja dekódolni a tárolóinkat. Nevezetesen, generálni kell egy gpg kulcsot számára:
$ 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'Mentjük a kulcs nevét 8CB8B24F50B4797D a következő lépésekhez. Exportáljuk magát a kulcsot:
$ gpg --list-keys
gpg: FIGYELMEZTETÉS: a homdirectory tulajdonjoga nem biztonságos 'home/argocd/.gnupg'
/home/argocd/.gnupg/pubring.kbx
-------------------------------
pub rsa3072 2020-09-04 [SC]
9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid [végleges] A NEVED <A.EMAIL@example.com>
sub rsa3072 2020-09-04 [E]
$ gpg --armor --export-secret-keys 8CB8B24F50B4797DÉs hozzáadjuk külön titkosítványként:
# 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.yamlEnnyi maradt nekünk, hogy átadjuk a konténernek Az első feladat, ehhez szerkesztjük a telepítést:
$ kubectl -n argocd edit deploy/argocd-repo-serverÉs kicseréljük a meglévőt gpg-keys volume-ra projected, ahol megadjuk a titkosítványunkat:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmAz Argo CD automatikusan betölti a gpg kulcsokat ebből a könyvtárból a konténer indításakor, így betölti a privát kulcsunkat is.
Ellenőrizzük:
$ kubectl -n argocd exec -ti deploy/argocd-repo-server -- bash
$ GNUPGHOME=/app/config/gpg/keys gpg --list-secret-keys
gpg: FIGYELMEZTETÉS: a homdirectory tulajdonjoga nem biztonságos '/app/config/gpg/keys'
/app/config/gpg/keys/pubring.kbx
--------------------------------
sec rsa2048 2020-09-05 [SC] [lejár: 2021-03-04]
ED6285A3B1A50B6F1D9C955E5E8B1B16D47FFC28
uid [végleges] Anon Ymous (ArgoCD kulcs aláíró kulcs) <noreply@argoproj.io>
sec rsa3072 2020-09-03 [SC]
9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid [végleges] A NEVED <A.EMAIL@example.com>
ssb rsa3072 2020-09-03 [E]Nagyszerű, a kulcs betöltve! Most elég, ha az Argo CD-t hozzáadjuk a tárolónkhoz mint együttműködőt, és ez képes lesz automatikusan dekódolni azt.
Importáljuk a kulcsot a helyi számítógépre:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemÁllítsuk be a bizalmi szintet:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Adjunk hozzá argo-t mint együttműködőt a projektünkhöz:
$ git-crypt add-gpg-user 8CB8B24F50B4797DTovábbi források:
Forrás: habr.com
