ื™ืฆื™ืจื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืกื•ื“ื•ืช ื‘ื”ืœื

ื™ืฆื™ืจื” ืื•ื˜ื•ืžื˜ื™ืช ืฉืœ ืกื•ื“ื•ืช ื‘ื”ืœื

ืงื‘ื•ืฆื” Kubernetes aaS ืž-Mail.ru ืชืจื’ื ื”ืขืจื” ืงืฆืจื” ื›ื™ืฆื“ ืœื™ืฆื•ืจ ืื•ื˜ื•ืžื˜ื™ืช ืกื•ื“ื•ืช Helm ื‘ืขืช ืขื“ื›ื•ืŸ. ืœื”ืœืŸ ื˜ืงืกื˜ ืฉืœ ื›ื•ืชื‘ ื”ืžืืžืจ - ืžื ื”ืœ ื˜ื›ื ื™ ืฉืœ ื—ื‘ืจืช Intoware ื”ืžืคืชื—ืช ืคืชืจื•ื ื•ืช SaaS.

ืžื™ื›ืœื™ื ืžื’ื ื™ื‘ื™ื. ื‘ื”ืชื—ืœื” ื”ื™ื™ืชื™ ื ื’ื“ ืžื™ื›ืœ (ืื ื™ ื ื‘ื•ืš ืœื”ื•ื“ื•ืช ื‘ื–ื”), ืื‘ืœ ืขื›ืฉื™ื• ืื ื™ ืชื•ืžืš ืœื—ืœื•ื˜ื™ืŸ ื‘ืฉื™ืžื•ืฉ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื–ื•. ืื ืืชื” ืงื•ืจื ืืช ื–ื”, ืžืงื•ื•ื” ืฉื ื™ื•ื˜ืช ื‘ื”ืฆืœื—ื” ื‘ื™ื ืฉืœ Docker, ื”ื‘ื ืช ืืช ื”ื™ืชืจื•ื ื•ืช ืฉืœ Kubernetes, ื•ื”ืคื›ืช ืืช ื—ื™ื™ืš ืœื”ืจื‘ื” ื™ื•ืชืจ ืงืœื™ื ืขื Helm.

ืขื ื–ืืช, ื‘ืจื•ืจ ืฉื—ืœืง ืžื”ื“ื‘ืจื™ื ืงืฉื™ื ื™ื•ืชืจ ืžืžื” ืฉื”ื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช.

ื›ื™ืฆื“ ืœื™ืฆื•ืจ ืกื•ื“ื•ืช ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ื‘ืขืช ืขื“ื›ื•ืŸ?

ืกื•ื“ Kubernetes ื”ื•ื ืžืฉืื‘ ื”ืžื›ื™ืœ ืฆืžื“ื™ ืžืคืชื—/ืขืจืš ืฉื‘ื”ื ื‘ืจืฆื•ื ืš ืœื”ืฉืชืžืฉ ื‘ืงื•ื“ ืฉืœืš. ืืœื” ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืžื—ืจื•ื–ื•ืช ื—ื™ื‘ื•ืจ ืœืžืกื“ ื ืชื•ื ื™ื, ืกื™ืกืžืื•ืช ื“ื•ืืจ ืืœืงื˜ืจื•ื ื™ ื•ื›ืŸ ื”ืœืื”. ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ืกื•ื“ื•ืช, ืืชื” ื™ื•ืฆืจ ื”ืคืจื“ื” ื‘ืจื•ืจื” ื‘ื™ืŸ ืงื•ื“ ื•ื”ื’ื“ืจื•ืช, ื”ืžืืคืฉืจ ืœืš ืœื”ืชืื™ื ืื™ืฉื™ืช ื‘ืงืœื•ืช ืคืจื™ืกื•ืช ืฉื•ื ื•ืช ืžื‘ืœื™ ืœืฉื ื•ืช ืืช ื‘ืกื™ืก ื”ืงื•ื“.

ืžืฆื‘ ืฉื›ื™ื— ื”ื•ื ื›ืืฉืจ ืฉื ื™ ืžื•ื“ื•ืœื™ื ื—ื™ื™ื‘ื™ื ืœืชืงืฉืจ ื‘ืืžืฆืขื•ืช ืžืคืชื— ืžืฉื•ืชืฃ. ืืฃ ืื—ื“ ืžื—ื•ืฅ ืœืืฉื›ื•ืœ ืฆืจื™ืš ืœื“ืขืช ืืช ื”ืžืคืชื— ื”ื–ื”, ืžื›ื™ื•ื•ืŸ ืฉื”ื•ื ืžื™ื•ืขื“ ืœืชืงืฉื•ืจืช ืื—ื“ ืœืื—ื“ ื‘ืชื•ืš ื”ืืฉื›ื•ืœ.

ืขื•ืฉื” ืกื•ื“ื•ืช

