αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ KubernetesαŸ– αžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–

αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes

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

αž“αž·αž™αžΆαž™αž±αŸ’αž™αžŸαžΆαž˜αž‰αŸ’αž‰ αžŠαžΎαž˜αŸ’αž”αžΈαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž”αŸ’αžšαžΆαŸ†αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž“αŸƒαž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž™αž“αŸ…αž€αŸ’αž“αž»αž„ PHP/Ruby/Python αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž€αž»αž„αžαžΊαž“αŸαžš αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ’αž˜αžΈ 5 αžŠαž„ αž“αž·αž„αž…αž˜αŸ’αž›αž„αž”αŸ’αžšαž—αž–αŸ” αžŠαŸ„αž™αžŸαžΆαžšαž‘αžΆαŸ†αž„αž€αžΌαžŠαž”αŸ’αžšαž—αž– αž“αž·αž„αžŸαŸ’αž‚αŸ’αžšαžΈαž” init αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž‚αŸ’αž˜αžΆαž“αžšαžŠαŸ’αž‹αž€αŸ’αž›αžΆαž™αž‡αžΆαž”αž‹αž˜αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ” αž€αŸ’αž“αž»αž„αž“αžΆαž˜αž‡αžΆαž’αŸ’αž“αž€αž‚αžΆαŸ†αž‘αŸ’αžšαž“αŸƒαž€αž»αž„αžαžΊαž“αŸαžš αž“αž·αž„αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αžΈαž€αŸ’αžšαžΌαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹ αž€αžΆαžšαž›αŸ†αž”αžΆαž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαžŠαŸ’αž‹, i.e. αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž”αŸ‹αž›αžΆαž”αŸ‹αžŠαžΌαž…αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹ (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...)αŸ” αž“αŸαŸ‡αž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž―αž€αžšαžΆαž‡αŸ’αž™αž“αžΌαžœαž€αŸ’αžšαž»αž˜αž€αžΌαžšαŸ‰αž»αž˜ (αž§αž‘αžΆαž αžšαžŽαŸ Percona XtraDB αž“αž·αž„ Cassandra) αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž‘αžΆαž˜αž‘αžΆαžšαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ (αžŠαžΌαž…αž‡αžΆ Redis, MySQL, PostgreSQL...)αŸ”

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

αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš CoreOS

αžŠαžΎαž˜αŸ’αž”αžΈ "αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ" αž…αŸ†αž“αŸαŸ‡αžŠαžΉαž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸ…αž…αž»αž„αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“αž‚αž˜αŸ’αžšαŸ„αž„ CoreOS αžŽαŸ‚αž“αžΆαŸ† "αžαŸ’αž“αžΆαž€αŸ‹αžαŸ’αž˜αžΈαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαŸαž‘αž·αž€αžΆ Kubernetes - αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš (αž–αžΈαž—αžΆαžŸαžΆαž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸ "αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš" αž–αŸ„αž›αž‚αžΊ "αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš") αŸ”

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

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

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

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

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

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

  1. αž‡αžΆαžœαž”αŸ’αžšαž…αžΆαŸ†αž‘αŸ… API αž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes;
  2. αž‘αž‘αž½αž›αž–αžΈαžœαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ†αž–αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’ (αž’αŸ†αž–αžΈαžšαž”αžŸαŸ‹αžœαžΆαŸ” αžˆαž»αžαž…αž˜αŸ’αž›αž„, αž•αŸ’αž›αŸ‚αž€αž½αžš, αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž›β€‹αž›αŸ”);
  3. αž‘αž‘αž½αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αŸ†αž–αžΈ αž’αž“αž’αžΆαž“αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈ (αžŸαžΌαž˜αž˜αžΎαž›αž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜);
  4. αž”αŸ’αžšαžαž·αž€αž˜αŸ’αž˜αž‘αŸ…αž“αžΉαž„αžšαžΌαž”αžšαžΆαž„ / αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž’αž“αž’αžΆαž“αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈ (αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ†αž αŸ† αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αŸ†αžŽαŸ‚ αž αžΎαž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž›αžΎ);
  5. αž”αŸ’αžšαžαž·αž€αž˜αŸ’αž˜αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’ (αž’αŸ†αž–αžΈαžšαž”αžŸαŸ‹αžœαžΆαŸ” αžˆαž»αžαž…αž˜αŸ’αž›αž„, αž•αŸ’αž›αŸ‚αž€αž½αžš, αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž›β€‹αž›αŸ”);
  6. αžŸαŸ†αžαžΆαž“αŸ‹β€‹αž”αŸ†αž•αž»αž:
    1. αž’αŸ†αž–αžΆαžœαž“αžΆαžœαž“αŸ…αž›αžΎ Kubernetes API αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžš (αž˜αŸ’αžαž„αž‘αŸ€αž αžšαž”αžŸαŸ‹αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹ αžˆαž»αžαž…αž˜αŸ’αž›αž„, αž•αŸ’αž›αŸ‚αž€αž½αžš, αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜... ),
    2. αž’αž“αž»αžœαžαŸ’αžαžœαŸαž‘αž˜αž“αŸ’αžαž˜αž½αž™αž…αŸ†αž“αž½αž“ (αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαž½αž› αž’αŸ’αž“αž€αž’αžΆαž…αž‚αž·αžαžαžΆ Operator αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ pods αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„ αž αžΎαž™αž αŸ…αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αžšαž½αž˜αž‡αžΆαž˜αž½αž™ cluster ឬ upgrade format αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž–αŸαž› update version)αŸ”

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

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

