
Yazdıktan bir süre sonra jsonnet ve gitlab'ı ustalıkla yönettiğim yerde, işlem hatlarının kesinlikle iyi olduğunu ancak gereksiz derecede karmaşık ve zahmetli olduğunu fark ettim.
Çoğu durumda tipik bir görev gereklidir: "YAML oluştur ve Kubernetes'e koy." Aslında Argo CD'sinin oldukça iyi yaptığı şey de bu.
Argo CD, bir Git deposuna bağlanmanıza ve durumunu Kubernetes'e göndermenize olanak tanır. Varsayılan olarak çeşitli uygulama türleri için destek mevcuttur: Özelleştirme, Helm grafikleri, Ksonnet, çıplak Jsonnet veya yalnızca YAML/JSON manifestlerini içeren dizinler.
Bu set çoğu kullanıcı için yeterli olacaktır ancak herkes için yeterli olmayacaktır. Argo CD, herkesin ihtiyaçlarını karşılamak amacıyla özel takım kullanma yeteneğine sahiptir.
Her şeyden önce, destek ekleme olasılığıyla ilgileniyorum и Bir önceki makalede tam olarak tartışılanlar.
Yapılandırmaya başlamadan önce Argo CD'nin tam olarak nasıl çalıştığını anlamanız gerekir.
Eklenen her başvuru için iki aşama vardır:
- init — Dağıtımdan önce ilk hazırlık; burada her şey olabilir: bağımlılıkların indirilmesi, sırların paketinin açılması ve daha fazlası.
- oluşturmak — manifest oluşturma komutunu doğrudan çalıştırarak, çıktının geçerli bir YAML akışı olması gerekir; kümeye tam olarak bu uygulanacaktır.
Dikkat çekici olan, Argo'nun bu yaklaşımı Helm dahil her türlü uygulamaya uygulamasıdır. Yani, Argo CD Helm'de sürümleri kümeye dağıtmaz, yalnızca bildirimler oluşturmak için kullanılır.
Argo, Helm kancalarını yerel olarak işleyebilir, bu da sürüm uygulama mantığını ihlal etmemesine olanak tanır.
QBEC
Qbec, jsonnet kullanarak uygulamaları rahatça tanımlamanıza olanak tanır ve ayrıca Helm grafiklerini oluşturma yeteneğine de sahiptir ve Argo CD normalde Helm kancalarını işleyebildiğinden, bu özelliği Argo CD ile kullanmak daha da doğru sonuçlar elde etmenizi sağlar.
argocd'a qbec desteği eklemek için iki şeye ihtiyacınız var:
- Argo CD yapılandırmasında, manifest oluşturmaya yönelik özel eklentiniz ve komutlarınız tanımlanmalıdır.
- gerekli ikili dosyalar görüntüde bulunmalıdır argocd-repo-sunucusu.
İlk görev oldukça basit:
# cm.yaml
data:
configManagementPlugins: |
- name: qbec
generate:
command: [sh, -xc]
args: ['qbec show "$ENVIRONMENT" -S --force:k8s-namespace "$ARGOCD_APP_NAMESPACE"'](takım init kullanılmamış)
$ kubectl -n argocd patch cm/argocd-cm -p "$(cat cm.yaml)"İkili dosyaları eklemek için önerilir , veya kullan :
# 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)"Şimdi uygulama manifestimizin nasıl görüneceğine bakalım:
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: truebir değişkende ÇEVRE bildirimleri oluşturmamız gereken ortamın adını aktarıyoruz.
hadi uygulayalım ve ne elde ettiğimizi görelim:

Uygulama devreye alındı, harika!
git-kript
Git-crypt, deponuz için şeffaf şifreleme ayarlamanıza olanak tanır. Hassas verileri doğrudan git'te depolamanın basit ve güvenli bir yoludur.
Git-crypt'in uygulanmasının daha zor olduğu ortaya çıktı.
Teorik olarak yapabiliriz git-crypt unlock özel eklentimizin başlangıç aşamasında, ancak yerel dağıtım yöntemlerinin kullanılmasına izin vermeyeceği için bu pek uygun değil. Örneğin, Helm ve Jsonnet durumunda, uygulama yapılandırmasını (değer dosyaları vb.) basitleştirmemize olanak tanıyan esnek bir GUI arayüzünü kaybediyoruz.
Bu yüzden klonlama sırasında depoyu daha erken bir aşamada yazdırmak istedim.
Şu anda Argo CD, depoyu senkronize etmek için herhangi bir kanca tanımlama yeteneği sağlamadığından, bu sınırlamayı git komutunun yerini alan zorlayıcı bir kabuk betiğiyle aşmak zorunda kaldık:
#!/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'si performans sergiliyor git fetch Dağıtım işleminden önce her zaman. Yürütmeyi atayacağımız bu komuttur. git-crypt unlock Deponun kilidini açmak için.
kullanabileceğiniz testler için zaten ihtiyacınız olan her şeye sahip:
$ kubectl -n argocd set image deploy/argocd-repo-server argocd-repo-server=docker.io/kvaps/argocd-git-crypt:v1.7.3Şimdi Argo'nun depolarımızın şifresini nasıl çözeceğini düşünmemiz gerekiyor. Yani bunun için bir gpg anahtarı oluşturun:
$ 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'Anahtar adını kaydedelim 8CB8B24F50B4797D Daha ileri adımlar için. Anahtarın kendisini dışa aktarın:
$ 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 8CB8B24F50B4797DVe bunu ayrı bir sır olarak ekleyin:
# 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.yamlBize kalan tek şey onu konteynere atmak argocd-repo-sunucusu, bunu yapmak için dağıtımı düzenleyin:
$ kubectl -n argocd edit deploy/argocd-repo-serverVe mevcut olanı değiştireceğiz gpg anahtarları ses açık projected, sırrımızı belirttiğimiz yer:
spec:
template:
spec:
volumes:
- name: gpg-keys
projected:
defaultMode: 420
sources:
- secret:
name: argocd-gpg-keys-secret
- configMap:
name: argocd-gpg-keys-cmArgo CD, konteyner başladığında bu dizinden gpg anahtarlarını otomatik olarak yükler, böylece özel anahtarımızı da yükleyecektir.
Hadi kontrol edelim:
$ 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]Harika, anahtar yüklendi! Artık ortak çalışan olarak Argo CD'sini depomuza eklememiz gerekiyor ve anında otomatik olarak şifresini çözebilecek.
Anahtarı yerel bilgisayara aktarın:
$ gpg --armor --export-secret 8CB8B24F50B4797D > 8CB8B24F50B4797D.pem
$ gpg --import 8CB8B24F50B4797D.pemGüven düzeyini ayarlayalım:
$ gpg --edit-key 8CB8B24F50B4797D
trust
5Argo'yu projemize işbirlikçi olarak ekleyelim:
$ git-crypt add-gpg-user 8CB8B24F50B4797Dİlgili Bağlantılar:
Kaynak: habr.com
