ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื”ืฉื ื”, ื›ื ืก Kubernetes ื”ืื™ืจื•ืคืื™ ื”ืžืจื›ื–ื™ - KubeCon + CloudNativeCon Europe 2020 - ื”ื™ื” ื•ื™ืจื˜ื•ืืœื™. ืขื ื–ืืช, ืฉื™ื ื•ื™ ื›ื–ื” ื‘ืคื•ืจืžื˜ ืœื ืžื ืข ืžืื™ืชื ื• ืœื”ืขื‘ื™ืจ ืืช ื”ื“ื•"ื— ื”ืžืชื•ื›ื ืŸ ื”ื–ื” "ืœืš? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ื”-Shell-operator" ื”ืžื•ืงื“ืฉ ืœืคืจื•ื™ืงื˜ ื”ืงื•ื“ ื”ืคืชื•ื— ืฉืœื ื• ืžืคืขื™ืœ ืžืขื˜ืคืช.

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

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื”ื™ื›ืจื•ืช ืกืจื˜ื•ืŸ ื”ื“ื™ื•ื•ื— (~23 ื“ืงื•ืช ื‘ืื ื’ืœื™ืช, ื™ื•ืชืจ ืื™ื ืคื•ืจืžื˜ื™ื‘ื™ ื‘ืื•ืคืŸ ื ื™ื›ืจ ืžื”ืžืืžืจ) ื•ื”ืชืžืฆื™ืช ื”ืจืืฉื™ืช ืžืžื ื• ื‘ืฆื•ืจืช ื˜ืงืกื˜. ืœืœื›ืช!

ื‘-Flant ืื ื—ื ื• ื›ืœ ื”ื–ืžืŸ ืขื•ืฉื™ื ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ื•ืื•ื˜ื•ืžืฆื™ื” ืฉืœ ื”ื›ืœ. ื”ื™ื•ื ื ื“ื‘ืจ ืขืœ ืขื•ื“ ืงื•ื ืกืคื˜ ืžืจื’ืฉ. ืœึดืคึฐื’ื•ึนืฉื: ืกืงืจื™ืคื˜ื™ื ืžืงื•ืจื™ื™ื ืฉืœ ืžืขื˜ืคืช ื‘ืขื ืŸ!

ืขื ื–ืืช, ื ืชื—ื™ืœ ื‘ื”ืงืฉืจ ืฉื‘ื• ื›ืœ ื–ื” ืงื•ืจื”: Kubernetes.

Kubernetes API ื•ื‘ืงืจื™ื

ื ื™ืชืŸ ืœื™ื™ืฆื’ ืืช ื”-API ื‘-Kubernetes ื›ืžืขื™ืŸ ืฉืจืช ืงื‘ืฆื™ื ืขื ืกืคืจื™ื•ืช ืœื›ืœ ืกื•ื’ ืื•ื‘ื™ื™ืงื˜. ืื•ื‘ื™ื™ืงื˜ื™ื (ืžืฉืื‘ื™ื) ื‘ืฉืจืช ื–ื” ืžื™ื•ืฆื’ื™ื ืขืœ ื™ื“ื™ ืงื‘ืฆื™ YAML. ื‘ื ื•ืกืฃ, ืœืฉืจืช ื™ืฉ API ื‘ืกื™ืกื™ ื”ืžืืคืฉืจ ืœืš ืœืขืฉื•ืช ืฉืœื•ืฉื” ื“ื‘ืจื™ื:

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

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

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

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

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

