
Nokkru eftir skrif , þar sem ég stjórnaði jsonnet og gitlab á fimlegan hátt, áttaði ég mig á því að leiðslur eru vissulega góðar, en óþarflega flóknar og óþægilegar.
Í flestum tilfellum þarf dæmigerð verkefni: „búa til YAML og setja það í Kubernetes. Reyndar er þetta það sem Argo geisladiskurinn gerir ótrúlega vel.
Argo CD gerir þér kleift að tengja Git geymslu og senda stöðu þess til Kubernetes. Sjálfgefið er að það sé stuðningur fyrir nokkrar gerðir af forritum: Kustomize, Helm charts, Ksonnet, bare Jsonnet, eða bara möppur með YAML/JSON upplýsingaskrá.
Þetta sett mun duga fyrir flesta notendur, en ekki fyrir alla. Til að mæta þörfum allra hefur Argo CD getu til að nota sérsniðin verkfæri.
Í fyrsta lagi hef ég áhuga á möguleikanum á að bæta við stuðningi и , sem fjallað var að fullu um í fyrri grein.
Áður en þú byrjar uppsetninguna þarftu fyrst að skilja nákvæmlega hvernig Argo CD virkar.
Fyrir hvert bætt forrit hefur það tvo áfanga:
- init — fyrstu undirbúningur fyrir uppsetningu, allt getur gerst hér: að hlaða niður ósjálfstæði, taka upp leyndarmál og fleira.
- mynda — með því að framkvæma skipunina til að búa til upplýsingaskrá beint, úttakið verður að vera gilt YAML straumur, þetta er nákvæmlega það sem verður notað á þyrpinguna.
Það sem er merkilegt er að Argo beitir þessari nálgun við hvers kyns forrit, þar á meðal Helm. Það er, í Argo CD sendir Helm ekki útgáfur í þyrpinguna, heldur er hann aðeins notaður til að búa til birtingarmyndir.
Fyrir sitt leyti getur Argo unnið úr Helm krókum innfæddur, sem gerir það kleift að brjóta ekki í bága við rökfræði þess að beita útgáfum.
QBEC
Qbec gerir þér kleift að lýsa forritum sem nota jsonnet á þægilegan hátt og hefur auk þess getu til að birta Helm töflur, og þar sem Argo CD getur venjulega unnið úr Helm krókum, gerir notkun þessa eiginleika með Argo CD þér kleift að ná enn réttari niðurstöðum.
Til þess að bæta qbec stuðningi við argocd þarftu tvennt:
- Í Argo CD stillingunni verður að skilgreina sérsniðna viðbótina þína og skipanir til að búa til upplýsingaskrá.
- nauðsynlegir tvíþættir verða að vera tiltækir í myndinni argocd-repo-þjónn.
Fyrsta verkefni frekar einfalt:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](lið init ónotað)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"Til að bæta við tvíundum er mælt með því , eða nota :
# 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)"Nú skulum við sjá hvernig umsóknarskráin okkar mun líta út:
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: trueÍ breytilegu UMHVERFI við sendum nafnið á umhverfinu sem við þurfum að búa til birtingarmyndir fyrir.
við skulum beita því og sjá hvað við fáum:

Forritið hefur verið dreift, frábært!
git-crypt
Git-crypt gerir þér kleift að setja upp gagnsæja dulkóðun fyrir geymsluna þína. Það er einföld og örugg leið til að geyma viðkvæm gögn beint í git.
Innleiðing git-crypt reyndist erfiðari.
Fræðilega séð gætum við gert git-crypt unlock á upphafsstigi sérsniðna viðbótarinnar okkar, en þetta er ekki mjög þægilegt, þar sem það myndi ekki leyfa notkun innfæddra dreifingaraðferða. Til dæmis, þegar um Helm og Jsonnet er að ræða, missum við sveigjanlegt GUI viðmót sem gerir okkur kleift að einfalda uppsetningu forrita (gildaskrár osfrv.).
Þess vegna vildi ég prenta geymsluna á fyrri stigum, við klónun.
Þar sem í augnablikinu býður Argo CD ekki upp á getu til að lýsa neinum krókum til að samstilla geymsluna, urðum við að komast í kringum þessa takmörkun með erfiðu skeljaforskrift sem kemur í stað git skipunarinnar:
#!/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 kemur fram git fetch í hvert skipti fyrir dreifingaraðgerðina. Það er þessi skipun sem við munum úthluta framkvæmd á git-crypt unlock til að opna geymsluna.
fyrir próf sem þú getur notað sem hefur nú þegar allt sem þú þarft:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Nú þurfum við að hugsa um hvernig Argo mun afkóða geymslurnar okkar. Búðu til gpg lykil fyrir það:
$ 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'Við skulum vista lykilnafnið 8CB8B24F50B4797D fyrir frekari skref. Flytja út lykilinn sjálfan:
$ 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 8CB8B24F50B4797DOg bættu því við sem sérstöku leyndarmáli:
# 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.yamlÞað eina sem er eftir fyrir okkur er að henda því í gáminn argocd-repo-þjónn, til að gera þetta, breyttu dreifingunni:
$ kubectl -n argocd edit deploy/argocd-repo-serverOg við munum skipta út þeim sem fyrir er gpg-lyklar bindi á projected, þar sem við tilgreinum leyndarmál okkar:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmArgo CD hleður sjálfkrafa gpg lykla úr þessari möppu þegar gámurinn byrjar, svo hann mun einnig hlaða einkalyklinum okkar.
við skulum athuga:
$ 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]Frábært, lykillinn er hlaðinn! Nú þurfum við bara að bæta Argo CD við geymsluna okkar sem samstarfsaðila og það mun geta afkóðað það sjálfkrafa á flugi.
Flytja inn lykilinn á staðbundna tölvuna:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemVið skulum stilla trauststigið:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Við skulum bæta Argo sem samstarfsaðila við verkefnið okkar:
$ git-crypt add-gpg-user 8CB8B24F50B4797DTengdir tenglar:
Heimild: www.habr.com
