
Pāris laika pēc raksta uzrakstīšanas , kur es veiksmīgi strādāju ar jsonnet un GitLab, es sapratu, ka darbplūsmas ir noteikti labas, bet pārāk sarežģītas un neērtas.
Lielākajā daļā gadījumu ir nepieciešama tipiska uzdevuma risinājums: "ģenerēt YAML un novietot to Kubernetes". Ar ko Argo CD lieliski tiek galā.
Argo CD ļauj pievienot Git repozitoriju un sinhronizēt tā stāvokli Kubernetes. Noklusējumā ir atbalsts vairākiem lietojumprogrammu veidiem: Kustomize, Helm charti, Ksonnet, neapstrādāts Jsonnet vai vienkārši direktorijas ar YAML/JSON manifestiem.
Lielākajai daļai šī komplekta lietotāju tas būs pietiekami, bet ne visiem. Lai apmierinātu visu prasības, Argo CD ir iespēja izmantot pielāgotus rīkus.
Vispirms interesē iespēja pievienot atbalstu un , kuri tika plaši aplūkoti iepriekšējā rakstā.
Pirms sākt konfigurāciju, vispirms jāapgūst, kā tieši Argo CD darbojas.
Katram pievienotajam lietojumam ir divas fāzes:
- init — sākotnējā sagatavošana pirms izvietošanas, šeit var būt viss, kas nepieciešams: atkarību lejupielāde, slepenu izpakošana un citi procesi.
- generate — tieši komandas izpilde manifestu ģenerēšanai, izejai jābūt derīgai YAML straumei, tieši tas tiks piemērots klasterim.
Jāpiezīmē, ka Argo izmanto šo pieeju jebkura veida lietojumiem, tostarp Helm. Tātad Argo CD Helm nepiedalās relīžu izvietošanā klasterī, to izmanto tikai manifestu ģenerēšanai.
No savas puses Argo prot dabiski apstrādāt Helm hookus, kas ļauj nesabojāt relīžu piemērošanas loģiku.
QBEC
Qbec ļauj ērti aprakstīt lietojumus, izmantojot jsonnet, un, turklāt tam ir iespēja renderēt Helm chartus, un tā kā Argo CD spēj normāli apstrādāt Helm hookus, šīs iespējas izmantošana ar Argo CD nodrošina vēl precīzākus rezultātus.
Lai pievienotu qbec atbalstu argocd, ir nepieciešamas divas lietas:
- Argo CD konfigurācijā jābūt noteiktam jūsu pielāgotajam pluginam un komandām manifestu ģenerēšanai.
- Nepieciešamajiem binārajām programmām jābūt pieejamām attēlā argocd-repo-server.
Pirmā uzdevuma ir diezgan vienkārša:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](komanda init nav izmantota)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"Lai pievienotu bināros failus, tiek piedāvāts , vai izmantot :
# 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)"Tagad apskatīsim, kā izskatīsies mūsu lietojuma manifests:
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: trueMainīgajā VIDES mēs nododam vides nosaukumu, kuram ir jāveic manifestu ģenerēšana.
piemērosim un paskatīsimies, ko esam ieguvuši:

lieta ir uzstādīta, lieliski!
git-crypt
Git-crypt ļauj iestatīt caurspīdīgu šifrēšanu repozitorijā. Tas ir vienkāršs un drošs veids, kā glabāt konfidenciālus datus tieši git.
Ar git-crypt ieviešanu izrādījās sarežģītāk.
Teorētiski mēs varētu izpildīt git-crypt unlock mūsu custom pluginnas init posmā, bet tas nav ļoti ērti, jo neļautu izmantot dabiskās izvietošanas metodes. Piemēram, Helm un Jsonnet gadījumā mēs zaudējam elastīgu GUI interfeisu, kas ļauj vienkāršot lietojuma konfigurāciju (values faili un citi).
Tāpēc mēs vēlējāmies izdrukāt repozitoriju vēl agrīnāk, klonēšanas laikā.
Tā kā šobrīd Argo CD nesniedz iespēju aprakstīt nekādas sinhronizācijas repozitorija āķus, nācās apiet šo ierobežojumu ar viltīgu shell skriptu-wrapper, kas aizvieto git komandu:
#!/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 izpilda git fetch katru reizi pirms izvietošanas operācijas. Tieši uz šo komandu mēs piesaistīsim izpildi git-crypt unlock repotā atbloķēšanai.
tests varat izmantot kurā jau ir viss nepieciešamais:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Tagad mums jādomā par to, kā Argo atšifrēs mūsu repozitorijas. Proti, jāģenerē gpg atslēga tam:
$ kubectl exec -ti deploy/argocd-repo-server -- bash
$ printf "%sn"
"%no-protection"
"Key-Type: default"
"Subkey-Type: default"
"Name-Real: JŪSU VĀRDS"
"Name-Email: JŪSU 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'Saglabāsim atslēgas nosaukumu 8CB8B24F50B4797D lai veiktu tālākos soļus. Eksportējam pašu atslēgu:
$ gpg --list-keys
gpg: BRĪDINĀJUMS: nedroša īpašumtiesība uz homedir '⁄home⁄argocd⁄.gnupg'
⁄home⁄argocd⁄.gnupg⁄pubring.kbx
-------------------------------
pub rsa3072 2020-09-04 [SC]
9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid [ultimate] JŪSU VĀRDS <JŪSU E-PASTS@example.com>
sub rsa3072 2020-09-04 [E]
$ gpg --armor --export-secret-keys 8CB8B24F50B4797DUn pievienosim to kā atsevišķu noslēpumu:
# 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.yamlVienīgais, kas mums palicis, ir eksportēt to uz konteineru argocd-repo-server, tādēļ rediģēsim izvietošanu:
$ kubectl -n argocd edit deploy⁄argocd-repo-serverUn aizstāsim esošo gpg-atslēgu apjomu ar projekciju, kurā norādīsim mūsu noslēpumu:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmArgo CD automātiski iekļaujas gpg-atslēgās no šīs direktorijas, palaižot konteineru, tādējādi tas ielādēs arī mūsu privāto atslēgu.
pārbaudām:
$ kubectl -n argocd exec -ti deploy⁄argocd-repo-server -- bash
$ GNUPGHOME=⁄app⁄config⁄gpg⁄keys gpg --list-secret-keys
gpg: BRĪDINĀJUMS: nedroša īpašumtiesība uz homedir '⁄app⁄config⁄gpg⁄keys'
⁄app⁄config⁄gpg⁄keys⁄pubring.kbx
--------------------------------
sec rsa2048 2020-09-05 [SC] [beidzas: 2021-03-04]
ED6285A3B1A50B6F1D9C955E5E8B1B16D47FFC28
uid [ultimate] Anon Ymous (ArgoCD atslēgu parakstīšanas atslēga) <noreply@argoproj.io>
sec rsa3072 2020-09-03 [SC]
9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D
uid [ultimate] JŪSU VĀRDS <JŪSU E-PASTS@example.com>
ssb rsa3072 2020-09-03 [E]Lieliski, atslēga ir ielādēta! Tagad mums vienkārši jāpievieno Argo CD mūsu noliktavā kā kolaborators, un tas varēs automātiski to atšifrēt.
Importējam atslēgu lokālajā datorā:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemNodrošinām uzticības līmeni:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Pievienojam argo kā kolaboratoru mūsu projektā:
$ git-crypt add-gpg-user 8CB8B24F50B4797DSaites uz tēmu:
Avots: habr.com