ื‘ื•ืื• ื ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ืชื”ืœื™ืš ื™ืฆื™ืจืช ืคืจื™ืกื” ื‘-Kubernetes:

  • ื‘ืงืจ ืคืจื™ืกื” (ื›ืœื•ืœ ื‘ kube-controller-manager) ืžืงื‘ืœ ืžื™ื“ืข ืขืœ ืคืจื™ืกื” ื•ื™ื•ืฆืจ ReplicaSet.
  • ReplicaSet ื™ื•ืฆืจ ืฉื ื™ ื”ืขืชืงื™ื (ืฉื ื™ ืคื•ื“ื™ื) ื‘ื”ืชื‘ืกืก ืขืœ ืžื™ื“ืข ื–ื”, ืืš ื”ืชืจืžื™ืœื™ื ื”ืœืœื• ืื™ื ื ืžืชื•ื›ื ื ื™ื ืขื“ื™ื™ืŸ.
  • ื”ืžืชื–ืžืŸ ืžืชื–ืžืŸ ืชืจืžื™ืœื™ื ื•ืžื•ืกื™ืฃ ืžื™ื“ืข ืขืœ ืฆื•ืžืช ืœ-YAML ืฉืœื”ื.
  • Kubelets ืžื‘ืฆืขื™ื ืฉื™ื ื•ื™ื™ื ื‘ืžืฉืื‘ ื—ื™ืฆื•ื ื™ (ื ื’ื™ื“ Docker).

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

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ืžืคืขื™ืœ ืžืขื˜ืคืช

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

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื“ื•ื’ืžื” ืคืฉื•ื˜ื”: ื”ืขืชืงืช ืกื•ื“ื•ืช

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžื” ืคืฉื•ื˜ื”.

ื ื ื™ื— ืฉื™ืฉ ืœื ื• ืืฉื›ื•ืœ Kubernetes. ื™ืฉ ืœื• ืžืจื—ื‘ ืฉืžื•ืช default ืขื ืื™ื–ื” ืกื•ื“ mysecret. ื‘ื ื•ืกืฃ, ื™ืฉื ื ืžืจื—ื‘ื™ ืฉืžื•ืช ื ื•ืกืคื™ื ื‘ืืฉื›ื•ืœ. ืœื—ืœืงื ืžื•ืฆืžื“ืช ืชื•ื•ื™ืช ืกืคืฆื™ืคื™ืช. ื”ืžื˜ืจื” ืฉืœื ื• ื”ื™ื ืœื”ืขืชื™ืง ืืช ืกื•ื“ ืœืžืจื—ื‘ื™ ืฉืžื•ืช ืขื ืชื•ื•ื™ืช.

ื”ืžืฉื™ืžื” ืžืกื•ื‘ื›ืช ืขืœ ื™ื“ื™ ื”ืขื•ื‘ื“ื” ืฉืžืจื—ื‘ื™ ืฉืžื•ืช ื—ื“ืฉื™ื ืขืฉื•ื™ื™ื ืœื”ื•ืคื™ืข ื‘ืืฉื›ื•ืœ, ื•ืœื—ืœืง ืžื”ื ืขืฉื•ื™ ืœื”ื™ื•ืช ืชื•ื•ื™ืช ื–ื•. ืžืฆื“ ืฉื ื™, ื›ืืฉืจ ื”ืชื•ื•ื™ืช ื ืžื—ืงืช, ื™ืฉ ืœืžื—ื•ืง ื’ื ืืช Secret. ื‘ื ื•ืกืฃ ืœื›ืš, ื”ืกื•ื“ ืขืฆืžื• ื™ื›ื•ืœ ื’ื ืœื”ืฉืชื ื•ืช: ื‘ืžืงืจื” ื–ื”, ื™ืฉ ืœื”ืขืชื™ืง ืืช ื”ืกื•ื“ ื”ื—ื“ืฉ ืœื›ืœ ืžืจื—ื‘ื™ ื”ืฉืžื•ืช ืขื ืชื•ื•ื™ื•ืช. ืื ืกื•ื“ ื ืžื—ืง ื‘ื˜ืขื•ืช ื‘ืžืจื—ื‘ ืฉืžื•ืช ื›ืœืฉื”ื•, โ€‹โ€‹ืขืœ ื”ืžืคืขื™ืœ ืฉืœื ื• ืœืฉื—ื–ืจ ืื•ืชื• ืžื™ื“.

