
Чанде пас аз навиштан , ки ман jsonnet ва gitlab-ро моҳирона идора мекардам, ман фаҳмидам, ки қубурҳо албатта хубанд, аммо нолозим мураккаб ва нороҳатанд.
Дар аксари мавридҳо, як вазифаи муқаррарӣ талаб карда мешавад: "YaML тавлид кунед ва онро дар Кубернетес ҷойгир кунед." Дар асл, ин чизест, ки CD Argo ба таври назаррас хуб кор мекунад.
CD Argo ба шумо имкон медиҳад, ки анбори Git-ро пайваст кунед ва ҳолати онро ба Kubernetes фиристед. Бо нобаёнӣ, якчанд намуди барномаҳо дастгирӣ карда мешаванд: Kustomize, Helm charts, Ksonnet, бараҳна Jsonnet ё танҳо директорияҳо бо манифестҳои YAML/JSON.
Ин маҷмӯа барои аксари корбарон кофӣ хоҳад буд, аммо на барои ҳама. Барои қонеъ кардани ниёзҳои ҳама, CD Argo дорои қобилияти истифодаи асбобҳои фармоишӣ мебошад.
Пеш аз ҳама, ман ба имкони илова кардани дастгирӣ таваҷҷӯҳ дорам и , ки дар маколаи гузашта пурра мухокима карда шуда буданд.
Пеш аз оғози конфигуратсия, шумо аввал бояд фаҳмед, ки чӣ тавр CD Argo кор мекунад.
Барои ҳар як замимаи иловашуда он ду марҳила дорад:
- ташаббус — омодагии аввалия пеш аз ҷойгиркунӣ, дар ин ҷо ҳама чиз рӯй дода метавонад: зеркашии вобастагӣ, кушодани асрор ва ғайра.
- ҳосил кардан — бевосита иҷро кардани фармони тавлиди манифест, натиҷа бояд ҷараёни дурусти YAML бошад, маҳз ҳамон чизест, ки ба кластер татбиқ карда мешавад.
Чизи аҷиб он аст, ки Argo ин равишро ба ҳама намуди барномаҳо, аз ҷумла Helm татбиқ мекунад. Яъне, дар Argo CD Helm релизҳоро ба кластер ҷойгир намекунад, балки танҳо барои тавлиди манифестҳо истифода мешавад.
Дар навбати худ, Argo метавонад қалмоқҳои Helm-ро ба таври худкор коркард кунад, ки ба он имкон медиҳад мантиқи татбиқи релизҳоро вайрон накунад.
QBEC
Qbec ба шумо имкон медиҳад, ки барномаҳоро бо истифода аз jsonnet ба таври қулай тавсиф кунед ва илова бар ин, қобилияти намоиш додани диаграммаҳои Helm дорад ва азбаски Argo CD метавонад одатан қалмоқҳои Helm-ро коркард кунад, бо истифода аз ин хусусият бо CD Argo ба шумо имкон медиҳад, ки натиҷаҳои боз ҳам дурусттар ба даст оред.
Барои илова кардани дастгирии qbec ба argocd ба шумо ду чиз лозим аст:
- Дар конфигуратсияи CD Argo, плагини фармоишии шумо ва фармонҳо барои тавлиди манифестҳо бояд муайян карда шаванд.
- бинарҳои зарурӣ бояд дар тасвир дастрас бошанд argocd-repo-сервер.
Вазифаи аввал хеле содда:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](дастаи ташаббус истифода намешавад)
$ 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 $ecCD Argo иҷро мекунад 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Ҳоло мо бояд дар бораи он фикр кунем, ки чӣ гуна Argo анборҳои моро рамзкушоӣ мекунад. Яъне, барои он калиди 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-cmCD Argo ба таври худкор калидҳои 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]Аҷоиб, калид бор карда шуд! Ҳоло ба мо танҳо лозим аст, ки CD-и Argo-ро ба анбори худ ҳамчун ҳамкор илова кунем ва он метавонад ба таври худкор шифри онро дар парвоз кушояд.
Калидро ба компютери маҳаллӣ ворид кунед:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemБиёед сатҳи эътимодро муқаррар кунем:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Биёед argo-ро ҳамчун шарик ба лоиҳаи худ илова кунем:
$ git-crypt add-gpg-user 8CB8B24F50B4797DИстинодҳои марбут:
Манбаъ: will.com
