Team Kubernetes aaS Mail.ru-tikohar labur bat itzuli zuen Helm sekretuak eguneratzean automatikoki sortzeari buruz. Artikuluaren egilearen testu bat da honakoa: Intoware-ko zuzendari teknikoa, SaaS soluzioak garatzen dituen enpresa.
Ontziak freskoak dira. Hasieran edukiontziaren aurkakoa nintzen (lotsa ematen dit aitortzeak), baina orain teknologia honen erabilera guztiz onartzen dut. Hau irakurtzen ari bazara, espero dugu Docker-eko itsasoetan arrakastaz nabigatu izana, Kubernetesen onurak konturatu eta Helm-ekin bizitza asko erraztu duzula.
Hala ere, argi dago gauza batzuk behar baino zailagoak direla.
Nola sortu automatikoki sekretuak eguneratzean?
Kubernetes sekretua zure kodean erabili nahi dituzun gako/balio bikoteak dituen baliabidea da. Hauek izan daitezke datu-basearen konexio-kateak, posta elektronikoko pasahitzak eta abar. Sekretuak erabiliz, kodearen eta ezarpenen arteko bereizketa argia sortzen duzu, eta, beraz, inplementazio desberdinak erraz pertsonaliza ditzakezu kode-oinarria aldatu gabe.
Egoera arrunta da bi modulu gako komun bat erabiliz komunikatu behar direnean. Klusterretik kanpoko inork ez luke gako hau ezagutu behar, kluster barruko bakarkako komunikaziorako pentsatuta baitago.
Kubernetes sekretu sinple bat values.yml-ko balioak erabiliz
Baina demagun ez duzula zure sekretua balioen fitxategian zehaztu nahi.
Aukera asko daude inplementazioak partekatutako gako bat behar duenean, instalazioan sortu behar dena.
Goiko modulutik modulu komunikazio adibidean, ez da desiragarria inplementaziotik kanpo sekretua partekatzea. Horregatik, oso desiragarria da Helm-ek sekretu bat automatikoki sortzeko mekanismoak izatea, zuzenean zehaztu beharrik gabe.
Amuak
Hook-ek instalazio-prozesuan zehar kode zehatzetan exekutatzeko aukera ematen dute. Baliteke lehen instalazioaren ondoren exekutatu behar den konfigurazio-lan bat egotea, edo agian garbiketa bat egin behar da edozein eguneraketa egin aurretik.
Instalazioan sortutako giltza gehitzeko dugun arazoa konpontzeko, instalazioaren aurretiko kako egokiak dira. Baina bada harrapaketa bat: ezin duzu sekretua automatikoki sortu behin eguneraketa batean. Hooks eguneraketa guztietan funtzionatuko du.
Zure sekretua sortu baduzu eta zure lehen instalazioa oraindik gertatu ez bada, utzi irakurtzeari, aurrez instalatzeko kakoa oso ondo funtzionatuko dizu.
Baina sekretua eguneratze baten parte bada (agian instalazioan egon ez zen funtzio berri bat), orduan pena da behin bakarrik funtzionatzen duen aurre-instalazioko kakorik ezin izatea.
funtzio
Helm funtzioek hainbat script-elementu gehi ditzakezu zure inplementazio-scriptei.
apiVersion: v1
kind: Secret
metadata:
name: my-super-awesome-api-key
type: Opaque
stringData:
apiKey: {{ uuidv4 | quote }} #Generate a new UUID and quote it
Adibide honek erakusten du apiKey sekretuaren balioa instalazioan sortutako UUID berria izango dela.
Helm-ek GO txantiloiaren ezaugarri harrigarriak eta Sprig-en eginbideen liburutegia inplementazio pertsonalizatuak sortzeko aprobetxatzen dituen funtzio liburutegi benetan zabala du.
Bilaketa funtzioa
Helm 3.1-en gehitua Bilaketa funtzioa, lehendik dagoen inplementazioa eskatzeko eta:
baliabideen existentzia egiaztatu;
lehendik dagoen baliabide baten balioa itzuli geroago erabiltzeko.
Bi gaitasun hauek erabiliz, dinamikoki sortutako sekretu bakarra sor dezakegu!
# 1. Запросить существование секрета и вернуть в переменной $secret
{{- $secret := (lookup "v1" "Secret" .Release.Namespace "some-awesome-secret" -}}
apiVersion: v1
kind: Secret
metadata:
name: some-awesome-secret
type: Opaque
# 2. Если секрет существует, взять его значение как apiKey (секрет использует кодирование Base64, так что используйте ключ "data")
{{ if $secret -}}
data:
apiKey: {{ $secret.data.apiKey }}
# 3. Если секрет не существует — создать его (в этот раз используйте "stringData", так как будет обычное значение)!
{{ else -}}
stringData:
apiKey: {{ uuidv4 | quote }}
{{ end }}
Zerbitzariari eguneratze berri bat aplikatzen zaion bakoitzean, Helm-ek balio sekretu berri bat sortuko du (oraindik sekreturik ez badago) edo lehendik dagoen balioa berrerabiliko du.