ื›ืขืช, ืœืื—ืจ ืฉื”ืžืฉื™ืžื” ื’ื•ื‘ืฉื”, ื”ื’ื™ืข ื”ื–ืžืŸ ืœื”ืชื—ื™ืœ ืœื™ื™ืฉื ืื•ืชื” ื‘ืืžืฆืขื•ืช ื”- shell-operator. ืื‘ืœ ืงื•ื“ื ื›ืœ ื›ื“ืื™ ืœื•ืžืจ ื›ืžื” ืžื™ืœื™ื ืขืœ ืžืคืขื™ืœ ื”ืžืขื˜ืคืช ืขืฆืžื•.

ื›ื™ืฆื“ ืคื•ืขืœ ืžืคืขื™ืœ ืžืขื˜ืคืช

ื›ืžื• ืขื•ืžืกื™ ืขื‘ื•ื“ื” ืื—ืจื™ื ื‘-Kubernetes, ื”-Shell-operator ืคื•ืขืœ ื‘ืชืจืžื™ืœ ืžืฉืœื•. ื‘ืคื•ื“ ื”ื–ื” ื‘ืกืคืจื™ื™ื” /hooks ืงื‘ืฆื™ ื”ืคืขืœื” ืžืื•ื—ืกื ื™ื. ืืœื” ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืกืงืจื™ืคื˜ื™ื ื‘-Bash, Python, Ruby ื•ื›ื•'. ืื ื• ืงื•ืจืื™ื ืœืงื‘ืฆื™ ื”ืคืขืœื” ื›ืืœื” Hooks (ื•ื•ื™ื).

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

Shell-operator ื ืจืฉื ืœืื™ืจื•ืขื™ Kubernetes ื•ืžืคืขื™ืœ ืืช ื”-hooks ื”ืืœื” ื‘ืชื’ื•ื‘ื” ืœืื•ืชื ืื™ืจื•ืขื™ื ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื.

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ืื™ืš ืžืคืขื™ืœ ื”ืคื’ื– ื™ื•ื“ืข ืื™ื–ื” ื•ื• ืœื”ืคืขื™ืœ ื•ืžืชื™? ื”ื ืงื•ื“ื” ื”ื™ื ืฉืœื›ืœ ื•ื• ื™ืฉ ืฉื ื™ ืฉืœื‘ื™ื. ื‘ืžื”ืœืš ื”ื”ืคืขืœื”, ื”-Shell-operator ืžืคืขื™ืœ ืืช ื›ืœ ื”-hooks ืขื ืืจื’ื•ืžื ื˜ --config ื–ื”ื• ืฉืœื‘ ื”ื”ื’ื“ืจื”. ื•ืื—ืจื™ื• ืžื•ืฉืงื™ื ื•ื•ื™ื ื‘ืฆื•ืจื” ืจื’ื™ืœื” - ื‘ืชื’ื•ื‘ื” ืœืื™ืจื•ืขื™ื ืืœื™ื”ื ื”ื ืžื—ื•ื‘ืจื™ื. ื‘ืžืงืจื” ื”ืื—ืจื•ืŸ, ื”ืงืจืก ืžืงื‘ืœ ืืช ื”ื”ืงืฉืจ ื”ืžื—ื™ื™ื‘ (ื”ืงืฉืจ ืžื—ื™ื™ื‘) - ื ืชื•ื ื™ื ื‘ืคื•ืจืžื˜ JSON, ืขืœื™ื”ื ื ื“ื‘ืจ ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื‘ื”ืžืฉืš.

ื‘ื™ืฆื•ืข ืžืคืขื™ืœ ื‘ื‘ืืฉ

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

  • ื”ืจืืฉื•ืŸ ื ื—ื•ืฅ ืœืฉืœื‘ ื”ืชืฆื•ืจื” - ื”ื•ื ืžืฆื™ื’ ืืช ื”ื”ืงืฉืจ ื”ืžื—ื™ื™ื‘;
  • ื”ืฉื ื™ ืžื›ื™ืœ ืืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขื™ืงืจื™ ืฉืœ ื”ืงืจืก.

