αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αž“αŸ…αž†αŸ’αž“αžΆαŸ†αž“αŸαŸ‡ αžŸαž“αŸ’αž“αž·αžŸαžΈαž‘ Kubernetes αž’αžΊαžšαŸ‰αž»αž”αžŠαŸαžŸαŸ†αžαžΆαž“αŸ‹ - KubeCon + CloudNativeCon Europe 2020 - αž‚αžΊαž‡αžΆαž“αž·αž˜αŸ’αž˜αž·αžαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž˜αŸ’αžšαž„αŸ‹αž”αŸ‚αž”αž“αŸαŸ‡αž˜αž·αž“αž”αžΆαž“αžšαžΆαžšαžΆαŸ†αž„αž™αžΎαž„αž–αžΈαž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αž‚αŸ’αžšαŸ„αž„αž‘αž»αž€αž™αžΌαžšαžšαž”αžŸαŸ‹αž™αžΎαž„ β€œαž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™ Shell-operator” αž§αž‘αŸ’αž‘αž·αžŸαžŠαž›αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ Open Source αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž›.

αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž•αž»αžŸαž‚αŸ†αž“αž·αžαžŠαŸ„αž™αž€αžΆαžšαž–αž·αž—αžΆαž€αŸ’αžŸαžΆ αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαž˜αŸ’αžšαž½αž›αžŠαž›αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Kubernetes αž“αž·αž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αžŠαŸ„αž™αž€αžΆαžšαžαž·αžαžαŸ†αž”αŸ’αžšαžΉαž„αž”αŸ’αžšαŸ‚αž„αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αžαžŠαŸ„αž™αž”αŸ’αžšαžΎ shell-operator αŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αžœαžΈαžŠαŸαž’αžΌαž“αŸƒαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸ (~23 αž“αžΆαž‘αžΈαž‡αžΆαž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸ αž‚αž½αžšαž²αŸ’αž™αž€αžαŸ‹αžŸαŸ†αž‚αžΆαž›αŸ‹αž‡αžΆαž„αž’αžαŸ’αžαž”αž‘) αž“αž·αž„αž€αžΆαžšαžŠαž€αžŸαŸ’αžšαž„αŸ‹αžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžœαžΆαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž’αžαŸ’αžαž”αž‘αŸ” αž‘αŸ…!

αž“αŸ… Flant αž™αžΎαž„αžαŸ‚αž„αžαŸ‚αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– αž“αž·αž„αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αžαŸ’αž„αŸƒαž“αŸαŸ‡αž™αžΎαž„αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž‚αŸ†αž“αž·αžαžŠαŸαž‚αž½αžšαž±αŸ’αž™αžšαŸ†αž—αžΎαž”αž˜αž½αž™αž‘αŸ€αžαŸ” αž‡αž½αž”αŸ– αž€αžΆαžšαžŸαžšαžŸαŸαžšαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŸαŸ‚αž›αžŠαžΎαž˜αž€αŸ†αžŽαžΎαžαž–αž–αž€!

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž…αžΌαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αžšαž·αž”αž‘αžŠαŸ‚αž›αž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž€αžΎαžαž‘αžΎαž„αŸ– KubernetesαŸ”

Kubernetes API αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆ

API αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ†αžŽαžΆαž„αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžαžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αžœαžαŸ’αžαž»αž“αžΈαž˜αž½αž™αŸ—αŸ” αžœαžαŸ’αžαž» (αž’αž“αž’αžΆαž“) αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ†αžŽαžΆαž„αžŠαŸ„αž™αž―αž€αžŸαžΆαžš YAML αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž˜αžΆαž“ API αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαžšαžΏαž„αž”αžΈαž™αŸ‰αžΆαž„αŸ–

  • αž‘αž‘αž½αž›αž”αžΆαž“ αž’αž“αž’αžΆαž“αžαžΆαž˜αž”αŸ’αžšαž—αŸαž‘αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αžœαžΆ;
  • αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž’αž“αž’αžΆαž“ (αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαŸ‚αžœαžαŸ’αžαž» "αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ" - αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž¬αž˜αžΆαž“αž”αŸ†αžŽαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαžαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž›);
  • αž”αž‘ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž“αž’αžΆαž“ (αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž—αŸ’αž›αžΆαž˜αŸ—αž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ†αžŽαŸ‚αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ / αž’αžΆαž”αŸ‹αžŠαŸαžαžšαž”αžŸαŸ‹αžœαžΆ) αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ Kubernetes αžŠαžΎαžšαžαž½αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž―αž€αžŸαžΆαžš (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ YAML manifests) αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž…αŸ†αž“αž½αž“αž”αžΈ (αž”αžΆαž‘ αžαžΆαž˜αž–αž·αžαž˜αžΆαž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž“αžΉαž„αž›αž»αž”αžœαžΆαž…αŸ„αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡)αŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αž”αž‰αŸ’αž αžΆαž‚αžΊαžαžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αžΆαž…αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαŸ‚αž–αŸαžαŸŒαž˜αžΆαž“αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžš αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆ - αž‚αŸ†αž“αž·αžαžŸαŸ†αžαžΆαž“αŸ‹ αž“αž·αž„αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αžΈαž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž– Kubernetes αŸ”

αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžšαž”αŸ’αžšαž—αŸαž‘αŸ” αž‘αžΈαž˜αž½αž™αž™αž€αž–αŸαžαŸŒαž˜αžΆαž“αž–αžΈ Kubernetes αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαžαžΆαž˜αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŠαŸ‚αž›αž”αžΆαž“αžŠαžΆαž€αŸ‹αž αžΎαž™αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαž‘αŸ… K8s αŸ” αž‘αžΈαž–αžΈαžšαž™αž€αž–αŸαžαŸŒαž˜αžΆαž“αž–αžΈ Kubernetes αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αžŠαžΌαž…αž”αŸ’αžšαž—αŸαž‘αž‘αžΈαž˜αž½αž™αž‘αŸ αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž’αž“αž’αžΆαž“αžαžΆαž„αž€αŸ’αžšαŸ…αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ”

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž±αŸ’αž™αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹αž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ KubernetesαŸ–

  • αž§αž”αž€αžšαžŽαŸαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ (αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αŸ’αž“αž»αž„ kube-controller-manager) αž‘αž‘αž½αž›αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαžŸαŸ†αžŽαž»αŸ†αž…αž˜αŸ’αž›αž„αŸ”
  • ReplicaSet αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž…αž˜αŸ’αž›αž„αž–αžΈαžš (αž•αžαžαž›αž–αžΈαžš) αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž–αŸαžαŸŒαž˜αžΆαž“αž“αŸαŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž•αžαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž˜αž·αž“αž‘αžΆαž“αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž–αŸαž›αž“αŸ…αž‘αžΎαž™αž‘αŸαŸ”
  • αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž–αŸαž›αž€αŸ†αžŽαžαŸ‹αž–αŸαž› pods αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜αž–αŸαžαŸŒαž˜αžΆαž“ node αž‘αŸ… YAMLs αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ”
  • Kubelets αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αž“αž’αžΆαž“αžαžΆαž„αž€αŸ’αžšαŸ… (αž“αž·αž™αžΆαž™αžαžΆ Docker) αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž›αŸ†αžŠαžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸ†αžŠαžΆαž”αŸ‹αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸ: kubelet αž–αž·αž“αž·αžαŸ’αž™αž’αž»αž„, αž‚αžŽαž“αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžšαž”αžŸαŸ‹ pod αž“αž·αž„αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αŸ” αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆ ReplicaSet αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž– αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαžŸαŸ†αžŽαž»αŸ†αž…αž˜αŸ’αž›αž„αŸ” αžšαžΏαž„αžŠαžŠαŸ‚αž›αž“αŸαŸ‡αž€αžΎαžαž‘αžΎαž„αž‡αžΆαž˜αž½αž™ Deployment Controller αž αžΎαž™αž‘αžΈαž”αŸ†αž•αž»αžαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αž‘αž½αž›αž”αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αžΆαž”αŸ‹αžŠαŸαž (αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“)αŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž›

αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆ Kubernetes αž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαž„αžΆαžšαžšαž½αž˜αž‚αŸ’αž“αžΆαž“αŸƒαž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαž•αŸ’αžŸαŸαž„αŸ— (αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš Kubernetes αž€αŸαž‡αžΆαž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαž•αž„αžŠαŸ‚αžš) αŸ” αžŸαŸ†αžŽαž½αžšαž€αžΎαžαž‘αžΎαž„αžαžΎαž’αŸ’αžœαžΎαžŠαžΌαž…αž˜αŸ’αžαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ„αž™αž€αžΆαžšαžαž·αžαžαŸ†αž”αŸ’αžšαžΉαž„αž”αŸ’αžšαŸ‚αž„αžαž·αž…αžαž½αž…αž”αŸ†αž•αž»αž? αž αžΎαž™αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž˜αž€αž‡αž½αž™αžŸαž„αŸ’αž‚αŸ’αžšαŸ„αŸ‡ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž›. αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αž„αŸ’αž€αžΎαžαžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŠαŸ‚αž›αž’αŸ’αž›αžΆαž”αŸ‹αžŸαŸ’αž‚αžΆαž›αŸ‹αŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αž§αž‘αžΆαž αžšαžŽαŸαžŸαžΆαž˜αž‰αŸ’αž‰αŸ– αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αŸ”

αž§αž”αž˜αžΆαžαžΆαž™αžΎαž„αž˜αžΆαž“αž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αŸ” αžœαžΆαž˜αžΆαž“αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡ default αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž˜αž½αž™αž…αŸ†αž“αž½αž“ mysecret. αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž˜αžΆαž“β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžβ€‹αž“αŸ…αž€αŸ’αž“αž»αž„β€‹αž…αž„αŸ’αž€αŸ„αž˜αŸ” αž–αž½αž€αž‚αŸαžαŸ’αž›αŸ‡αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸαŸ” αž‚αŸ„αž›αžŠαŸ…αžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαž…αž˜αŸ’αž›αž„ Secret αž‘αŸ…αž€αŸ’αž“αž»αž„ namespaces αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ’αž›αžΆαž€αž˜αž½αž™αŸ”

αž€αž·αž…αŸ’αž…αž€αžΆαžšαž˜αžΆαž“αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αžŠαŸ„αž™αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆ αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ’αž˜αžΈαž’αžΆαž…αž›αŸαž…αž‘αžΎαž„αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ αž αžΎαž™αž–αž½αž€αžœαžΆαžαŸ’αž›αŸ‡αž’αžΆαž…αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αž“αŸαŸ‡αŸ” αž˜αŸ‰αŸ’αž™αžΆαž„αžœαž·αž‰αž‘αŸ€αžαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŸαŸ’αž›αžΆαž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž” Secret αž€αŸαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž•αž„αžŠαŸ‚αžšαŸ” αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž“αŸαŸ‡ αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αžαŸ’αž›αž½αž“αž―αž„αž€αŸαž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž•αž„αžŠαŸ‚αžšαŸ– αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαžαŸ‚αž…αž˜αŸ’αž›αž„αž‘αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αž›αžΆαž€αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αž“αŸ…αž€αŸ’αž“αž»αž„ namespace αžŽαžΆαž˜αž½αž™ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αž½αžšαžαŸ‚αžŸαŸ’αžŠαžΆαžšαžœαžΆαž‘αžΎαž„αžœαž·αž‰αž—αŸ’αž›αžΆαž˜αŸ—αŸ”

αž₯αž‘αžΌαžœβ€‹αž“αŸαŸ‡β€‹αžŠαŸ‚αž›β€‹αž€αž·αž…αŸ’αž…αž€αžΆαžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž€αžΎαž αžœαžΆβ€‹αž‡αžΆβ€‹αž–αŸαž›β€‹αžœαŸαž›αžΆβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž…αžΆαž”αŸ‹β€‹αž•αŸ’αžαžΎαž˜β€‹αž’αž“αž»αžœαžαŸ’αžβ€‹αžœαžΆβ€‹αžŠαŸ„αž™β€‹αž”αŸ’αžšαžΎ shell-operatorαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαžŠαŸ†αž”αžΌαž„αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž“αž·αž™αžΆαž™αž–αžΆαž€αŸ’αž™αž–αžΈαžšαž”αžΈαž’αŸ†αž–αžΈαžŸαŸ‚αž› - αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžαŸ’αž›αž½αž“αž―αž„αŸ”

αžšαž”αŸ€αž”αžŠαŸ‚αž›αžŸαŸ‚αž›-αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš

αžŠαžΌαž…αž‡αžΆαž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž•αžαž•αŸ’αž‘αžΆαž›αŸ‹αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž•αžαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžαž /hooks αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ” αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž’αžΆαž…αž‡αžΆαžŸαŸ’αž‚αŸ’αžšαžΈαž”αž“αŸ…αž€αŸ’αž“αž»αž„ Bash, Python, Ruby αž‡αžΆαžŠαžΎαž˜αŸ” αž™αžΎαž„αž αŸ…αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αž”αŸ‚αž”αž“αŸαŸ‡αžαžΆ αž‘αŸ†αž–αž€αŸ‹ (αž‘αŸ†αž–αž€αŸ‹).

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

Shell-operator αž‡αžΆαžœαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸ Kubernetes αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ†αž–αž€αŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž‘αžΆαŸ†αž„αž“αŸ„αŸ‡αžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

តើ shell-operator αžŠαžΉαž„αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆαžαžΆαž‘αŸ†αž–αž€αŸ‹αž˜αž½αž™αžŽαžΆαžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž“αž·αž„αž“αŸ…αž–αŸαž›αžŽαžΆ? αž…αŸ†αžŽαž»αž…αž‚αžΊαžαžΆαžšαžΆαž›αŸ‹αž‘αŸ†αž–αž€αŸ‹αž˜αžΆαž“αž–αžΈαžšαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αŸ” αž€αŸ†αž‘αž»αž„αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ†αž–αž€αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž˜αž½αž™αŸ” --config αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αŸ” αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžœαžΆαž‘αŸ†αž–αž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžΆαž˜αžšαž”αŸ€αž”αž’αž˜αŸ’αž˜αžαžΆ - αžŠαžΎαž˜αŸ’αž”αžΈαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž‘αŸ†αž–αž€αŸ‹αž‘αž‘αž½αž›αž”αžΆαž“αž”αžšαž·αž”αž‘αž…αž„ (αž”αžšαž·αž”αž‘αž…αž„) - αž‘αž·αž“αŸ’αž“αž“αŸαž™αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ JSON αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ”

αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž“αŸ…αž€αŸ’αž“αž»αž„ Bash

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαŸ€αž˜αžšαž½αž…αžšαžΆαž›αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž˜αž»αžαž„αžΆαžšαž–αžΈαžš (αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡αž™αžΎαž„αžŽαŸ‚αž“αžΆαŸ† αž”αžŽαŸ’αžŽαžΆαž›αŸαž™ shell_libαžŠαŸ‚αž›αž‡αž½αž™αžŸαž˜αŸ’αžšαž½αž›αž€αžΆαžšαžŸαžšαžŸαŸαžšαž‘αŸ†αž–αž€αŸ‹αž€αŸ’αž“αž»αž„ Bash αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„)αŸ–

  • αž‘αžΈαž˜αž½αž™αž‚αžΊαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ - αžœαžΆαž”αž„αŸ’αž αžΆαž‰αž”αžšαž·αž”αž‘αž…αž„αŸ”
  • αž‘αžΈαž–αžΈαžšαž˜αžΆαž“αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŸαŸ†αžαžΆαž“αŸ‹αž“αŸƒαž‘αŸ†αž–αž€αŸ‹αŸ”

#!/bin/bash

source /shell_lib.sh

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

function __main__() {
  # THE LOGIC
}

hook::run "$@"

αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαžαŸ’αžšαžΌαžœαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžαžΆαžαžΎαž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžαŸ’αžαž»αž’αŸ’αžœαžΈαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αžαŸ’αžšαžΌαžœαžαžΆαž˜αžŠαžΆαž“αŸ–

  • αž”αŸ’αžšαž—αž–αžŸαž˜αŸ’αž„αžΆαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš;
  • αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹β€‹αž€αŸ’αž“αž»αž„β€‹αž…αž„αŸ’αž€αŸ„αž˜ αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž’αŸ’αž“αž€β€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αž˜αž½αž™β€‹αžŽαžΆβ€‹αž˜αžΆαž“β€‹αžŸαŸ’αž›αžΆαž€β€‹αž—αŸ’αž‡αžΆαž”αŸ‹β€‹αž‡αžΆαž˜αž½αž™β€‹αž–αž½αž€αžœαžΆαŸ”
  • αž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αžŠαŸ…αžŸαž˜αŸ’αž„αžΆαžαŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαžαžΆαž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž”αŸ’αžšαž—αž–αŸ”

αž‡αžΆαžœαž”αŸ’αžšαž—αž–αžŸαž˜αŸ’αž„αžΆαžαŸ‹

αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αžŽαžΆαžŸαŸ‹αŸ” αž™αžΎαž„αž”αž„αŸ’αž αžΆαž‰αžαžΆαž™αžΎαž„αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎ Secret αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžˆαŸ’αž˜αŸ„αŸ‡ mysecret αž“αŸ…αž€αŸ’αž“αž»αž„ namespace 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

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž‘αŸ†αž–αž€αŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸαŸ‡αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž”αŸ’αžšαž—αž–αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš (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 αžαŸ’αžšαž„αž–αŸαžαŸŒαž˜αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚ namespace αž“αž·αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš resourceVersion. αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž…αž»αž„αž€αŸ’αžšαŸ„αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αŸ– αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž€αŸ†αžŽαŸ‚αž“αŸƒαž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„ αž“αž·αž„αžšαž€αŸ’αžŸαžΆαžœαžΆαž±αŸ’αž™αž‘αžΆαž“αŸ‹αžŸαž˜αŸαž™αŸ”

αž‘αŸ†αž–αž€αŸ‹β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž€αŸ†αžŽαžαŸ‹β€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’β€‹αžαžΆαž˜β€‹αžœαž·αž’αžΈβ€‹αž“αŸαŸ‡β€‹αž“αžΉαž„β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž”αžšαž·αž”αž‘β€‹αž…αž„β€‹αž‘αžΆαŸ†αž„β€‹αž”αžΈβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž–αž·αž–αžŽαŸŒαž“αžΆβ€‹αžαžΆαž„αž›αžΎβ€‹αŸ” αž‚αŸβ€‹αž’αžΆαž…β€‹αž‚αž·αžβ€‹αžαžΆβ€‹αž‡αžΆβ€‹αž”αŸ’αžšαž—αŸαž‘β€‹αžšαžΌαž”αžαžβ€‹αž˜αž½αž™β€‹αž”αŸ’αžšαž—αŸαž‘ (αžšαžΌαž”αžαž) αž…αž„αŸ’αž€αŸ„αž˜αŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž–αŸαžαŸŒαž˜αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡ αž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αŸ” αžœαžΆαž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαž›αžΎαž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž“αž·αž„αŸ–

  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎ hasLabel αž”αž‰αŸ’αž αžΆ true αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž›αŸ†αž β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ–
    • αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”β€‹αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„β€‹αžŸαž€αž›β€‹αž‡αžΆαž˜αž½αž™β€‹αž“αžΉαž„β€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€αŸ–
      • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαžŠαžΌαž…αž‚αŸ’αž“αžΆ αžœαžΆαž˜αž·αž“αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαžŸαŸ„αŸ‡αŸ”
      • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αž‚αŸαžαž»αžŸαž‚αŸ’αž“αžΆ - αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· kubectl replace ឬ create;
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎ hasLabel αž”αž‰αŸ’αž αžΆ false αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž›αŸ†αž β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ–
    • αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆ Secret αž˜αž·αž“αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αžˆαŸ’αž˜αŸ„αŸ‡αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αŸ–
      • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹αž˜αžΆαž“αžœαžαŸ’αžαž˜αžΆαž“ αžŸαžΌαž˜αž›αž»αž”αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ kubectl delete;
      • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰ αžœαžΆαž˜αž·αž“αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αŸ’αž”αž½αž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž“αŸ…αž€αŸ’αž“αž»αž„ Bash αž’αŸ’αž“αž€αž’αžΆαž…αž‘αžΆαž‰αž™αž€αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αžƒαŸ’αž›αžΆαŸ†αž„αž‡αžΆαž˜αž½αž™αž§αž‘αžΆαž αžšαžŽαŸ.

αž“αŸ„αŸ‡αž αžΎαž™αž‡αžΆαžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆ Kubernetes αžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ YAML αž…αŸ†αž“αž½αž“ 35 αž”αž“αŸ’αž‘αžΆαžαŸ‹ αž“αž·αž„αž’αŸ†αž–αžΈαž…αŸ†αž“αž½αž“αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΌαžŠ Bash! αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹ shell-operator αž‚αžΊαž—αŸ’αž‡αžΆαž”αŸ‹αž–αž½αž€αžœαžΆαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαŸ”

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž€αžΆαžšαž…αž˜αŸ’αž›αž„αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžαŸ†αž”αž“αŸ‹αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ„αŸ‡αž‘αŸαŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž‘αŸ€αž αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‚αžΆαžαŸ‹αž˜αžΆαž“αžŸαž˜αžαŸ’αžαž—αžΆαž–αŸ”

αž§αž‘αžΆαž αžšαžŽαŸαž‘αžΈ 1αŸ– αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ… ConfigMap

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αž”αžΈαž•αžαŸ” Pods αž”αŸ’αžšαžΎ ConfigMap αžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž•αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš ConfigMap αž‚αžΊαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™ (αžŸαžΌαž˜αž αŸ…αžœαžΆαžαžΆ v.1)αŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™ pods αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αŸ’αžšαžΎαž€αŸ†αžŽαŸ‚αž–αž·αžŸαŸαžŸαž“αŸƒ ConfigMap αž“αŸαŸ‡αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž…αžΌαžšαžŸαž“αŸ’αž˜αžαžαžΆ ConfigMap αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš (v.2)αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž•αžαžƒαŸ‚αžšαž“αžΉαž„αž”αŸ’αžšαžΎαž€αŸ†αžŽαŸ‚αž˜αž»αž“αž“αŸƒ ConfigMap (v.1)αŸ–

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αžαžΎαžαŸ’αž‰αž»αŸ†αž’αžΆαž…αž±αŸ’αž™αž–αž½αž€αž‚αŸαž”αŸ’αžαžΌαžšαž‘αŸ… ConfigMap αžαŸ’αž˜αžΈ (v.2) αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ? αž…αž˜αŸ’αž›αžΎαž™αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αŸ– αž”αŸ’αžšαžΎαž‚αŸ†αžšαžΌαŸ” αžαŸ„αŸ‡αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž’αŸ†αž–αžΈ checksum αž‘αŸ…αž•αŸ’αž“αŸ‚αž€ template αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ–

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž˜αžΌαž›αž”αŸ’αž”αž‘αžΆαž“αž”αŸαžαŸ’αžšαž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž•αžαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž αžΎαž™αžœαžΆαž“αžΉαž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžŠαŸ‚αžšαŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž“αŸ…αž–αŸαž› ConfigMap αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž αžΎαž™αžŸαŸ‚αž› - αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž˜αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αŸ” αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‚αžΊαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž‘αŸ†αž–αž€αŸ‹αžŠαŸ‚αž›αž“αžΉαž„αž‡αžΆαžœ ConfigMap αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– checksum.

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αž›αžΎ ConfigMap αž“αŸ„αŸ‡ shell-operator αž“αžΉαž„αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž–αž½αž€αž‚αŸ αž αžΎαž™αž‚αžŽαž“αžΆ checksum αž‘αžΎαž„αžœαž·αž‰αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αžœαŸαž‘αž˜αž“αŸ’αžαžšαž”αžŸαŸ‹ 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αŸ– αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αžŽαŸ’αžαžΆαž‰αž…αž„αŸ’αž€αŸ„αž˜

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αžŠαžΉαž„αž αžΎαž™αžαžΆαž€αžΆαžšαž”αŸ’αžšαžΎ ping αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αžŽαŸ’αžαžΆαž‰αŸ” αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ‚αž”αž“αŸαŸ‡αžŠαŸ„αž™αž”αŸ’αžšαžΎ 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: [] αžšαžΆαžšαžΆαŸ†αž„αž‘αŸ†αž–αž€αŸ‹αž˜αž·αž“αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŽαžΆαž˜αž½αž™ (αž“αŸ„αŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž”αž“αŸ’αžαŸ‚αž˜ αž€αžΆαžšαž›αž»αž”αžαŸ’αž“αžΆαŸ†αž„)αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž‚αžΆαžαŸ‹ αž“αžΉαž„αžšαžαŸ‹ (αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž”αž‰αŸ’αž‡αžΈαžαŸ’αž“αžΆαŸ†αž„) αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž–αŸαž› - αžšαžΆαž›αŸ‹αž“αžΆαž‘αžΈ αžαžΆαž˜αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αžœαžΆαž› 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.

αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αžŽαŸ’αžαžΆαž‰αžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž˜αž½αž™αŸ”

αž™αž“αŸ’αžαž€αžΆαžšαžαž˜αŸ’αžšαž„αŸ‹αž‡αž½αžš

αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αžΉαž„αž˜αž·αž“αž–αŸαž‰αž›αŸαž‰αž‘αŸ αžŠαŸ„αž™αž˜αž·αž“αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž™αž“αŸ’αžαž€αžΆαžšαžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž‘αŸ€αžαžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ‚αž›-αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαŸ” αžŸαŸ’αžšαž˜αŸƒαžαžΆαžœαžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž‘αŸ†αž–αž€αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αž€αŸ’αž“αž»αž„αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αŸ”

  • αžαžΎαž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αŸ’αž“αž»αž„αž–αŸαž›αžαŸ‚αž˜αž½αž™αž˜αžΆαž“αž’αŸ’αžœαžΈαž˜αž½αž™αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜? αž˜αž½αž™αž‘αŸ€αž αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸ?
  • តើ shell-operator αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž§αž‘αžΆαž αžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸƒ hook αžŠαŸ‚αžšαž¬αž‘αŸ?
  • αž…αž»αŸ‡β€‹αž”αžΎβ€‹αž“αž·αž™αžΆαž™β€‹αžαžΆ αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸβ€‹αž”αŸ’αžšαžΆαŸ†β€‹αž€αžΎαžβ€‹αž‘αžΎαž„β€‹αž€αŸ’αž“αž»αž„β€‹αž…αž„αŸ’αž€αŸ„αž˜β€‹αžαŸ‚β€‹αž˜αž½αž™?
  • តើ shell-operator αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αž½αž€αžœαžΆαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαžŠαŸ‚αžšαž¬αž‘αŸ?
  • αž…αž»αŸ‡β€‹αž’αž“αž’αžΆαž“β€‹αžŠαŸ‚αž›β€‹αž”αŸ’αžšαžΎβ€‹αž”αŸ’αžšαžΆαžŸαŸ‹β€‹αžŠαžΌαž…β€‹αž‡αžΆ αž’αž„αŸ’αž‚β€‹αž…αž„αž…αžΆαŸ† αž“αž·αž„ CPU αžœαž·αž‰?

αž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž›αž˜αžΆαž“αž™αž“αŸ’αžαž€αžΆαžšαžαž˜αŸ’αžšαž„αŸ‹αž‡αž½αžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αŸ” αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαž˜αŸ’αžšαž„αŸ‹αž‡αž½αžš αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αž…αžΌαžšαž™αžΎαž„αž”αž„αŸ’αž αžΆαž‰αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž§αž‘αžΆαž αžšαžŽαŸαŸ” αž§αž”αž˜αžΆαžαžΆαž™αžΎαž„αž˜αžΆαž“αž‘αŸ†αž–αž€αŸ‹αž–αžΈαžšαŸ” αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŠαŸ†αž”αžΌαž„αž‚αžΊαž‘αŸ…αž‘αŸ†αž–αž€αŸ‹αžŠαŸ†αž”αžΌαž„αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹ αž‡αž½αžšαž“αžΉαž„αž‘αŸ…αž˜αž»αžαŸ” αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž”αžΈαž”αž“αŸ’αž‘αžΆαž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαž‘αŸ…αž‘αŸ†αž–αž€αŸ‹αž‘αžΈαž–αžΈαžš - αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰αž–αžΈαž‡αž½αžšαž αžΎαž™αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ "αž”αžΆαž…αŸ‹" αŸ” αž“αŸ„αŸ‡αž‚αžΊαž‡αžΆ hook αž‘αž‘αž½αž›αž”αžΆαž“αž’αžΆαžšαŸαž“αŸƒαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸ β€” αž¬αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹αž‡αžΆαž„αž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αž’αžΆαžšαŸαž“αŸƒαž”αžšαž·αž”αž‘αž…αž„αŸ”

αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž•αž„αžŠαŸ‚αžšαŸ” αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž‘αŸ…αž‡αžΆαž’αŸ†αž˜αž½αž™αŸ”. αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž…αŸ†αž–αŸ„αŸ‡αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ group αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αž„αŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž…αŸ†αž“αž½αž“αž‡αž½αžš/αž‘αŸ†αž–αž€αŸ‹αžŽαžΆαž˜αž½αž™ αž“αž·αž„αž”αž“αŸ’αžŸαŸ†αž•αŸ’αžŸαŸαž„αŸ—αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž‡αž½αžšαž˜αž½αž™αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αŸ†αž–αž€αŸ‹αž–αžΈαžš αž¬αž…αŸ’αžšαžΆαžŸαž˜αž€αžœαž·αž‰αŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

αž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‚αžΊαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžœαžΆαž›αžŸαŸ’αžšαž”αžαžΆαž˜ queue αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αž„αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžˆαŸ’αž˜αŸ„αŸ‡αž‡αž½αžšαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž“αŸ„αŸ‡αž‘αŸ†αž–αž€αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž‡αž½αžšαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ (default) αž™αž“αŸ’αžαž€αžΆαžšαžŠαžΆαž€αŸ‹αž‡αž½αžšαž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αŸ†αž–αž€αŸ‹αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž™αžΎαž„αž”αžΆαž“αž–αž“αŸ’αž™αž›αŸ‹αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž‡αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš Kubernetes αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž“αž·αž„αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αŸ’αžšαžΉαž„αž”αŸ’αžšαŸ‚αž„ αž αžΎαž™αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž’αŸ†αž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› αž€αŸαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“αžšαž αŸαžŸαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αŸ’αžšαžΎαžœαžΆ αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” αžƒαŸ’αž›αžΆαŸ†αž„αž“αŸ…αž›αžΎ GitHub. αž€αž»αŸ†αžŸαŸ’αž‘αžΆαž€αŸ‹αžŸαŸ’αž‘αžΎαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž‘αžΆαž€αŸ‹αž‘αž„αž˜αž€αž™αžΎαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸ†αžŽαž½αžš: αž’αŸ’αž“αž€αž’αžΆαž…αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž–αž½αž€αž‚αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αžŸαŸαžŸαž˜αž½αž™αŸ” αž€αŸ’αžšαž»αž˜ Telegram (αž‡αžΆαž—αžΆαžŸαžΆαžšαž»αžŸαŸ’αžŸαžΈ) αž¬αž€αŸ’αž“αž»αž„ αžœαŸαž‘αž·αž€αžΆαž“αŸαŸ‡αŸ” (αž‡αžΆβ€‹αž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸ)αŸ”

αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αžαžœαžΆ αž™αžΎαž„αžαŸ‚αž„αžαŸ‚αžšαžΈαž€αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαžƒαžΎαž‰αž”αž‰αŸ’αž αžΆαžαŸ’αž˜αžΈαŸ— / PR / αžαžΆαžšαžΆαž“αŸ…αž›αžΎ GitHub αžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αž’αŸ’αž“αž€αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž‚αž˜αŸ’αžšαŸ„αž„αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ. αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž–αž½αž€αž‚αŸαžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž“αŸ’αž›αž·αž… addon-operatorαžŠαŸ‚αž›αž‡αžΆαž”αž„αž”αŸ’αžšαž»αžŸαž’αŸ†αžšαž”αžŸαŸ‹αžŸαŸ‚αž›-αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš. αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸαŸ‡αž”αŸ’αžšαžΎαž‚αŸ†αž“αžΌαžŸαžαžΆαž„ Helm αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αž“αŸ’αžαŸ‚αž˜ αž’αžΆαž…αž•αŸ’αžαž›αŸ‹αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαž αž“αž·αž„αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš/αžαž˜αŸ’αž›αŸƒαžαžΆαžšαžΆαž„αž•αŸ’αžŸαŸαž„αŸ— αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžαžΆαžšαžΆαž„ αž αžΎαž™αž€αŸαž’αžΆαž…αž€αŸ‚αž”αŸ’αžšαŸ‚αž–αž½αž€αžœαžΆαž‡αžΆαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž•αž„αžŠαŸ‚αžšαŸ”

αž‘αŸ…? αž”αžΆαžŸ! αž‡αž½αž”αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαŸ‚αž› (αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰ αž“αž·αž„αžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαžœαžΈαžŠαŸαž’αžΌαž–αžΈ KubeCon EU'2020)

វីដេធូ αž“αž·αž„αžŸαŸ’αž›αžΆαž™

αžœαžΈαžŠαŸαž’αžΌαž–αžΈαž€αžΆαžšαžŸαž˜αŸ’αžαŸ‚αž„ (~្៣ αž“αžΆαž‘αžΈ)αŸ–


αž”αž‘αž”αž„αŸ’αž αžΆαž‰αž“αŸƒαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸαŸ–

PS

αžŸαžΌαž˜αž’αžΆαž“αž•αž„αžŠαŸ‚αžšαž“αŸ…αž›αžΎαž”αŸ’αž›αž€αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