αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž»αž„αžαžΊαž“αŸαžš KubernetesαŸ– αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž–

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž»αž„αžαžΊαž“αŸαžš KubernetesαŸ– αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž–

TL; αž€αž»αž„

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

αžαžΎαž‚αŸ†αžšαžΌαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž–αž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈ?

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

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŸαž„αŸ’αž€αŸαžαžαŸ’αž–αžŸαŸ‹ (HOP)

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

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž–αž€αžŠαŸ‚αž›αž”αžΆαž“αžšαž…αž“αžΆαž™αŸ‰αžΆαž„αž›αŸ’αž’αž€αžαŸ‹αžαŸ’αžšαžΆαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αžšαž”αžŸαŸ‹αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαŸ’αž‘αŸ’αžšαžΈαž˜ I/O αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš STDERR αž“αž·αž„ STDOUT αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αžΆαž“αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‡αŸ†αž“αž½αž™ αž§αž‘αžΆαž αžšαžŽαŸ filebeat, logstash ឬ fluentd αž”αž‰αŸ’αž‡αžΌαž“αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž‘αŸ…αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž€αžŽαŸ’αžαžΆαž› (αž§αž‘αžΆαž αžšαžŽαŸ Prometheus) αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž» (αžˆαž»αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ ELK)αŸ” αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž”αž„αŸ’αž αžΆαž‰αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž–αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž™αŸ„αž„αžαžΆαž˜αž‚αŸ†αžšαžΌαžαŸαžŸαŸ’αžαžŸαž»αžαž—αžΆαž– αž“αž·αž„αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžŸαž„αŸ’αž€αŸαžαžαŸ’αž–αžŸαŸ‹αŸ”

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž»αž„αžαžΊαž“αŸαžš KubernetesαŸ– αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž–

αžαžΎαž’αŸ’αžœαžΎαžŠαžΌαž…αž˜αŸ’αžαŸαž…αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž‚αŸ†αžšαžΌαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž–αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes?

αž…αŸαž‰αž–αžΈαž”αŸ’αžšαž’αž”αŸ‹ k8s αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžšαž”αžŸαŸ‹ pods αžŠαŸ„αž™αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαž˜αž½αž™ (αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αŸ”, αžˆαž»αžαž…αž˜αŸ’αž›αž„, DaemonSets, αžŸαŸ†αžŽαž»αŸ†αžšαžŠαŸ’αž‹ αž‡αžΆαžŠαžΎαž˜) αŸ” αžŠαŸ„αž™αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžαžΆαž•αžαž”αžΆαž“αž’αŸ’αž›αžΆαž€αŸ‹αž…αž»αŸ‡αžŠαŸ„αž™αžŸαžΆαžšαž αŸαžαž»αž•αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαž–αŸ’αž™αžΆαž™αžΆαž˜αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžœαžΆαž‘αžΎαž„αžœαž·αž‰ αž¬αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαžœαžΆαž‘αŸ…αžαŸ’αž“αžΆαŸ†αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž•αžαž’αžΆαž…αžšαžΆαž™αž€αžΆαžšαžŽαŸαžαžΆαžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž αžΎαž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸαŸ” αžŸαžΌαž˜αž•αŸ’αžαž›αŸ‹αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αŸ– αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ Apache αž‡αžΆ web server αž’αŸ’αž“αž€αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αžŸαž˜αžΆαžŸαž—αžΆαž‚αž“αŸ…αž›αžΎ cluster pods αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αžŠαŸ„αž™αžŸαžΆαžšαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αžŸαŸ†αžŽαžΎαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž…αŸ†αž–αŸ„αŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž†αŸ’αž›αžΎαž™αžαž”αž‡αžΆαž˜αž½αž™αž›αŸαžαž€αžΌαžŠ 500 (αž€αŸ†αž αž»αžŸαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαžΆαž„αž€αŸ’αž“αž»αž„)αŸ” αž“αŸ…αž–αŸαž›αž–αž·αž“αž·αžαŸ’αž™αž€αžΆαžšαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“ αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžšαž”αžŸαŸ‹αž•αžαž•αž αž•αŸ’αžαž›αŸ‹αž›αž‘αŸ’αž’αž•αž›αž‡αŸ„αž‚αž‡αŸαž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αžαž·αžαž·αž‡αž“αž‚αž·αžαžαž»αžŸαž‚αŸ’αž“αžΆαŸ” αž™αžΎαž„αž“αžΉαž„αžšαŸ€αž”αžšαžΆαž”αŸ‹αž–αžΈαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž›αž˜αž·αž“αž…αž„αŸ‹αž”αžΆαž“αž“αŸαŸ‡αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž»αž„αžαžΊαž“αŸαžš KubernetesαŸ– αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž–

αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„ k8s αž’αŸ’αžœαžΎ αž–αž·αž“αž·αžαŸ’αž™αž˜αž»αžαž„αžΆαžš. αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž“αŸαŸ‡ kubelet αž”αž“αŸ’αžαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž»αž„αžαžΊαž“αŸαžšαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž‚αžΆαžαŸ‹αž™αž›αŸ‹αžαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αžˆαž”αŸ‹ αž‚αžΆαžαŸ‹αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžœαžΆαž‘αžΎαž„αžœαž·αž‰αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αŸ†αž αž»αžŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ„αž™αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΎαž„αžœαž·αž‰ αž αžΎαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αž·αž‘αž€αŸ†αž αž»αžŸαžŽαžΆαž˜αž½αž™αž“αŸ„αŸ‡ αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž–αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžαžΆαž˜ NOP αž“αž·αž„αž‚αŸ†αžšαžΌαžαŸαžŸαŸ’αžαžŸαž»αžαž—αžΆαž–αŸ” αž€αžΆαžšαž’αžΆαžŽαž·αžαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž‚αžΊαžαžΆαž˜αž·αž“αž˜αŸ‚αž“αž€αŸ†αž αž»αžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž›αžŠαŸ„αž™αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αž‘αŸαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ k8s αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžœαž·αž’αžΈαž€αžΆαž“αŸ‹αžαŸ‚αžŸαŸŠαžΈαž‡αž˜αŸ’αžšαŸ…αž…αŸ†αž“αž½αž“ 2 αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž•αžαŸˆ αž€αžΆαžšαžŸαŸŠαžΎαž”αž’αž„αŸ’αž€αŸαžαž€αžΆαžšαžšαžŸαŸ‹αž“αŸ… ΠΈ αž€αžΆαžšαžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“.

LivenessProbe

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

  • αžšαŸ€αž”αž…αŸ†αžŸαŸ†αžŽαžΎ HTTP αž‘αŸ…αž€αžΆαž“αŸ‹αž•αžαŸ” αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž›αŸαžαž€αžΌαžŠαž†αŸ’αž›αžΎαž™αžαž” HTTP αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αž–αžΈ 200 αžŠαž›αŸ‹ 399αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž›αŸαžαž€αžΌαžŠ 5xx αž“αž·αž„ 4xx αž”αž„αŸ’αž αžΆαž‰αžαžΆαž•αžαž€αŸ†αž–αž»αž„αž˜αžΆαž“αž”αž‰αŸ’αž αžΆ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸαžŠαŸ„αž™αŸ”
  • αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αž•αžαž•αžαž‡αžΆαž˜αž½αž™αž“αžΉαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž˜αž·αž“αž˜αŸ‚αž“ HTTP (αž§αž‘αžΆαž αžšαžŽαŸ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Postfix mail) αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ TCP αŸ”
  • αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž˜αž’αŸ†αž–αžΎαž…αž·αžαŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž•αž (αžαžΆαž„αž€αŸ’αž“αž»αž„)αŸ” αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαžαŸ‹αž‘αž»αž€αžαžΆαž‡αŸ„αž‚αž‡αŸαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž›αŸαžαž€αžΌαžŠαž”αŸ†αž–αŸαž‰αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‚αžΊ 0 αŸ”

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

apiVersion: v1
kind: Pod
metadata:
 name: node500
spec:
 containers:
   - image: magalix/node500
     name: node500
     ports:
       - containerPort: 3000
         protocol: TCP
     livenessProbe:
       httpGet:
         path: /
         port: 3000
       initialDelaySeconds: 5

αž“αŸαŸ‡β€‹αž˜αž·αž“β€‹αžαž»αžŸβ€‹αž–αžΈβ€‹αž“αž·αž™αž˜αž“αŸαž™ pod αž•αŸ’αžŸαŸαž„αž‘αŸ€αžβ€‹αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž™αžΎαž„β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αžœαžαŸ’αžαž»β€‹αž˜αž½αž™αŸ” .spec.containers.livenessProbe. αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš httpGet αž‘αž‘αž½αž›αž™αž€αž•αŸ’αž›αžΌαžœαžŠαŸ‚αž›αžŸαŸ†αžŽαžΎ HTTP GET αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎ (αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸαŸ‡αž‚αžΊ /αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαž”αŸ’αžšαž™αž»αž‘αŸ’αž’αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αžΆαž“αž’αŸ’αžœαžΈαž˜αž½αž™αžŠαžΌαž…αž‡αžΆ /api/v1/status) αž€αžΆαžšαžšαžŸαŸ‹αž“αŸ…αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžProbe αž‘αž‘αž½αž›αž™αž€αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš initialDelaySecondsαžŠαŸ‚αž›αžŽαŸ‚αž“αžΆαŸ†αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž±αŸ’αž™αžšαž„αŸ‹αž…αžΆαŸ†αž…αŸ†αž“αž½αž“αžœαž·αž“αžΆαž‘αžΈαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αŸ” αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž›αž‚αžΊαžαŸ’αžšαžΌαžœαž€αžΆαžšαž‡αžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž€αž»αž„αžαžΊαž“αŸαžšαžαŸ’αžšαžΌαžœαž€αžΆαžšαž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž αžΎαž™αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰ αžœαžΆαž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αžαŸ’αž›αŸ‡αŸ”

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

