Skilningur á sérsniðnum verkfærum á Argo CD

Skilningur á sérsniðnum verkfærum á Argo CD

Nokkru eftir skrif fyrstu grein, þar sem ég stjórnaði jsonnet og gitlab á fimlegan hátt, áttaði ég mig á því að leiðslur eru vissulega góðar, en óþarflega flóknar og óþægilegar.

Í flestum tilfellum þarf dæmigerð verkefni: „búa til YAML og setja það í Kubernetes. Reyndar er þetta það sem Argo geisladiskurinn gerir ótrúlega vel.

Argo CD gerir þér kleift að tengja Git geymslu og senda stöðu þess til Kubernetes. Sjálfgefið er að það sé stuðningur fyrir nokkrar gerðir af forritum: Kustomize, Helm charts, Ksonnet, bare Jsonnet, eða bara möppur með YAML/JSON upplýsingaskrá.

Þetta sett mun duga fyrir flesta notendur, en ekki fyrir alla. Til að mæta þörfum allra hefur Argo CD getu til að nota sérsniðin verkfæri.

Í fyrsta lagi hef ég áhuga á möguleikanum á að bæta við stuðningi qbec и git-crypt, sem fjallað var að fullu um í fyrri grein.

Áður en þú byrjar uppsetninguna þarftu fyrst að skilja nákvæmlega hvernig Argo CD virkar.

Fyrir hvert bætt forrit hefur það tvo áfanga:

  • init — fyrstu undirbúningur fyrir uppsetningu, allt getur gerst hér: að hlaða niður ósjálfstæði, taka upp leyndarmál og fleira.
  • mynda — með því að framkvæma skipunina til að búa til upplýsingaskrá beint, úttakið verður að vera gilt YAML straumur, þetta er nákvæmlega það sem verður notað á þyrpinguna.

Það sem er merkilegt er að Argo beitir þessari nálgun við hvers kyns forrit, þar á meðal Helm. Það er, í Argo CD sendir Helm ekki útgáfur í þyrpinguna, heldur er hann aðeins notaður til að búa til birtingarmyndir.

Fyrir sitt leyti getur Argo unnið úr Helm krókum innfæddur, sem gerir það kleift að brjóta ekki í bága við rökfræði þess að beita útgáfum.

QBEC

Qbec gerir þér kleift að lýsa forritum sem nota jsonnet á þægilegan hátt og hefur auk þess getu til að birta Helm töflur, og þar sem Argo CD getur venjulega unnið úr Helm krókum, gerir notkun þessa eiginleika með Argo CD þér kleift að ná enn réttari niðurstöðum.

Til þess að bæta qbec stuðningi við argocd þarftu tvennt:

  • Í Argo CD stillingunni verður að skilgreina sérsniðna viðbótina þína og skipanir til að búa til upplýsingaskrá.
  • nauðsynlegir tvíþættir verða að vera tiltækir í myndinni argocd-repo-þjónn.

Fyrsta verkefni er verið að ákveða frekar einfalt:

# cm.yaml
data:
  configManagementPlugins: |
    - name: qbec
      generate:
        command: [sh, -xc]
        args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"']

(lið init ónotað)

$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"

Til að bæta við tvíundum er mælt með því safna nýrri mynd, eða nota init gámabragð:

# 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)"

Nú skulum við sjá hvernig umsóknarskráin okkar mun líta út:

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

Í breytilegu UMHVERFI við sendum nafnið á umhverfinu sem við þurfum að búa til birtingarmyndir fyrir.

við skulum beita því og sjá hvað við fáum:

Skilningur á sérsniðnum verkfærum á Argo CD

Forritið hefur verið dreift, frábært!

git-crypt

Git-crypt gerir þér kleift að setja upp gagnsæja dulkóðun fyrir geymsluna þína. Það er einföld og örugg leið til að geyma viðkvæm gögn beint í git.

Innleiðing git-crypt reyndist erfiðari.

Fræðilega séð gætum við gert git-crypt unlock á upphafsstigi sérsniðna viðbótarinnar okkar, en þetta er ekki mjög þægilegt, þar sem það myndi ekki leyfa notkun innfæddra dreifingaraðferða. Til dæmis, þegar um Helm og Jsonnet er að ræða, missum við sveigjanlegt GUI viðmót sem gerir okkur kleift að einfalda uppsetningu forrita (gildaskrár osfrv.).

Þess vegna vildi ég prenta geymsluna á fyrri stigum, við klónun.

Þar sem í augnablikinu býður Argo CD ekki upp á getu til að lýsa neinum krókum til að samstilla geymsluna, urðum við að komast í kringum þessa takmörkun með erfiðu skeljaforskrift sem kemur í stað git skipunarinnar:

#!/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 kemur fram git fetch í hvert skipti fyrir dreifingaraðgerðina. Það er þessi skipun sem við munum úthluta framkvæmd á git-crypt unlock til að opna geymsluna.

fyrir próf sem þú getur notað Docker myndin mín sem hefur nú þegar allt sem þú þarft:

$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3

Nú þurfum við að hugsa um hvernig Argo mun afkóða geymslurnar okkar. Búðu til gpg lykil fyrir það:

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

Við skulum vista lykilnafnið 8CB8B24F50B4797D fyrir frekari skref. Flytja út lykilinn sjálfan:

$ 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

Og bættu því við sem sérstöku leyndarmáli:

# 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

Það eina sem er eftir fyrir okkur er að henda því í gáminn argocd-repo-þjónn, til að gera þetta, breyttu dreifingunni:

$ kubectl -n argocd edit deploy/argocd-repo-server

Og við munum skipta út þeim sem fyrir er gpg-lyklar bindi á projected, þar sem við tilgreinum leyndarmál okkar:

   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 hleður sjálfkrafa gpg lykla úr þessari möppu þegar gámurinn byrjar, svo hann mun einnig hlaða einkalyklinum okkar.

við skulum athuga:

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

Frábært, lykillinn er hlaðinn! Nú þurfum við bara að bæta Argo CD við geymsluna okkar sem samstarfsaðila og það mun geta afkóðað það sjálfkrafa á flugi.

Flytja inn lykilinn á staðbundna tölvuna:

$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pem

Við skulum stilla trauststigið:

$ gpg --edit-key 8CB8B24F50B4797D
trust
5

Við skulum bæta Argo sem samstarfsaðila við verkefnið okkar:

$ git-crypt add-gpg-user 8CB8B24F50B4797D

Tengdir tenglar:

Heimild: www.habr.com