ื‘ื“ืจืš ื›ืœืœ, ื›ื“ื™ ืœื™ืฆื•ืจ ืกื•ื“ ื‘ื”ืœื ืืชื” ืฆืจื™ืš:

  • ืชืืจ ืืช ื”ืกื•ื“ ื‘ืงื•ื‘ืฅ ื”ืขืจื›ื™ื;
  • ืœื”ื’ื“ื™ืจ ืื•ืชื• ืžื—ื“ืฉ ื‘ืžื”ืœืš ื”ืคืจื™ืกื”;
  • ืขื™ื™ืŸ ื‘ื• ื‘ืชื•ืš ื”ืคืจื™ืกื”/ืชืจืžื™ืœ;
  • ... ืจื•ื•ื—!

ื‘ื“ืจืš ื›ืœืœ ื–ื” ื ืจืื” ื‘ืขืจืš ื›ืš:

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ .Values.MyApiKeySecret | quote }}

ืกื•ื“ Kubernetes ืคืฉื•ื˜ ื‘ืืžืฆืขื•ืช ืขืจื›ื™ื ืž-values.yml

ืื‘ืœ ื ื ื™ื— ืฉืืชื” ืœื ืจื•ืฆื” ืœืฆื™ื™ืŸ ืืช ื”ืกื•ื“ ืฉืœืš ื‘ืงื•ื‘ืฅ ื”ืขืจื›ื™ื.

ื™ืฉื ืŸ ืืคืฉืจื•ื™ื•ืช ืจื‘ื•ืช ื›ืืฉืจ ื”ืคืจื™ืกื” ื“ื•ืจืฉืช ืžืคืชื— ืžืฉื•ืชืฃ, ืืฉืจ ื—ื™ื™ื‘ ืœื”ื™ื•ื•ืฆืจ ื‘ืžื”ืœืš ื”ื”ืชืงื ื”.

ื‘ื“ื•ื’ืžื” ืฉืœ ืชืงืฉื•ืจืช ืžื•ื“ื•ืœ ืœืžื•ื“ื•ืœ ืœืขื™ืœ, ืœื ืจืฆื•ื™ ืœืฉืชืฃ ืืช ื”ืกื•ื“ ืžื—ื•ืฅ ืœืคืจื™ืกื”. ืœื›ืŸ, ืจืฆื•ื™ ืžืื•ื“ ืฉืœื”ืœื ื™ื”ื™ื• ืžื ื’ื ื•ื ื™ื ืœื™ืฆื•ืจ ืกื•ื“ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืžื‘ืœื™ ืœืฆื™ื™ืŸ ืื•ืชื• ื™ืฉื™ืจื•ืช.

ื•ื•ื™ื

Hooks ืžืืคืฉืจื™ื ืœืš ืœื”ืจื™ืฅ ืงื•ื“ ื‘ืžืงื•ืžื•ืช ืกืคืฆื™ืคื™ื™ื ื‘ืžื”ืœืš ืชื”ืœื™ืš ื”ื”ืชืงื ื”. ื™ื™ืชื›ืŸ ืฉื™ืฉ ืขื‘ื•ื“ืช ืชืฆื•ืจื” ืฉืฆืจื™ืš ืœื”ืคืขื™ืœ ืœืื—ืจ ื”ื”ืชืงื ื” ื”ืจืืฉื•ื ื”, ืื• ืื•ืœื™ ืฆืจื™ืš ืœื‘ืฆืข ื ื™ืงื•ื™ ืœืคื ื™ ื‘ื™ืฆื•ืข ืขื“ื›ื•ืŸ ื›ืœืฉื”ื•.

ื›ื“ื™ ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ืฉืœื ื• ืฉืœ ื”ื•ืกืคืช ืžืคืชื— ืฉื ื•ืฆืจ ื‘ืžื”ืœืš ื”ื”ืชืงื ื”, ื•ื•ื™ ื˜ืจื•ื ื”ืชืงื ื” ื”ื ืื™ื“ื™ืืœื™ื™ื. ืื‘ืœ ื™ืฉ ืžืœื›ื•ื“: ืืชื” ืœื ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืืช ื”ืกื•ื“ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืคืขื ืื—ืช ื‘ืขื“ื›ื•ืŸ. ื”ื•ืงืก ื™ืขื‘ื“ื• ืขืœ ื›ืœ ืขื“ื›ื•ืŸ.

ืื ื™ืฆืจืช ืืช ื”ืกื•ื“ ืฉืœืš ื•ื”ื”ืชืงื ื” ื”ืจืืฉื•ื ื” ืฉืœืš ืขื“ื™ื™ืŸ ืœื ื”ืชืจื—ืฉื” ืื– ืชืคืกื™ืง ืœืงืจื•ื, ื•ื• ื”ื”ืชืงื ื” ืžืจืืฉ ื™ืขื‘ื•ื“ ืœืš ืžืฆื•ื™ืŸ.