αž§αž‘αžΆαž αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ αž›αŸ” (αžŸαžΌαž˜αž˜αžΎαž›αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

αž§αž‘αžΆαž αžšαžŽαŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ ElasticsearchαŸ–

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš

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

  1. αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžαŸ’αžšαžΌαžœαžαŸ‚αž’αŸ’αžœαžΎαž‘αžΎαž„αžαžΆαž˜αžšαž™αŸˆαžαŸ‚αž˜αž½αž™ αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™: kubectl αž”αž„αŸ’αž€αžΎαž -f SOME_OPERATOR_URL/deployment.yaml - αž αžΎαž™αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸαŸ”
  2. αž“αŸ…αž–αŸαž›αžŠαŸ†αž‘αžΎαž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž”αŸ’αžšαž—αŸαž‘αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈαžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž (αž’αž“αž’αžΆαž“αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈ). αžŠαžΎαž˜αŸ’αž”αžΈαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (cluster instances) αž“αž·αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αž½αž€αžœαžΆαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αž (αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž€αŸ†αžŽαŸ‚ αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ†αž αŸ†αŸ”αž›αŸ”) αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αžΉαž„αž”αŸ’αžšαžΎαž”αŸ’αžšαž—αŸαž‘αž“αŸαŸ‡αŸ”
  3. αž“αŸ…αž–αŸαž›αžŽαžΆαžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“ αž’αŸ’αž“αž€αž‚αž½αžšαžαŸ‚αž”αŸ’αžšαžΎαž”αž»αž–αŸ’αžœαž”αž‘αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αžŠαžΌαž…αž‡αžΆ αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ ΠΈ αžˆαž»αžαž…αž˜αŸ’αž›αž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž€αžΌαžŠαžŠαŸ‚αž›αž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„ αž“αž·αž„αž’αžΆαž…αž™αž›αŸ‹αž”αžΆαž“αŸ”
  4. αž‘αžΆαž˜αž‘αžΆαžšαž—αžΆαž–αž†αž”αž‚αŸ’αž“αžΆαžαž™αž€αŸ’αžšαŸ„αž™αžšαž”αžŸαŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš αž“αž·αž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ†αžŽαŸ‚αž…αžΆαžŸαŸ‹αž“αŸƒαž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”
  5. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αž›αž½αž“αžœαžΆαž‚αž½αžšαžαŸ‚αž”αž“αŸ’αžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ”
  6. αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‚αž½αžšαžαŸ‚αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž€αŸ†αžŽαŸ‚αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“ αž“αž·αž„αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαž€αŸ†αžŽαŸ‚αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž€αž„αŸ’αžœαŸ‡αž€αžΆαžšαž’αžΆαž”αŸ‹αžŠαŸαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αž–αž‘αžΌαž‘αŸ…αž“αŸƒαž”αž‰αŸ’αž αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž“αž·αž„αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžαŸ’αžšαžΌαžœαžαŸ‚αž‡αž½αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αŸ”
  7. αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžŠαžΌαž…αž‡αžΆ Chaos Monkey αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž•αž αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ αž“αž·αž„αž”αžŽαŸ’αžαžΆαž‰αŸ”

αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš etcd

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš - αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš etcd, αžšαŸ€αž”αž…αŸ† αž“αŸ…αžαŸ’αž„αŸƒαž”αŸ’αžšαž€αžΆαžŸαž“αŸƒαž‚αŸ†αž“αž·αžαž“αŸαŸ‡αŸ” αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ cluster etcd αž’αžΆαž…αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αžŠαŸ„αž™αžŸαžΆαžšαžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž€αžΌαžšαŸ‰αž»αž˜ αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαž˜αžΆαž‡αž·αž€αž€αŸ’αžšαž»αž˜αž‘αžΎαž„αžœαž·αž‰ αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž”αž˜αŸ’αžšαž»αž„αž‘αž»αž€αŸ”αž›αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“ αž…αž„αŸ’αž€αŸ„αž˜ etcd αžŠαŸ„αž™αžŠαŸƒαž˜αžΆαž“αž“αŸαž™αžαžΆ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαžˆαŸ’αž˜αŸ„αŸ‡ DNS αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž˜αžΆαž‡αž·αž€αž…αž„αŸ’αž€αŸ„αž˜αžαŸ’αž˜αžΈ αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αž„αŸ’αž‚αž—αžΆαž– etcd αžαŸ’αž˜αžΈ αž“αž·αž„αž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αžŠαž›αŸ‹αž…αž„αŸ’αž€αŸ„αž˜αž’αŸ†αž–αžΈαžŸαž˜αžΆαž‡αž·αž€αžαŸ’αž˜αžΈ (αž”αž“αŸ’αžαŸ‚αž˜αžŸαž˜αžΆαž‡αž·αž€ etcdctl) αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ†αž αŸ†αž…αž„αŸ’αž€αŸ„αž˜αžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ - αž’αŸ’αžœαžΈαŸ—αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”

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

  1. αžŸαž„αŸ’αž€αŸαžαŸ” αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž…αž„αŸ’αž€αŸ„αž˜αžŠαŸ„αž™αž”αŸ’αžšαžΎ Kubernetes API αŸ”
  2. αž€αžΆαžšαžœαž·αž—αžΆαž‚αŸ” αžŸαŸ’αžœαŸ‚αž„αžšαž€αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž“αž·αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž”αžΆαž“ (αž€αŸ†αžŽαžαŸ‹αžŠαŸ„αž™αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹)αŸ”
  3. αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αŸ” αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžŠαŸ„αž™αž”αŸ’αžšαžΎ APIs αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ etcd αž“αž·αž„/ឬ Kubernetes αŸ”

αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ KubernetesαŸ– αžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžαžΆαž“αž—αžΆαž–

αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž“αŸαŸ‡ αž˜αž»αžαž„αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš αž”αž„αŸ’αž€αžΎαž/αž”αŸ†αž•αŸ’αž›αžΆαž‰ (αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž›αž»αž”αžŸαž˜αžΆαž‡αž·αž€αž€αŸ’αžšαž»αž˜ etcd) αž“αž·αž„ αž”αŸ’αžŠαžΌαžšαž‘αŸ†αž αŸ† (αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž…αŸ†αž“αž½αž“αžŸαž˜αžΆαž‡αž·αž€αž€αŸ’αžšαž»αž˜) αŸ” αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžŽαŸˆαž“αŸƒ Chaos Monkey αž–αžΈ Netflix αž–αŸ„αž›αž‚αžΊαž§αŸ” αž€αžΆαžšαžŸαž˜αŸ’αž›αžΆαž”αŸ‹αž•αŸ’αžŸαž·αž etcd αžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αŸ”

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

αžαžΎαž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž’αŸ’αžœαžΈ?

$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME                             READY     STATUS    RESTARTS   AGE
etcd-cluster-0000                1/1       Running   0          23s
etcd-cluster-0001                1/1       Running   0          16s
etcd-cluster-0002                1/1       Running   0          8s
etcd-cluster-backup-tool-rhygq   1/1       Running   0          18s

αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžšαž”αžŸαŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš etcd αž‚αžΊαž‡αžΆαž€αŸ†αžŽαŸ‚αž”αŸ‚αžαžΆ αžŠαŸ‚αž›αž‘αžΆαž˜αž‘αžΆαžš Kubernetes 1.5.3+ αž“αž·αž„ etcd 3.0+ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž€αžΌαžŠαž”αŸ’αžšαž—αž– αž“αž·αž„αž―αž€αžŸαžΆαžš (αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹) αž˜αžΆαž“αž“αŸ… GitHub.

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

αžŸαŸ’αžαžΆαž“αž—αžΆαž– αž“αž·αž„αž€αžΆαžšαžšαŸ†αž–αžΉαž„αž‘αž»αž€

5 αžαŸ‚αž”αžΆαž“αž€αž“αŸ’αž›αž„αž•αž»αžαž‘αŸ…αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαžšαž”αžŸαŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš Kubernetes αŸ” αž“αŸ…αžαŸ‚αž˜αžΆαž“αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž–αžΈαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ CoreOS αž•αŸ’αž›αžΌαžœαž€αžΆαžš (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ etcd αž“αž·αž„ Prometheus) αŸ” αž‘αžΆαŸ†αž„αž–αžΈαžšαž˜αž·αž“αž‘αžΆαž“αŸ‹αžˆαžΆαž“αžŠαž›αŸ‹αž€αŸ†αžŽαŸ‚αžαŸαžšαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž“αŸ…αž‘αžΎαž™αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž”αŸ’αžαŸαž‡αŸ’αž‰αžΆαž…αž·αžαŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž„αŸ’αž€αŸαžαž‡αžΆαžšαŸ€αž„αžšαžΆαž›αŸ‹αžαŸ’αž„αŸƒαŸ”

αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαŸ’αžšαž˜αŸƒαžαžΆ "αž’αž“αžΆαž‚αžαžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Postgres Operators Cassandra Operators ឬ Redis Operators αž“αŸ…αž›αžΎαž…αž„αŸ’αž€αŸ„αž˜ Kubernetes αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž αžΎαž™αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž’αž„αŸ’αž‚αž—αžΆαž–αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αž”αžΆαž“αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŠαžΌαž…αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αž˜αŸ’αž›αž„αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αžŽαŸ’αžαžΆαž‰αž‚αŸ’αž˜αžΆαž“αžšαžŠαŸ’αž‹αž‚αžΊαžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡αŸ”" αž‘αžΈαž˜αž½αž™ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž–αžΈαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž—αžΆαž‚αžΈαž‘αžΈαž”αžΈ αž–αž·αžαž‡αžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž›αŸαž…αž‘αžΎαž„αŸ–

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

PS αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘! αž‡αžΆαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž˜αž‡αŸ’αžˆαž˜αžŽαŸ’αžŒαž›αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”αžŠαžΎαž˜αŸ’αž”αžΈαž€αž»αŸ†αž±αŸ’αž™αžαž€αžαžΆαž“αžŸαž˜αŸ’αž—αžΆαžš αž“αž·αž„αžšαžΌαž”αž˜αž“αŸ’αžαžαŸ’αž˜αžΈαŸ—αž“αŸ…αž›αžΎαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’ DevOps αž“αž·αž„ GNU/Linux - αž™αžΎαž„αž“αžΉαž„αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αžœαžΆαž‡αžΆαž”αŸ’αžšαž…αžΆαŸ†!

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

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