#!/bin/bash

source /shell_lib.sh

function __config__() {
  cat << EOF
    configVersion: v1
    # BINDING CONFIGURATION
EOF
}

function __main__() {
  # THE LOGIC
}

hook::run "$@"

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

  • ืกื•ื“ ืžืงื•ืจ ืœืฉื™ื ื•ื™ื™ื;
  • ื›ืœ ืžืจื—ื‘ื™ ื”ืฉืžื•ืช ื‘ืืฉื›ื•ืœ, ื›ื“ื™ ืฉืชื“ืข ืœืื™ืœื• ื™ืฉ ืชื•ื•ื™ืช;
  • ืกื•ื“ื•ืช ื™ืขื“ ื›ื“ื™ ืœื”ื‘ื˜ื™ื— ืฉื›ื•ืœื ืžืกื•ื ื›ืจื ื™ื ืขื ืกื•ื“ ื”ืžืงื•ืจ.

ื”ื™ืจืฉื ืœืžืงื•ืจ ื”ืกื•ื“ื™

ืชืฆื•ืจื” ืžื—ื™ื™ื‘ืช ืขื‘ื•ืจ ื–ื” ื”ื™ื ื“ื™ ืคืฉื•ื˜ื”. ืื ื• ืžืฆื™ื™ื ื™ื ืฉืื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ืกื•ื“ ืขื ื”ืฉื mysecret ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช default:

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

