
Бичсэний дараа хэсэг хугацааны дараа , Би jsonnet болон gitlab-ийг чадварлаг удирдаж байхдаа дамжуулах хоолой нь мэдээж сайн, гэхдээ шаардлагагүй төвөгтэй, тохиромжгүй гэдгийг ойлгосон.
Ихэнх тохиолдолд ердийн даалгавар шаардагддаг: "YAML үүсгэж, Kubernetes-д оруулах." Үнэн хэрэгтээ энэ бол Argo CD-г гайхалтай сайн хийдэг зүйл юм.
Argo CD нь Git репозиторыг холбож, түүний төлөвийг Kubernetes руу илгээх боломжийг олгоно. Анхдагч байдлаар, хэд хэдэн төрлийн програмуудыг дэмждэг: Kustomize, Helm charts, Ksonnet, нүцгэн Jsonnet эсвэл зүгээр л YAML/JSON манифест бүхий лавлахууд.
Энэ багц нь ихэнх хэрэглэгчдэд хангалттай байх болно, гэхдээ хүн бүрт биш. Хүн бүрийн хэрэгцээг хангахын тулд Argo CD нь тусгай багаж хэрэгслийг ашиглах чадвартай.
Юуны өмнө дэмжлэг нэмэх боломжийг сонирхож байна и , өмнөх нийтлэлд бүрэн авч үзсэн.
Тохиргоог эхлүүлэхээсээ өмнө эхлээд Argo CD хэрхэн ажилладагийг ойлгох хэрэгтэй.
Нэмэгдсэн програм бүрийн хувьд энэ нь хоёр үе шаттай:
- Init — Байрлуулахын өмнөх бэлтгэл, энд юу ч тохиолдож болно: хамаарлыг татаж авах, нууцыг задлах гэх мэт.
- бий болгох — манифест үүсгэх командыг шууд гүйцэтгэх үед гаралт нь хүчинтэй YAML урсгал байх ёстой бөгөөд энэ нь кластерт яг хэрэглэгдэх зүйл юм.
Хамгийн гайхалтай нь Argo энэ аргыг Helm гэх мэт ямар ч төрлийн хэрэглээнд ашигладаг. Өөрөөр хэлбэл, Argo CD Helm нь кластерт хувилбаруудыг байршуулдаггүй бөгөөд зөвхөн манифест үүсгэхэд ашиглагддаг.
Арго нь өөрийн хувьд Helm дэгээг өөрөө боловсруулж чаддаг бөгөөд энэ нь хувилбаруудыг ашиглах логикийг зөрчихгүй байх боломжийг олгодог.
QBEC
Qbec нь jsonnet ашиглан програмуудыг хялбархан дүрслэх боломжийг олгодог бөгөөд үүнээс гадна Helm диаграмыг гаргах чадвартай бөгөөд Argo CD нь ихэвчлэн Helm дэгээг боловсруулах чадвартай байдаг тул Argo CD-тэй энэ функцийг ашиглах нь танд илүү зөв үр дүнд хүрэх боломжийг олгоно.
Argocd-д qbec дэмжлэг нэмэхийн тулд танд хоёр зүйл хэрэгтэй:
- Argo CD тохиргоонд таны захиалгат залгаас болон манифест үүсгэх командууд тодорхойлогдсон байх ёстой.
- шаардлагатай хоёртын файлууд зураг дээр байх ёстой argocd-repo-сервер.
Эхний даалгавар маш энгийн:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](баг Init ашиглаагүй)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"Хоёртын файлыг нэмэхийг зөвлөж байна , эсвэл ашиглах :
# 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)"Одоо бидний хэрэглээний манифест ямар байхыг харцгаая:
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Хувьсагчаар БАЙГАЛЬ ОРЧИН Бид манифест үүсгэх шаардлагатай орчны нэрийг дамжуулдаг.
Үүнийг хэрэгжүүлээд юу авахаа харцгаая:

Аппликешныг байршууллаа, гайхалтай!
git-crypt
Git-crypt нь таны репозиторыг ил тод шифрлэх боломжийг танд олгоно. Энэ нь нууц мэдээллийг git дээр шууд хадгалах энгийн бөгөөд найдвартай арга юм.
Git-crypt-ийг хэрэгжүүлэх нь илүү хэцүү болсон.
Онолын хувьд бид чадна git-crypt unlock Манай тусгай залгаасын эхлэлийн шатанд байгаа боловч энэ нь тийм ч тохиромжтой биш юм, учир нь энэ нь эх байршуулах аргыг ашиглахыг зөвшөөрөхгүй. Жишээлбэл, Helm болон Jsonnet-ийн хувьд бид програмын тохиргоог (утга файлууд гэх мэт) хялбарчлах боломжийг олгодог уян хатан GUI интерфэйсээ алддаг.
Тийм ч учраас би репозиторыг эрт үе шатанд, клончлох үед хэвлэхийг хүссэн юм.
Одоогийн байдлаар Argo CD нь репозиторыг синхрончлох ямар ч дэгээг дүрслэх боломжийг олгодоггүй тул бид git командыг орлох төвөгтэй бүрхүүлийн скриптээр энэ хязгаарлалтыг даван туулах шаардлагатай болсон:
#!/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 гүйцэтгэдэг git fetch байршуулах үйл ажиллагааны өмнө цаг бүр. Энэ тушаалд бид гүйцэтгэлийг хуваарилах болно git-crypt unlock агуулахын түгжээг тайлахын тулд.
ашиглаж болох туршилтуудын хувьд Танд хэрэгтэй бүх зүйл аль хэдийн байгаа:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Одоо бид Арго манай агуулахын кодыг хэрхэн тайлах талаар бодох хэрэгтэй. Тухайлбал, үүнд зориулж gpg түлхүүр үүсгэнэ үү:
$ 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'Түлхүүрийн нэрийг хадгалъя 8CB8B24F50B4797D цаашдын алхмуудын талаар. Түлхүүрийг өөрөө экспортлох:
$ 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 8CB8B24F50B4797DМөн үүнийг тусдаа нууц болгон нэмнэ үү:
# 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Бидэнд үлдсэн цорын ганц зүйл бол үүнийг саванд хаях явдал юм argocd-repo-сервер, үүнийг хийхийн тулд байршуулалтыг засварлана уу:
$ kubectl -n argocd edit deploy/argocd-repo-serverМөн бид одоо байгаа зүйлийг солих болно gpg товчлуурууд дууны хэмжээ асаалттай projected, бид нууцаа зааж өгсөн газар:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmArgo CD нь контейнер эхлэхэд энэ лавлахаас gpg түлхүүрүүдийг автоматаар ачаалдаг тул бидний хувийн түлхүүрийг мөн ачаалах болно.
шалгацгаая:
$ 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]Гайхалтай, түлхүүр ачаалагдсан! Одоо бид Argo CD-г өөрийн репозиторыг хамтрагчаар нэмэхэд л хангалттай бөгөөд энэ нь шууд шифрийг автоматаар тайлах боломжтой болно.
Түлхүүрийг дотоод компьютерт импортлох:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemИтгэлийн түвшинг тохируулъя:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Төсөлдөө хамтрагчаар argo-г нэмье:
$ git-crypt add-gpg-user 8CB8B24F50B4797DХолбоотой холбоосууд:
Эх сурвалж: www.habr.com