kubectl apply -f pod.yaml

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž–αžΈαžšαž”αžΈαžœαž·αž“αžΆαž‘αžΈ αž’αŸ’αž“αž€αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž˜αžΆαžαž·αž€αžΆαžšαž”αžŸαŸ‹αž•αžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

kubectl describe pods node500

αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž›αž‘αŸ’αž’αž•αž›αžŸαŸ’αžœαŸ‚αž„αžšαž€ αž“αŸ„αŸ‡αž‡αžΆαž’αŸ’αžœαžΈ.

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰ livenessProbe αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸ†αžŽαžΎ HTTP GET αž€αž»αž„αžαžΊαž“αŸαžšαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž€αŸ†αž αž»αžŸ 500 (αžŠαŸ‚αž›αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎ) αž αžΎαž™ kubelet αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžœαžΆαž‘αžΎαž„αžœαž·αž‰αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž†αŸ’αž„αž›αŸ‹αžαžΆαžαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ NideJS αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆαž“αŸ„αŸ‡ αž“αŸαŸ‡αž‚αžΊαž‡αžΆ app.js αž“αž·αž„ Dockerfile αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ–

app.js

var http = require('http');

var server = http.createServer(function(req, res) {
    res.writeHead(500, { "Content-type": "text/plain" });
    res.end("We have run into an errorn");
});

server.listen(3000, function() {
    console.log('Server is running at 3000')
})

Dockerfile

FROM node
COPY app.js /
EXPOSE 3000
ENTRYPOINT [ "node","/app.js" ]

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

αž€αžΆαžšαžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“

readinessProbe αž’αŸ’αžœαžΎαž€αžΆαžšαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž‘αŸ…αž“αžΉαž„ livenessProbes (GET requests, TCP communications and command execution) αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαŸ” αž€αž»αž„αžαžΊαž“αŸαžšαžŠαŸ‚αž›αž”αžšαžΆαž‡αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž…αŸ‹αž†αŸ’αž„αžΆαž™αž–αžΈαž…αžšαžΆαž…αžšαžŽαŸαž…αžΌαž›αŸ” αžŸαŸ’αžšαž˜αŸƒαžαžΆαž’αž»αž„αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž€αž»αž„αžαžΊαž“αŸαžšαž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž‚αžŽαž“αžΆαž…αŸ’αžšαžΎαž“αž¬αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αžšαŸ„αž˜αž”αž“αŸ’αž‘αž»αž€αž’αŸ’αž„αž“αŸ‹αžŠαŸ‚αž›αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž–αŸαž›αžœαŸαž›αžΆαž†αŸ’αž›αžΎαž™αžαž”αž€αžΎαž“αž‘αžΎαž„αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈ livenessProbe αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž—αžΆαž–αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸƒαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αž‘αžΎαž„ (αžαžΆαž˜αžšαž™αŸˆαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž–αž·αž“αž·αžαŸ’αž™ timeoutSeconds) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ kubelet αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž»αž„αžαžΊαž“αŸαžšαž‘αžΎαž„αžœαž·αž‰αŸ” αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž€αž»αž„αžαžΊαž“αŸαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αŸ’αžœαžΎαž€αž·αž…αŸ’αž…αž€αžΆαžšαžŠαŸ‚αž›αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎαž’αž“αž’αžΆαž“ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αž“αŸαŸ‡αž’αžΆαž…αž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž›αŸ’αž”αžΏαž“αž†αŸ’αž›αžΎαž™αžαž”αŸ” αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž‘αžΆαž“αž˜αž½αž™αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž“αŸ…αž›αžΎαž•αŸ’αž›αžΌαžœαž€αŸ†αž–αž»αž„αžšαž„αŸ‹αž…αžΆαŸ†αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž“αŸ’αž™αžΆαžšαž–αŸαž› - αž αžΎαž™αžšαžαž™αž“αŸ’αžαž”αžΆαž“αž‡αž½αž”αž‚αŸ’αžšαŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹αŸ”

αž…αžΌαžšαž™αžΎαž„αžŸαžšαžŸαŸαžšαž“αž·αž™αž˜αž“αŸαž™ redinessProbe αžŠαŸ‚αž›αž“αžΉαž„αž€αŸ†αžŽαžαŸ‹αž–αŸαž›αžœαŸαž›αžΆαž†αŸ’αž›αžΎαž™αžαž”αžŸαŸ†αžŽαžΎαžŸαž»αŸ† GET αž˜αž·αž“αž›αžΎαžŸαž–αžΈαž–αžΈαžšαžœαž·αž“αžΆαž‘αžΈ αž αžΎαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αžΉαž„αž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αžŸαŸ†αžŽαžΎ GET αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈ 5 αžœαž·αž“αžΆαž‘αžΈαŸ” αž―αž€αžŸαžΆαžš pod.yaml αž‚αž½αžšαžαŸ‚αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

apiVersion: v1
kind: Pod
metadata:
 name: nodedelayed
spec:
 containers:
   - image: afakharany/node_delayed
     name: nodedelayed
     ports:
       - containerPort: 3000
         protocol: TCP
     readinessProbe:
       httpGet:
         path: /
         port: 3000
       timeoutSeconds: 2

αž…αžΌαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ pod αž‡αžΆαž˜αž½αž™ kubectlαŸ–

kubectl apply -f pod.yaml

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

kubectl describe pods nodedelayed

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

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

αž…αŸ†αžŽαžΆαŸ†αžαžΆαž₯αž‘αžΌαžœαž“αŸαŸ‡ αž•αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘ αž•αŸ’αž›αžΌαžœ kubectl αžŸαŸ’αž“αžΎαžŸαž»αŸ†αžœαžΆαž˜αŸ’αžαž„αž‘αŸ€αžαŸ– αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αžŸαŸ†αžŽαžΎ GET αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž‘αŸ€αžαž‘αŸαŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž―αž€αžŸαžΆαžš app.js αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αŸ–

var http = require('http');

var server = http.createServer(function(req, res) {
   const sleep = (milliseconds) => {
       return new Promise(resolve => setTimeout(resolve, milliseconds))
   }
   sleep(5000).then(() => {
       res.writeHead(200, { "Content-type": "text/plain" });
       res.end("Hellon");
   })
});

server.listen(3000, function() {
   console.log('Server is running at 3000')
})

TL; αž€αž»αž„
αž˜αž»αž“αž–αŸαž›αž€αžΆαžšαž˜αž€αžŠαž›αŸ‹αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž–αž€ αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž‚αžΊαž‡αžΆαž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž…αž˜αŸ’αž”αž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ αž“αž·αž„αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž–αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž‘αŸ„αŸ‡β€‹αž™αŸ‰αžΆαž„β€‹αžŽαžΆβ€‹αž€αŸβ€‹αž‚αŸ’αž˜αžΆαž“β€‹αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž…αžΆαžαŸ‹β€‹αžœαž·αž’αžΆαž“αž€αžΆαžšβ€‹αž€αŸ‚β€‹αžαž˜αŸ’αžšαžΌαžœβ€‹αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αžšαŸ” αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž“αŸ…αžαŸ‚αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αžΆαž–αŸαž›αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸαŸ‡ αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αŸ’αžšαž˜αžΌαž› αž“αž·αž„αž•αŸ’αž‰αžΎαž‘αŸ…αž€αžΆαž“αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαž˜αžΌαž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžœαž·αž—αžΆαž‚αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αžΆαžŸαž“αŸ’αž“ αž“αž·αž„αž’αŸ’αžœαžΎαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαŸ” [αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ cloud αžŠαŸ„αž™αž”αŸ’αžšαžΎ monit αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž˜αž½αž™ k8s αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž› :) - αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αŸ” ]

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

Kubernetes αž•αŸ’αžαž›αŸ‹αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αžŸαž»αžαž—αžΆαž– 2 αž”αŸ’αžšαž—αŸαž‘αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ– readinessProbe αž“αž·αž„ livenessProbeαŸ” αž‘αžΆαŸ†αž„αž–αžΈαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαžΌαž…αž‚αŸ’αž“αžΆ (αžŸαŸ†αžŽαžΎ HTTP GET, αž€αžΆαžšαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„ TCP αž“αž·αž„αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ) αŸ” αž–αž½αž€αž‚αŸαž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž”αŸ’αž›αŸ‚αž€αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž’αŸ’αžœαžΎαž€αŸ’αž“αž»αž„αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž”αž‰αŸ’αž αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž•αžαŸ” livenessProbe αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž»αž„αžαžΊαž“αŸαžšαž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž€αŸ†αž αž»αžŸαž“αžΉαž„αž˜αž·αž“αž€αžΎαžαž‘αžΎαž„αž˜αŸ’αžαž„αž‘αŸ€αž αž αžΎαž™αž€αžΆαžšαžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“ Probe αž‰αŸ‚αž€ pod αž–αžΈαž…αžšαžΆαž…αžšαž…αžΌαž›αžšαž αžΌαžαžŠαž›αŸ‹αž˜αžΌαž›αž αŸαžαž»αž“αŸƒαž”αž‰αŸ’αž αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αŸ”

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

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

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