
Pipila ka panahon human sa pagsulat , diin ako deftly midumala sa jsonnet ug gitlab, akong naamgohan nga ang mga pipeline sa pagkatinuod maayo, apan dili kinahanglan nga komplikado ug dili kombenyente.
Sa kadaghanan nga mga kaso, gikinahanglan ang usa ka tipikal nga buluhaton: "pagmugna og YAML ug ibutang kini sa Kubernetes." Sa tinuud, kini ang gibuhat sa Argo CD nga maayo kaayo.
Gitugotan ka sa Argo CD nga makonektar ang usa ka Git repository ug ipadala ang estado niini sa Kubernetes. Sa kasagaran, adunay suporta alang sa pipila ka mga matang sa aplikasyon: Kustomize, Helm chart, Ksonnet, hubo nga Jsonnet, o mga direktoryo lang nga adunay YAML/JSON nga mga pagpakita.
Kini nga set igo na alang sa kadaghanan sa mga tiggamit, apan dili alang sa tanan. Aron matubag ang mga panginahanglan sa tanan, ang Argo CD adunay katakus sa paggamit sa custom tooling.
Una sa tanan, interesado ako sa posibilidad sa pagdugang sa suporta и , nga bug-os nga gihisgotan sa miaging artikulo.
Sa dili ka pa magsugod sa pag-configure, kinahanglan nimo nga masabtan kung giunsa ang pagtrabaho sa Argo CD.
Alang sa matag dugang nga aplikasyon, kini adunay duha ka hugna:
- init — pasiunang pagpangandam sa dili pa i-deploy, bisan unsa ang mahitabo dinhi: pag-download sa mga dependency, pag-unpack sa mga sekreto, ug uban pa.
- pagmugna - direkta nga nagpatuman sa manifest generation command, ang output kinahanglan usa ka balido nga YAML stream, mao gyud kini ang ipadapat sa cluster.
Ang katingad-an mao nga gigamit ni Argo kini nga pamaagi sa bisan unsang klase sa aplikasyon, lakip ang Helm. Kana mao, sa Argo CD Helm wala mag-deploy sa mga pagpagawas sa cluster, apan gigamit lamang aron makamugna og mga manifest.
Sa bahin niini, ang Argo makahimo sa pagproseso sa mga kaw-it sa Helm nga lumad, nga nagtugot niini nga dili makalapas sa lohika sa pagpadapat sa mga pagpagawas.
QBEC
Gitugotan ka sa Qbec nga dali nga ihulagway ang mga aplikasyon gamit ang jsonnet, ug dugang pa adunay katakus sa paghubad sa mga tsart sa Helm, ug tungod kay ang Argo CD kasagarang makaproseso sa mga kaw-it sa Helm, gamit kini nga bahin sa Argo CD nagtugot kanimo nga makab-ot ang labi pa nga husto nga mga sangputanan.
Aron madugangan ang suporta sa qbec sa argocd kinahanglan nimo ang duha ka butang:
- Sa Argo CD config, ang imong custom nga plugin ug mga sugo alang sa pagmugna og mga manifests kinahanglang ipasabot.
- ang gikinahanglan nga mga binary kinahanglang anaa sa hulagway argocd-repo-server.
Una nga buluhaton medyo simple:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](team init wala gigamit)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"Gisugyot nga idugang ang mga binary , o paggamit :
# 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)"Karon tan-awon nato kung unsa ang hitsura sa atong aplikasyon nga manifest:
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: trueSa usa ka variable KALIBOTAN gipasa namo ang ngalan sa palibot diin kinahanglan namo nga makamugna og mga manifest.
atong iaplikar ug tan-awon kon unsay atong makuha:

Ang aplikasyon na-deploy, maayo!
git-crypt
Gitugotan ka sa Git-crypt nga i-set up ang transparent encryption alang sa imong repository. Kini usa ka yano ug luwas nga paagi sa pagtipig sa sensitibo nga datos direkta sa git.
Ang pagpatuman sa git-crypt nahimong mas lisud.
Sa teoriya nga atong mahimo git-crypt unlock sa init nga yugto sa among custom nga plugin, apan kini dili kaayo sayon, tungod kay dili kini motugot sa paggamit sa lumad nga mga pamaagi sa pagdeploy. Pananglitan, sa kaso sa Helm ug Jsonnet, nawad-an kami usa ka flexible GUI interface nga nagtugot kanamo nga pasimplehon ang pagsumpo sa aplikasyon (mga file sa kantidad, ug uban pa).
Mao kini ang hinungdan nga gusto nako nga i-print ang repository sa sayo nga yugto, sa panahon sa pag-clone.
Tungod kay sa pagkakaron ang Argo CD wala maghatag og abilidad sa paghulagway sa bisan unsang mga kaw-it alang sa pag-synchronize sa repository, kinahanglan namong likayan kini nga limitasyon gamit ang usa ka tricky shell script nga mopuli sa git command:
#!/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 $ecNagpasundayag ang Argo CD git fetch matag higayon sa wala pa ang deployment operation. Kini nga sugo nga atong i-assign sa pagpatay git-crypt unlock aron maablihan ang repository.
para sa mga pagsulay nga imong magamit nga aduna na sa tanan nga imong gikinahanglan:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Karon kinahanglan namong hunahunaon kung giunsa pag-decrypt ni Argo ang among mga repositoryo. Nga mao, paghimo og gpg key alang niini:
$ 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'Atong tipigan ang yawe nga ngalan 8CB8B24F50B4797D alang sa dugang nga mga lakang. I-export ang yawe mismo:
$ 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 8CB8B24F50B4797DUg idugang kini isip usa ka bulag nga sekreto:
# 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.yamlAng nahibilin na lang namo mao ang paglabay niini sa sudlanan argocd-repo-server, aron mahimo kini, usba ang deployment:
$ kubectl -n argocd edit deploy/argocd-repo-serverUg atong pulihan ang kasamtangan gpg-mga yawe volume sa projected, diin among gipakita ang among sekreto:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmAng Argo CD awtomatik nga nagkarga sa mga gpg nga yawe gikan niini nga direktoryo sa diha nga ang sudlanan magsugod, mao nga kini usab magkarga sa atong pribadong yawe.
atong susihon:
$ 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]Maayo, ang yawe gikarga! Karon kinahanglan na lang namon nga idugang ang Argo CD sa among repository isip usa ka kolaborator ug kini mahimo nga awtomatiko nga ma-decrypt kini sa langaw.
Import ang yawe sa lokal nga kompyuter:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemAtong ibutang ang lebel sa pagsalig:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Atong idugang ang argo isip usa ka kolaborator sa atong proyekto:
$ git-crypt add-gpg-user 8CB8B24F50B4797DMga sumpay nga adunay kalabotan:
Source: www.habr.com
