
Ilang oras pagkatapos magsulat , kung saan maingat kong pinangasiwaan ang jsonnet at gitlab, napagtanto ko na ang mga pipeline ay tiyak na mabuti, ngunit hindi kinakailangang kumplikado at hindi maginhawa.
Sa karamihan ng mga kaso, ang karaniwang gawain na kinakailangan ay ang "bumuo ng YAML at ilagay ito sa Kubernetes." Ang Argo CD ay gumagawa ng isang kamangha-manghang trabaho nito.
Binibigyang-daan ka ng Argo CD na ikonekta ang isang Git repository at i-sync ang estado nito sa Kubernetes. Bilang default, sinusuportahan nito ang ilang uri ng application: Kustomize, Helm chart, Ksonnet, plain Jsonnet, o simpleng mga direktoryo na may YAML/JSON manifests.
Magiging sapat ang set na ito para sa karamihan ng mga user, ngunit hindi para sa lahat. Upang matugunan ang mga pangangailangan ng lahat, nag-aalok ang Argo CD ng custom na tooling.
Una sa lahat, interesado ako sa posibilidad na magdagdag ng suporta и , na lubusang tinalakay sa nakaraang artikulo.
Bago mo simulan ang pag-configure, kailangan mo munang maunawaan kung paano gumagana ang Argo CD.
Para sa bawat idinagdag na aplikasyon mayroon itong dalawang yugto:
- sa loob — paunang paghahanda bago ang pag-deploy, na maaaring may kinalaman sa anumang bagay: pag-download ng mga dependency, pag-unpack ng mga lihim, at higit pa.
- lumikha — direktang isinasagawa ang manifest generation command, ang output ay dapat na valid na stream ng YAML, ito mismo ang ilalapat sa cluster.
Ang kapansin-pansin ay inilalapat ng Argo ang diskarteng ito sa anumang uri ng aplikasyon, kabilang ang Helm. Ibig sabihin, sa Argo CD, hindi nagde-deploy ang Helm ng mga release sa cluster, ngunit ginagamit lang ito para sa manifest generation.
Ang Argo, sa bahagi nito, ay katutubong kayang humawak ng mga Helm hook, na nagbibigay-daan para sa pare-parehong lohika ng pagpapalabas.
QBEC
Binibigyang-daan ka ng Qbec na maginhawang ilarawan ang mga application gamit ang jsonnet, at mayroon ding kakayahang mag-render ng mga Helm chart. Dahil ang Argo CD ay maaaring humawak ng Helm hook nang maayos, ang paggamit ng feature na ito sa Argo CD ay nagbibigay-daan sa iyo upang makamit ang mas tumpak na mga resulta.
Upang magdagdag ng suporta sa qbec sa argocd, dalawang bagay ang kailangan:
- Ang iyong custom na plugin at mga command para sa pagbuo ng mga manifest ay dapat tukuyin sa Argo CD config.
- ang mga kinakailangang binary ay dapat na available sa larawan argocd-repo-server.
Ang unang gawain medyo simple:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](pangkat sa loob hindi ginagamit)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"Iminumungkahi na magdagdag ng mga binary , o gamitin :
# 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)"Ngayon tingnan natin kung ano ang magiging hitsura ng aming application 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 variable Kapaligiran Ipinapasa namin ang pangalan ng kapaligiran kung saan dapat isagawa ang manifest generation.
Ilapat natin ito at tingnan kung ano ang makukuha natin:

Ang application ay na-deploy, mahusay!
git-crypt
Binibigyang-daan ka ng Git-crypt na mag-set up ng transparent na pag-encrypt ng repositoryo. Isa itong simple at secure na paraan upang direktang mag-imbak ng sensitibong data sa Git.
Ang pagpapatupad ng git-crypt ay naging mas mahirap.
Sa teoryang magagawa natin git-crypt unlock sa init na yugto ng aming custom na plugin, ngunit hindi ito masyadong maginhawa, dahil hindi nito papayagan kaming gumamit ng mga native na paraan ng pag-deploy. Halimbawa, sa kaso ng Helm at Jsonnet, nawala ang nababaluktot na interface ng GUI na nagbibigay-daan sa amin na pasimplehin ang pagsasaayos ng application (mga value ng file, atbp.).
Ito ay tiyak kung bakit gusto kong magsagawa ng repository unsealing sa isang mas maagang yugto, sa panahon ng pag-clone.
Dahil ang Argo CD ay kasalukuyang hindi nagbibigay ng kakayahang tukuyin ang anumang mga kawit para sa pag-synchronize ng isang repositoryo, kinailangan kong lutasin ang limitasyong ito gamit ang isang matalinong shell script wrapper na pumapalit 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 $ecAng Argo CD ay gumaganap git fetch tuwing bago ang deployment operation. Itatalaga namin ang command na ito para isagawa ito. git-crypt unlock upang i-unlock ang imbakan.
para sa mga pagsubok na magagamit mo na mayroon na ng lahat ng kailangan mo:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Ngayon ay kailangan nating isipin kung paano ide-decrypt ng Argo ang ating mga repositoryo. Sa partikular, kailangan naming bumuo ng GPG key para dito:
$ 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'I-save natin ang key name 8CB8B24F50B4797D Para sa karagdagang mga hakbang, i-export natin ang susi 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 8CB8B24F50B4797DAt idagdag natin ito bilang isang hiwalay na lihim:
# 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 natitira na lang nating gawin ay itapon ito sa lalagyan. argocd-repo-server, para magawa ito, ie-edit namin ang deployment:
$ kubectl -n argocd edit deploy/argocd-repo-serverAt papalitan natin ang dati mga gpg-key volume sa projected, kung saan ipapakita namin ang aming sikreto:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmAwtomatikong nilo-load ng Argo CD ang mga gpg key mula sa direktoryong ito kapag nagsimula ang lalagyan, kaya ilo-load din nito ang aming pribadong key.
suriin natin:
$ 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]Mahusay, na-upload na ang susi! Ngayon kailangan lang naming magdagdag ng Argo CD sa aming repository bilang isang collaborator, at magagawa nitong awtomatikong i-decrypt ito sa mabilisang.
I-import ang susi sa iyong lokal na computer:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemItakda natin ang antas ng tiwala:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Idagdag natin si argo bilang isang collaborator sa ating proyekto:
$ git-crypt add-gpg-user 8CB8B24F50B4797DKaugnay na Mga Link:
Pinagmulan: www.habr.com
