Argo CD дээрх Custom Tooling-ийг ойлгох

Argo CD дээрх Custom Tooling-ийг ойлгох

Бичсэний дараа хэсэг хугацааны дараа анхны нийтлэл, Би jsonnet болон gitlab-ийг чадварлаг удирдаж байхдаа дамжуулах хоолой нь мэдээж сайн, гэхдээ шаардлагагүй төвөгтэй, тохиромжгүй гэдгийг ойлгосон.

Ихэнх тохиолдолд ердийн даалгавар шаардагддаг: "YAML үүсгэж, Kubernetes-д оруулах." Үнэн хэрэгтээ энэ бол Argo CD-г гайхалтай сайн хийдэг зүйл юм.

Argo CD нь Git репозиторыг холбож, түүний төлөвийг Kubernetes руу илгээх боломжийг олгоно. Анхдагч байдлаар, хэд хэдэн төрлийн програмуудыг дэмждэг: Kustomize, Helm charts, Ksonnet, нүцгэн Jsonnet эсвэл зүгээр л YAML/JSON манифест бүхий лавлахууд.

Энэ багц нь ихэнх хэрэглэгчдэд хангалттай байх болно, гэхдээ хүн бүрт биш. Хүн бүрийн хэрэгцээг хангахын тулд Argo CD нь тусгай багаж хэрэгслийг ашиглах чадвартай.

Юуны өмнө дэмжлэг нэмэх боломжийг сонирхож байна qbec и git-crypt, өмнөх нийтлэлд бүрэн авч үзсэн.

Тохиргоог эхлүүлэхээсээ өмнө эхлээд 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)"

Хоёртын файлыг нэмэхийг зөвлөж байна шинэ зураг цуглуул, эсвэл ашиглах init контейнер трик:

# 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

Хувьсагчаар БАЙГАЛЬ ОРЧИН Бид манифест үүсгэх шаардлагатай орчны нэрийг дамжуулдаг.

Үүнийг хэрэгжүүлээд юу авахаа харцгаая:

Argo CD дээрх Custom Tooling-ийг ойлгох

Аппликешныг байршууллаа, гайхалтай!

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 $ec

Argo 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-cm

Argo 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

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster