αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž›αžΎαž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αž‡αžΆαž…αŸ’αžšαžΎαž“αž‡αžΆαž˜αž½αž™ Helm

αžšαž”αŸ€αž”αžŠαŸ‚αž› Dailymotion αž”αŸ’αžšαžΎ Kubernetes: αž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ

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

αžαžΎαžœαžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸ…αž―αžŽαžΆ

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

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

αž™αžΎαž„αž€αŸαž”αžΆαž“αžŸαžšαžŸαŸαžšαž’αž€αŸ’αžŸαžš Python αžαžΌαž…αž˜αž½αž™αž“αŸ…αž–αžΈαž›αžΎ Helm αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ αž”αž„αŸ’αž€αžΎαžαž‚αŸ†αž“αžΌαžŸαžαžΆαž„ αž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„ αž“αž·αž„αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž€αž·αž…αŸ’αž…αž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž›αžΎαžœαŸαž‘αž·αž€αžΆ CI αž€αžŽαŸ’αžαžΆαž›αžŠαŸ„αž™αž”αŸ’αžšαžΎαžšαžΌαž”αž—αžΆαž– docker αŸ”

αž…αžΌαžšαž™αžΎαž„αžˆαžΆαž“αžŠαž›αŸ‹αž…αŸ†αžŽαž»αž…αŸ”

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

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‚αŸ†αž“αžΌαžŸαžαžΆαž„

αž™αžΎαž„αž”αŸ’αžšαžΎαž€αžΆαžšαž”αŸ‚αž„αž…αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž αžΎαž™αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž’αž“αž»αžœαžαŸ’αžαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„αžαžΆαžšαžΆαž„αŸ”

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

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

αžƒαŸ’αž›αžΆαŸ†αž„αž‚αŸ†αž“αžΌαžŸαžαžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆ

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

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αžŸαŸ’αž‚αŸ’αžšαžΈαž” Python αžαžΌαž…αžšαž”αžŸαŸ‹αž™αžΎαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžαŸ’αžαž» Kubernetes αž˜αžΆαž“αžŸαž»αž–αž›αž—αžΆαž–αž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžšαž”αžŸαŸ‹ Kubernetes OpenAPI αžŠαŸ„αž™αž”αŸ’αžšαžΎ Kubevalαž˜αž»αž“αž–αŸαž›αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™αžœαžΆαž“αŸ…αž›αžΎ Chartmusem αŸ”

αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž‘αžΌαž‘αŸ…αž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžαžΆαžšαžΆαž„

  1. αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž„αžΆαžšαž”αŸ†αž–αž„αŸ‹αžαžΆαž˜αž›αž€αŸ’αžαžŽαŸˆαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ gazr.io αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‚αž»αžŽαž—αžΆαž– (lint, unit-test) αŸ”
  2. αž€αžΆαžšαžšαž»αž‰αžšαžΌαž”αž—αžΆαž– docker αž‡αžΆαž˜αž½αž™αž§αž”αž€αžšαžŽαŸ Python αžŠαŸ‚αž›αžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”
  3. αžšαŸ€αž”αž…αŸ†αž”αžšαž·αžŸαŸ’αžαžΆαž“αžαžΆαž˜αžˆαŸ’αž˜αŸ„αŸ‡αžŸαžΆαžαžΆαŸ”
  4. αž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αžΆαž“αžŸαž»αž–αž›αž—αžΆαž–αž―αž€αžŸαžΆαžš Kubernetes yaml αžŠαŸ„αž™αž”αŸ’αžšαžΎ Kubeval αŸ”
  5. αž”αž„αŸ’αž€αžΎαž“αž€αŸ†αžŽαŸ‚αž“αŸƒαž‚αŸ†αž“αžΌαžŸαžαžΆαž„ αž“αž·αž„αž‚αŸ†αž“αžΌαžŸαžαžΆαž„αž˜αŸαžšαž”αžŸαŸ‹αžœαžΆαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· (αž‚αŸ†αž“αžΌαžŸαžαžΆαž„αžŠαŸ‚αž›αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž‚αŸ†αž“αžΌαžŸαžαžΆαž„αžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš)αŸ”
  6. αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αžαžΆαžšαžΆαž„αž‘αŸ…αžŸαžΆαžšαž˜αž“αŸ’αž‘αžΈαžš Chartmuseum αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž“αžΉαž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžαžΆαž˜αž€αŸ’αžšαž»αž˜

αžŸαž αž–αŸαž“αŸ’αž’αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜

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

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

αžœαŸαž‘αž·αž€αžΆαž…αŸ‚αž€αž…αžΆαž™αž—αžΌαž˜αž·αžŸαžΆαžŸαŸ’αžαŸ’αžš

αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“β€‹αžœαŸαž‘αž·αž€αžΆβ€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž…αŸ‚αž€αž…αžΆαž™β€‹αž‘αžΌαž‘αžΆαŸ†αž„ 6 αžαŸ†αž”αž“αŸ‹ - 3 αž€αŸ’αž“αž»αž„β€‹αžŸαŸ’αžšαž»αž€ αž“αž·αž„ 3 αž€αŸ’αž“αž»αž„β€‹αž–αž–αž€αŸ”


αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž…αŸ‚αž€αž…αžΆαž™

αžαž˜αŸ’αž›αŸƒ Global Helm

αžαž˜αŸ’αž›αŸƒ Helm αžŸαž€αž›αž…αŸ†αž“αž½αž“ 4 αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž…αž„αŸ’αž€αŸ„αž˜αŸ” αž‚αŸ†αž“αžΌαžŸαžαžΆαž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž’αž”αŸ’αž”αž”αžšαž˜αžΆαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ”

global:
  cloud: True
  env: staging
  region: us-central1
  clusterName: staging-us-central1

αžαž˜αŸ’αž›αŸƒαžŸαž€αž›

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

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

αž“αŸαŸ‡αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ–

{{/* Returns Horizontal Pod Autoscaler replicas for GraphQL*/}}
{{- define "graphql.hpaReplicas" -}}
{{- if eq .Values.global.env "prod" }}
{{- if eq .Values.global.region "europe-west1" }}
minReplicas: 40
{{- else }}
minReplicas: 150
{{- end }}
maxReplicas: 1400
{{- else }}
minReplicas: 4
maxReplicas: 20
{{- end }}
{{- end -}}

αž‚αŸ†αžšαžΌαž‚αŸ†αžšαžΌαž˜αž½αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–

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

αžŸαŸαž…αž€αŸ’αžαžΈαž”αŸ’αžšαž€αžΆαžŸαž’αŸ†αž–αžΈαž–αžΆαž€αŸ’αž™αžŸαž»αŸ†

αž§αž”αž€αžšαžŽαŸαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎαž―αž€αžŸαžΆαžš YAML αž…αŸ’αžšαžΎαž“αŸ” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αž”αŸ’αžšαž€αžΆαžŸαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž˜αž½αž™ αž“αž·αž„αž’αžšαžŽαžΈαž˜αžΆαžαŸ’αžšαž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžšαž”αžŸαŸ‹αžœαžΆ (αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž…αž˜αŸ’αž›αž„) αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž˜αž½αž™αŸ”

releases:
  - foo.world

foo.world:                # Release name
  services:               # List of dailymotion's apps/projects
    foobar:
      chart_name: foo-foobar
      repo: [email protected]:dailymotion/foobar
      contexts:
        prod-europe-west1:
          deployments:
            - name: foo-bar-baz
              replicas: 18
            - name: another-deployment
              replicas: 3

αž“αž·αž™αž˜αž“αŸαž™αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜

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


αž‡αŸ†αž αžΆαž“αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ Jenkins

αž…αž»αŸ‡αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αžœαž·αž‰?

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

αž§αž”αž€αžšαžŽαŸαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΆαž‰αž™αž€αžαž˜αŸ’αž›αŸƒαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž–αžΈ Vault αž αžΎαž™αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αŸαž›αžœαŸαž›αžΆαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž˜αž€αžŠαž›αŸ‹ αžŸαžΌαž˜αž”αž‰αŸ’αž…αžΌαž›αž–αž½αž€αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„ Helm αŸ”

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

secrets:                                                                                                                                                                                                        
     - secret_id: "stack1-app1-password"                                                                                                                                                                                  
       contexts:                                                                                                                                                                                                   
         - name: "default"                                                                                                                                                                                         
           vaultPath: "/kv/dev/stack1/app1/test"                                                                                                                                                               
           vaultKey: "password"                                                                                                                                                                                    
         - name: "cluster1"                                                                                                                                                                           
           vaultPath: "/kv/dev/stack1/app1/test"                                                                                                                                                               
           vaultKey: "password"

  • αž™αžΎαž„β€‹αž”αžΆαž“β€‹αž€αŸ†αžŽαžαŸ‹β€‹αž…αŸ’αž”αžΆαž”αŸ‹β€‹αž‘αžΌαž‘αŸ…β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž’αž“αž»αžœαžαŸ’αžβ€‹αž“αŸ…αž–αŸαž›β€‹αž€αžαŸ‹αžαŸ’αžšαžΆβ€‹αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„β€‹αž“αŸ…αž€αŸ’αž“αž»αž„β€‹αž”αž“αŸ’αž‘αž”αŸ‹β€‹αž‚αŸαž„αŸ”
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αž αž‘αŸ…αž”αžšαž·αž”αž‘αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αž¬αž…αž„αŸ’αž€αŸ„αž˜αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜αž’αžΆαžαž»αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” (αž“αŸ…αž‘αžΈαž“αŸαŸ‡ context cluster1 αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ secret stack-app1-password)αŸ”
  • αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž‘αŸαžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜.
  • αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžΆαžαž»αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„ αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„ Kubernetes αž‚αžΌαžαž˜αŸ’αž›αŸƒαžŸαŸ„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž‚αŸ†αžšαžΌαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αžŽαžΆαžŸαŸ‹αŸ”

apiVersion: v1
data:
{{- range $key,$value := .Values.secrets }}
  {{ $key }}: {{ $value | b64enc | quote }}
{{ end }}
kind: Secret
metadata:
  name: "{{ .Chart.Name }}"
  labels:
    chartVersion: "{{ .Chart.Version }}"
    tillerVersion: "{{ .Capabilities.TillerVersion.SemVer }}"
type: Opaque

αž”αž‰αŸ’αž αžΆαž“αž·αž„αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹

αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžƒαŸ’αž›αžΆαŸ†αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”

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

αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αŸ†αž“αžΌαžŸαžαžΆαž„αž‘αžΌαž‘αŸ…αž‚αžΊαž‡αžΆαž€αžΆαžšαž–αž·αž”αžΆαž€

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

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

αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αŸ’αžšαžΎαž“αŸ”

αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αž“αŸ’αžαŸ‚αž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αž˜αžΈ αž‚αžΆαžαŸ‹αžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž―αž€αžŸαžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ– αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž”αž‰αŸ’αž‡αžΈαž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„ αž”αž“αŸ’αžαŸ‚αž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž€αžΆαžšαž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‘αžΌαž‘αŸ…αŸ”

αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžšαž”αžŸαŸ‹ Jenkins αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž„αŸ’αžšαžΈαž€αž–αŸαž€αž“αŸ…αž€αŸ’αž“αž»αž„ Vault

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž˜αžΆαž“αž˜αž½αž™αŸ” AppRoleαžŠαŸ‚αž›αž’αžΆαž“αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈαžαž»αžŠαŸαž€αŸ”

αžŠαŸ†αžŽαžΎαžšβ€‹αž€αžΆαžšβ€‹αžαŸ’αžšαž‘αž”αŸ‹β€‹αžœαž·αž‰β€‹αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαŸ’αžœαŸαž™β€‹αž”αŸ’αžšαžœαžαŸ’αžαž·β€‹αž‘αŸαŸ”

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

αž™αžΎαž„αž€αŸ†αž–αž»αž„αž†αŸ’αž–αŸ„αŸ‡αž‘αŸ…αž€αžΆαž“αŸ‹ GitOps

αž‚αŸ„αž›αžŠαŸ…β€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„

αž™αžΎαž„αž…αž„αŸ‹αžαŸ’αžšαž‘αž”αŸ‹αžαžΆαžšαžΆαž„αž‘αŸ…αžƒαŸ’αž›αžΆαŸ†αž„αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αžœαžΆαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αŸ”

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

αž˜αžΆαž“αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ–

  • αž…αŸ’αžšαžΎαž“ αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αž”αžΆαžŸαŸ‹ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ” αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžšαŸ€αž“αž–αžΈαžšαž”αŸ€αž”αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ”
  • αž“αž·αž™αž˜αž“αŸαž™αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž€αž“αŸ’αž›αŸ‚αž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αž›αŸαžαž€αžΌαžŠ αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ”
  • αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαžŠαž€αž…αŸαž‰αž“αžΌαžœαž‚αŸ†αž“αžΌαžŸαžαžΆαž„αž‘αžΌαž‘αŸ…. αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž“αŸαŸ‡αž“αžΉαž„αž˜αžΆαž“αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ Helm αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αŸ” αžœαžΆβ€‹αž“αžΉαž„β€‹αž’αž“αž»αž‰αŸ’αž‰αžΆαžβ€‹αž±αŸ’αž™β€‹αž’αŸ’αž“αž€β€‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„β€‹αžœαžŠαŸ’αžβ€‹αž‡αžΈαžœαž·αžβ€‹αžšαž”αžŸαŸ‹β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (rollback, upgrade) αž“αŸ…β€‹αž€αž˜αŸ’αžšαž·αžβ€‹αžαžΌαž…β€‹αž”αŸ†αž•αž»αž αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž€αž»αŸ†αž±αŸ’αž™β€‹αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹β€‹αžŠαž›αŸ‹β€‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜β€‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”
  • αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸƒ git αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αŸ†αž“αžΌαžŸαžαžΆαž„αŸ– αž˜αž·αž“αž’αŸ’αžœαžΎαžœαž·αž‰αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŸαžœαž“αž€αž˜αŸ’αž˜αŸ”αž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž˜αž·αž“αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αžαžΆαžšαžΆαž„ αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ git αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”
  • αž’αŸ’αž“αž€αž’αžΆαž…αž–αž·αž…αžΆαžšαžŽαžΆαž€αŸ‚αž›αž˜αŸ’αž’αž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžŠαžΌαž…αž‡αžΆ SkaffoldαžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž’αžΆαž…αžŸαžΆαž€αž›αŸ’αž”αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž”αž‘αž‡αž·αžαž“αžΉαž„αž€αžΆαžšαž•αž›αž·αžαŸ”

αž€αžΆαžšαž’αŸ’αžœαžΎαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αž–αžΈαžšαž‡αŸ†αž αžΆαž“

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

  • αž™αžΎαž„αžšαž€αŸ’αžŸαžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžαŸ’αžαž»αžαŸ‚αž˜αž½αž™αž αŸ…αžαžΆ DailymotionReleaseαŸ”

apiVersion: "v1"
kind: "DailymotionRelease"
metadata:
  name: "app1.ns1"
  environment: "dev"
  branch: "mybranch"
spec:
  slack_channel: "#admin"
  chart_name: "app1"
  scaling:
    - context: "dev-us-central1-0"
      replicas:
        - name: "hermes"
          count: 2
    - context: "dev-europe-west1-0"
      replicas:
        - name: "app1-deploy"
          count: 2
  secrets:
    - secret_id: "app1"
      contexts:
        - name: "default"
          vaultPath: "/kv/dev/ns1/app1/test"
          vaultKey: "password"
        - name: "dev-europe-west1-0"
          vaultPath: "/kv/dev/ns1/app1/test"
          vaultKey: "password"

  • αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ 1 αž€αŸ’αž“αž»αž„αž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αžαžΆαžšαžΆαž„αž‘αžΌαž‘αŸ…) αŸ”
  • αž‚αŸ†αž“αžΌαžŸαžαžΆαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ git αžšαž”αžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ”

αž™αžΎαž„αž”αžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αŸ†αžŽαžΆαž€αžŸαŸ’αžšαž»αž€αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžšαž½αž…αž αžΎαž™αŸ” αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αž”αžΌαž„αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαžœαŸαž‘αž·αž€αžΆ CI αŸ” αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžŸαžšαžŸαŸαžšαž”αŸ’αžšαž€αžΆαžŸαž˜αž½αž™αž‘αŸ€αžαž€αŸ’αž“αž»αž„αž–αŸαž›αž†αžΆαž”αŸ‹αŸ—αž“αŸαŸ‡αž’αŸ†αž–αžΈαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΈ XNUMXαŸ– αžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž‘αŸ…αž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžš GitOps αž‡αžΆαž˜αž½αž™ ហូរ. αžαŸ’αž‰αž»αŸ†β€‹αž“αžΉαž„β€‹αž”αŸ’αžšαžΆαž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αž–αžΈβ€‹αžšαž”αŸ€αž”β€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αžšαŸ€αž”αž…αŸ†β€‹αž’αŸ’αžœαžΈβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„ αž“αž·αž„β€‹αž€αžΆαžšβ€‹αž›αŸ†αž”αžΆαž€β€‹αžŽαžΆβ€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αž‡αž½αž”β€‹αž”αŸ’αžšαž‘αŸ‡ (αžƒαŸ’αž›αžΆαŸ†αž„β€‹αž…αŸ’αžšαžΎαž“ αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„ αŸ”αž›αŸ”) αžαžΆαž˜αžŠαžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αŸ”

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

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

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