ืื‘ืœ ืื ื”ืกื•ื“ ื”ื•ื ื—ืœืง ืžืขื“ื›ื•ืŸ (ืื•ืœื™ ืชื›ื•ื ื” ื—ื“ืฉื” ืฉืœื ื”ื™ื™ืชื” ืฉื ื‘ืžื”ืœืš ื”ื”ืชืงื ื”), ืื– ื—ื‘ืœ ืฉืื™ ืืคืฉืจ ืœื™ืฆื•ืจ ื•ื• ื˜ืจื•ื ื”ืชืงื ื” ืฉืขื•ื‘ื“ ืจืง ืคืขื ืื—ืช.

ืคื•ื ืงืฆื™ื•ืช

ืคื•ื ืงืฆื™ื•ืช ื”ื”ื’ื” ืžืืคืฉืจื•ืช ืœืš ืœื”ื•ืกื™ืฃ ืจื›ื™ื‘ื™ ืกืงืจื™ืคื˜ื™ื ืฉื•ื ื™ื ืœืชืกืจื™ื˜ื™ ื”ืคืจื™ืกื” ืฉืœืš.

apiVersion: v1
kind: Secret
metadata:
  name: my-super-awesome-api-key
type: Opaque
stringData:
  apiKey: {{ uuidv4 | quote }} #Generate a new UUID and quote it

ื“ื•ื’ืžื” ื–ื• ืžืจืื” ืฉื”ืขืจืš ืฉืœ ืกื•ื“ apiKey ื™ื”ื™ื” ื”-UUID ื”ื—ื“ืฉ ืฉื ื•ืฆืจ ื‘ืžื”ืœืš ื”ื”ืชืงื ื”.

Helm ื›ื•ืœืœ ืกืคืจื™ื™ืช ืชื›ื•ื ื•ืช ื ืจื—ื‘ืช ื‘ืืžืช ื”ืžืžื ืคืช ืืช ื”ืชื›ื•ื ื•ืช ื”ืžื“ื”ื™ืžื•ืช ืฉืœ ืชื‘ื ื™ืช GO ื•ืืช ืกืคืจื™ื™ืช ื”ืชื›ื•ื ื•ืช ืฉืœ Sprig ื›ื“ื™ ืœื™ืฆื•ืจ ืคืจื™ืกื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช.

ืคื•ื ืงืฆื™ื™ืช ื—ื™ืคื•ืฉ

ื ื•ืกืฃ ื‘- Helm 3.1 ืคื•ื ืงืฆื™ื™ืช ื—ื™ืคื•ืฉ, ื”ืžืืคืฉืจ ืœืš ืœื‘ืงืฉ ืคืจื™ืกื” ืงื™ื™ืžืช ื•:

  • ืœื‘ื“ื•ืง ืืช ืงื™ื•ืžื ืฉืœ ืžืฉืื‘ื™ื;
  • ืœื”ื—ื–ื™ืจ ืืช ื”ืขืจืš ืฉืœ ืžืฉืื‘ ืงื™ื™ื ืœืฉื™ืžื•ืฉ ืžืื•ื—ืจ ื™ื•ืชืจ.

ื‘ืืžืฆืขื•ืช ืฉืชื™ ื”ื™ื›ื•ืœื•ืช ื”ืœืœื•, ื ื•ื›ืœ ืœื™ืฆื•ืจ ืกื•ื“ ื—ื“ ืคืขืžื™ ืฉื ื•ืฆืจ ื‘ืื•ืคืŸ ื“ื™ื ืžื™!

# 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 }}

ื‘ื›ืœ ืคืขื ืฉืขื“ื›ื•ืŸ ื—ื“ืฉ ืžื•ื—ืœ ืขืœ ื”ืฉืจืช, Helm ื™ืคื™ืง ืขืจืš ืกื•ื“ื™ ื—ื“ืฉ (ืื ืื™ืŸ ืขื“ื™ื™ืŸ ืกื•ื“) ืื• ื™ืขืฉื” ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ืขืจืš ื”ืงื™ื™ื.

ืžื–ืœ ื˜ื•ื‘!

ืžื” ืขื•ื“ ืœืงืจื•ื ื‘ื ื•ืฉื:

  1. ืฉืœื•ืฉ ืจืžื•ืช ืฉืœ ืงื ื” ืžื™ื“ื” ืื•ื˜ื•ืžื˜ื™ ื‘-Kubernetes ื•ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘ื”ืŸ ื‘ื™ืขื™ืœื•ืช.
  2. Kubernetes ื‘ืจื•ื— ื”ืคื™ืจืื˜ื™ื•ืช ืขื ืชื‘ื ื™ืช ืœื™ื™ืฉื•ื.
  3. ื”ืขืจื•ืฅ ืฉืœื ื• Around Kubernetes ื‘ื˜ืœื’ืจื.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”