function __config__() {
  cat << EOF
    configVersion: v1
    kubernetes:
    - name: src_secret
      apiVersion: v1
      kind: Secret
      nameSelector:
        matchNames:
        - mysecret
      namespace:
        nameSelector:
          matchNames: ["default"]
      group: main
EOF

ื›ืชื•ืฆืื” ืžื›ืš, ื”-hook ื™ื•ืคืขืœ ื›ืืฉืจ ืกื•ื“ ื”ืžืงื•ืจ ืžืฉืชื ื” (src_secret) ื•ืงื‘ืœ ืืช ื”ื”ืงืฉืจ ื”ืžื—ื™ื™ื‘ ื”ื‘ื:

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, ื”ื•ื ืžื›ื™ืœ ืืช ื”ืฉื ื•ืืช ื›ืœ ื”ืื•ื‘ื™ื™ืงื˜.

ืžืขืงื‘ ืื—ืจ ืžืจื—ื‘ื™ ืฉืžื•ืช

ื›ืขืช ืขืœื™ืš ืœื”ื™ืจืฉื ืœืžืจื—ื‘ื™ ืฉืžื•ืช. ืœืฉื ื›ืš, ืื ื• ืžืฆื™ื™ื ื™ื ืืช ืชืฆื•ืจืช ื”ืžื—ื™ื™ื‘ ื”ื‘ืื”:

- name: namespaces
  group: main
  apiVersion: v1
  kind: Namespace
  jqFilter: |
    {
      namespace: .metadata.name,
      hasLabel: (
       .metadata.labels // {} |  
         contains({"secret": "yes"})
      )
    }
  group: main
  keepFullObjectsInMemory: false

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

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื”ื•ื ืžื›ื™ืœ ืžืขืจืš filterResults ืขื‘ื•ืจ ื›ืœ ืžืจื—ื‘ ืฉืžื•ืช ื‘ืืฉื›ื•ืœ. ืžืฉืชื ื” ื‘ื•ืœื™ืื ื™ hasLabel ืžืฆื™ื™ืŸ ืื ืชื•ื•ื™ืช ืžื—ื•ื‘ืจืช ืœืžืจื—ื‘ ืฉืžื•ืช ื ืชื•ืŸ. ื‘ื•ื—ืจ keepFullObjectsInMemory: false ืžืฆื™ื™ืŸ ืฉืื™ืŸ ืฆื•ืจืš ืœืฉืžื•ืจ ืื•ื‘ื™ื™ืงื˜ื™ื ืฉืœืžื™ื ื‘ื–ื™ื›ืจื•ืŸ.

ืžืขืงื‘ ืื—ืจ ืกื•ื“ื•ืช ื™ืขื“

ืื ื• ืžื ื•ื™ื™ื ืœื›ืœ ื”ืกื•ื“ื•ืช ืฉืฆื•ื™ืŸ ื‘ื”ื ื”ืขืจื” managed-secret: "yes" (ืืœื” ื”ื™ืขื“ ืฉืœื ื• dst_secrets):

- name: dst_secrets
  apiVersion: v1
  kind: Secret
  labelSelector:
    matchLabels:
      managed-secret: "yes"
  jqFilter: |
    {
      "namespace":
        .metadata.namespace,
      "resourceVersion":
        .metadata.annotations.resourceVersion
    }
  group: main
  keepFullObjectsInMemory: false

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

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

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ืขืœ ืกืžืš ื›ืœ ื”ืžื™ื“ืข ื”ื–ื” ื ื™ืชืŸ ืœืคืชื— ืืœื’ื•ืจื™ืชื ื‘ืกื™ืกื™. ื–ื” ื—ื•ื–ืจ ืขืœ ื›ืœ ืžืจื—ื‘ื™ ื”ืฉืžื•ืช ื•:

  • ืื hasLabel ืขื ื™ื™ื ื™ื true ืขื‘ื•ืจ ืžืจื—ื‘ ื”ืฉืžื•ืช ื”ื ื•ื›ื—ื™:
    • ืžืฉื•ื•ื” ืืช ื”ืกื•ื“ ื”ืขื•ืœืžื™ ืœื–ื” ื”ืžืงื•ืžื™:
      • ืื ื”ื ื–ื”ื™ื, ื–ื” ืœื ืขื•ืฉื” ื›ืœื•ื;
      • ืื ื”ื ืฉื•ื ื™ื - ืžื‘ืฆืข kubectl replace ืื• create;
  • ืื hasLabel ืขื ื™ื™ื ื™ื false ืขื‘ื•ืจ ืžืจื—ื‘ ื”ืฉืžื•ืช ื”ื ื•ื›ื—ื™:
    • ืžื•ื•ื“ื ืฉ-Secret ืœื ื ืžืฆื ื‘ืžืจื—ื‘ ื”ืฉืžื•ืช ื”ื ืชื•ืŸ:
      • ืื ื”ืกื•ื“ ื”ืžืงื•ืžื™ ืงื™ื™ื, ืžื—ืง ืื•ืชื• ื‘ืืžืฆืขื•ืช kubectl delete;
      • ืื ื”ืกื•ื“ ื”ืžืงื•ืžื™ ืœื ืžืชื’ืœื”, ื–ื” ืœื ืขื•ืฉื” ื›ืœื•ื.

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื™ื™ืฉื•ื ื”ืืœื’ื•ืจื™ืชื ื‘-Bash ืืชื” ื™ื›ื•ืœ ืœื”ื•ืจื™ื“ ืืฆืœื ื• ืžืื’ืจื™ื ืขื ื“ื•ื’ืžืื•ืช.

ื›ืš ื”ืฆืœื—ื ื• ืœื™ืฆื•ืจ ื‘ืงืจ Kubernetes ืคืฉื•ื˜ ื‘ืืžืฆืขื•ืช 35 ืฉื•ืจื•ืช ืฉืœ ืชืฆื•ืจืช YAML ื•ื‘ืขืจืš ืื•ืชื” ื›ืžื•ืช ืฉืœ ืงื•ื“ Bash! ืชืคืงื™ื“ื• ืฉืœ ืžืคืขื™ืœ ื”ืžืขื˜ืคืช ื”ื•ื ืœืงืฉืจ ืื•ืชื ื™ื—ื“.

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

ื“ื•ื’ืžื” 1: ื‘ื™ืฆื•ืข ืฉื™ื ื•ื™ื™ื ื‘-ConfigMap

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

ื›ืขืช ื ื ื™ื— ืฉื”-ConfigMap ื”ืฉืชื ื” (v.2). ืขื ื–ืืช, ื”ืคื•ื“ื™ื ื™ืฉืชืžืฉื• ื‘ื’ืจืกื” ื”ืงื•ื“ืžืช ืฉืœ ConfigMap (v.1):

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื›ื™ืฆื“ ืื•ื›ืœ ืœื’ืจื•ื ืœื”ื ืœืขื‘ื•ืจ ืœ-ConfigMap ื”ื—ื“ืฉ (v.2)? ื”ืชืฉื•ื‘ื” ืคืฉื•ื˜ื”: ื”ืฉืชืžืฉ ื‘ืชื‘ื ื™ืช. ื‘ื•ืื• ื ื•ืกื™ืฃ ื”ืขืจืช ืกื›ื•ื ื‘ื“ื™ืงื” ืœืงื˜ืข template ืชืฆื•ืจื•ืช ืคืจื™ืกื”:

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

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

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

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื“ื•ื’ืžื” 2: ืขื‘ื•ื“ื” ืขื ื”ื’ื“ืจื•ืช ืžืฉืื‘ื™ื ืžื•ืชืืžื•ืช ืื™ืฉื™ืช

ื›ืคื™ ืฉืืชื” ื™ื•ื“ืข, Kubernetes ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ืกื•ื’ื™ื ืžื•ืชืืžื™ื ืื™ืฉื™ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื. ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืกื•ื’ MysqlDatabase. ื ื ื™ื— ืฉืœืกื•ื’ ื”ื–ื” ื™ืฉ ืฉื ื™ ืคืจืžื˜ืจื™ื ืฉืœ ืžื˜ื ื ืชื•ื ื™ื: name ะธ namespace.

apiVersion: example.com/v1alpha1
kind: MysqlDatabase
metadata:
  name: foo
  namespace: bar

ื™ืฉ ืœื ื• ืืฉื›ื•ืœ Kubernetes ืขื ืžืจื—ื‘ื™ ืฉืžื•ืช ืฉื•ื ื™ื ืฉื‘ื”ื ื ื•ื›ืœ ืœื™ืฆื•ืจ ืžืกื“ื™ ื ืชื•ื ื™ื ืฉืœ MySQL. ื‘ืžืงืจื” ื–ื” ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘- shell-operator ื›ื“ื™ ืœืขืงื•ื‘ ืื—ืจ ืžืฉืื‘ื™ื MysqlDatabase, ื—ื™ื‘ื•ืจื ืœืฉืจืช MySQL ื•ืกื ื›ืจื•ืŸ ื”ืžืฆื‘ื™ื ื”ืจืฆื•ื™ื™ื ื•ื”ื ืฆืคื™ื ืฉืœ ื”ืืฉื›ื•ืœ.

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื“ื•ื’ืžื” 3: ื ื™ื˜ื•ืจ ืจืฉืช ืืฉื›ื•ืœ

ื›ืคื™ ืฉืืชื” ื™ื•ื“ืข, ืฉื™ืžื•ืฉ ื‘ืคื™ื ื’ ื”ื•ื ื”ื“ืจืš ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ ืœื ื˜ืจ ืจืฉืช. ื‘ื“ื•ื’ืžื” ื–ื• ื ืจืื” ื›ื™ืฆื“ ืœื™ื™ืฉื ื ื™ื˜ื•ืจ ื›ื–ื” ื‘ืืžืฆืขื•ืช shell-operator.

ืงื•ื“ื ื›ืœ, ืชืฆื˜ืจืš ืœื”ื™ืจืฉื ืœืฆืžืชื™ื. ืื•ืคืจื˜ื•ืจ ื”ืžืขื˜ืคืช ืฆืจื™ืš ืืช ื”ืฉื ื•ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื›ืœ ืฆื•ืžืช. ื‘ืขื–ืจืชื, ื”ื•ื ื™ื‘ืฆืข ืคื™ื ื’ ืœืฆืžืชื™ื ื”ืืœื”.

configVersion: v1
kubernetes:
- name: nodes
  apiVersion: v1
  kind: Node
  jqFilter: |
    {
      name: .metadata.name,
      ip: (
       .status.addresses[] |  
        select(.type == "InternalIP") |
        .address
      )
    }
  group: main
  keepFullObjectsInMemory: false
  executeHookOnEvent: []
schedule:
- name: every_minute
  group: main
  crontab: "* * * * *"

ืคืจืžื˜ืจ executeHookOnEvent: [] ืžื•ื ืข ืžื”-hook ืœืคืขื•ืœ ื‘ืชื’ื•ื‘ื” ืœื›ืœ ืื™ืจื•ืข (ื›ืœื•ืžืจ, ื‘ืชื’ื•ื‘ื” ืœืฉื™ื ื•ื™, ื”ื•ืกืคื”, ืžื—ื™ืงื” ืฉืœ ืฆืžืชื™ื). ืขื ื–ืืช, ื”ื•ื ื™ืจื•ืฅ (ื•ืขื“ื›ืŸ ืืช ืจืฉื™ืžืช ื”ืฆืžืชื™ื) ืขืœ ืคื™ ืœื•ื— ื”ื–ืžื ื™ื - ื›ืœ ื“ืงื”, ืœืคื™ ื”ื•ืจืื•ืช ื”ืฉื“ื” schedule.

ื›ืขืช ื ืฉืืœืช ื”ืฉืืœื”, ืื™ืš ื‘ื“ื™ื•ืง ืื ื—ื ื• ื™ื•ื“ืขื™ื ืขืœ ื‘ืขื™ื•ืช ื›ืžื• ืื•ื‘ื“ืŸ ืžื ื•ืช? ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืงื•ื“:

function __main__() {
  for i in $(seq 0 "$(context::jq -r '(.snapshots.nodes | length) - 1')"); do
    node_name="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.name')"
    node_ip="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.ip')"
    packets_lost=0
    if ! ping -c 1 "$node_ip" -t 1 ; then
      packets_lost=1
    fi
    cat >> "$METRICS_PATH" <<END
      {
        "name": "node_packets_lost",
        "add": $packets_lost,
        "labels": {
          "node": "$node_name"
        }
      }
END
  done
}

ืื ื• ืขื•ื‘ืจื™ื ืขืœ ืจืฉื™ืžืช ื”ืฆืžืชื™ื, ืžืงื‘ืœื™ื ืืช ืฉืžื•ืชื™ื”ื ื•ื›ืชื•ื‘ื•ืช ื”-IP ืฉืœื”ื, ืคื™ื ื’ ืื•ืชื ื•ืฉื•ืœื—ื™ื ืืช ื”ืชื•ืฆืื•ืช ืœ-Prometheus. ื”-Shell-operator ื™ื›ื•ืœ ืœื™ื™ืฆื ืžื“ื“ื™ื ืœ-Prometheus, ืฉืžื™ืจืชื ื‘ืงื•ื‘ืฅ ื”ืžืžื•ืงื ืœืคื™ ื”ื ืชื™ื‘ ืฉืฆื•ื™ืŸ ื‘ืžืฉืชื ื” ื”ืกื‘ื™ื‘ื” $METRICS_PATH.

ื”ื ื” ื›ืš ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžืคืขื™ืœ ืœื ื™ื˜ื•ืจ ืจืฉืช ืคืฉื•ื˜ ื‘ืืฉื›ื•ืœ.

ืžื ื’ื ื•ืŸ ืชื•ืจ

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

  • ืžื” ืงื•ืจื” ืื, ื‘ืื•ืชื• ื”ื–ืžืŸ, ืžืฉื”ื• ืงื•ืจื” ื‘ืืฉื›ื•ืœ? ืขื•ื“ ื“ื‘ืจ ืื—ื“ ืžึดืงืจึถื”?
  • ื”ืื ืžืคืขื™ืœ ื”ืžืขื˜ืคืช ื™ืคืขื™ืœ ืžื•ืคืข ื ื•ืกืฃ ืฉืœ ื”ื•ื•?
  • ืžื” ืื, ื ื ื™ื—, ื—ืžื™ืฉื” ืื™ืจื•ืขื™ื ืžืชืจื—ืฉื™ื ื‘ืืฉื›ื•ืœ ื‘ื‘ืช ืื—ืช?
  • ื”ืื ืžืคืขื™ืœ ื”ืžืขื˜ืคืช ื™ืขื‘ื“ ืื•ืชื ื‘ืžืงื‘ื™ืœ?
  • ืžื” ืœื’ื‘ื™ ืžืฉืื‘ื™ื ื ืฆืจื›ื™ื ื›ืžื• ื–ื™ื›ืจื•ืŸ ื•ืžืขื‘ื“?

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

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

ื’ื ืืœื” ื ื™ืชืŸ ืœืฉืœื‘ ืื™ืจื•ืขื™ื ืœืื—ื“ ื’ื“ื•ืœ. ื”ืคืจืžื˜ืจ ืื—ืจืื™ ืœื›ืš group ื‘ืชืฆื•ืจืช ื”ื›ืจื™ื›ื”.

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

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

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ื›ืœ ืžื” ืฉืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ื”ื•ื ืœื”ื’ื“ื™ืจ ืืช ื”ืฉื“ื” ื‘ื”ืชืื queue ื‘ืชืฆื•ืจืช ื”ื›ืจื™ื›ื”. ืื ืœื ืฆื•ื™ืŸ ืฉื ืชื•ืจ, ื”-hook ืคื•ืขืœ ื‘ืชื•ืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ (default). ืžื ื’ื ื•ืŸ ืชื•ืจ ื–ื” ืžืืคืฉืจ ืœืš ืœืคืชื•ืจ ืœื—ืœื•ื˜ื™ืŸ ืืช ื›ืœ ื‘ืขื™ื•ืช ื ื™ื”ื•ืœ ื”ืžืฉืื‘ื™ื ื‘ืขืช ืขื‘ื•ื“ื” ืขื ื•ื•ื™ื.

ืžืกืงื ื”

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

ืžื™ื“ืข ืžืคื•ืจื˜ ืขืœ ืžืคืขื™ืœ ื”ืžืขื˜ืคืช, ื›ืžื• ื’ื ื”ื“ืจื›ื” ืžื”ื™ืจื” ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘ื•, ื–ืžื™ืŸ ื‘ืงื•ื‘ืฅ ื”ืžืชืื™ื ืžืื’ืจื™ื ื‘- GitHub. ืืœ ืชื”ืกืกื• ืœืคื ื•ืช ืืœื™ื ื• ื‘ืฉืืœื•ืช: ืชื•ื›ืœื• ืœื“ื•ืŸ ื‘ื”ืŸ ื‘ืกืคื™ื™ืฉืœ ืงื‘ื•ืฆืช ื˜ืœื’ืจื (ื‘ืจื•ืกื™ืช) ืื• ื‘ ื”ืคื•ืจื•ื ื”ื–ื” (ื‘ืื ื’ืœื™ืช).

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

ืœืœื›ืช? ืœึทื—ึฒื‘ื•ึนื˜! ื”ื›ื™ืจื• ืืช ืžืคืขื™ืœ ื”ืžืขื˜ืคืช (ืกืงื™ืจื” ื•ื“ื™ื•ื•ื— ื•ื™ื“ืื• ืž-KubeCon EU'2020)

ืกืจื˜ื•ื ื™ื ื•ืฉืงื•ืคื™ื•ืช

ืกืจื˜ื•ืŸ ืžื”ื”ื•ืคืขื” (~23 ื“ืงื•ืช):


ื”ืฆื’ืช ื”ื“ื•"ื—:

ื .ื‘.

ืงืจื ื’ื ื‘ื‘ืœื•ื’ ืฉืœื ื•:

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

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