αž’αŸ†αž–αžΈαž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž”αŸ’αžšαž‡αžΆαž”αŸ’αžšαž·αž™αž—αžΆαž–αžšαž”αžŸαŸ‹ Kubernetes

ហេហេ!

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

αž’αŸ†αž–αžΈαž€αžΆαžšαž€αžΎαž“αž‘αžΎαž„αž”αŸ’αžšαž‡αžΆαž”αŸ’αžšαž·αž™αž—αžΆαž–αžšαž”αžŸαŸ‹ Kubernetes

αžšαžΈαž€αžšαžΆαž™αž’αžΆαž“!

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

αž€αž»αž„αžαžΊαž“αŸαžšαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž€αžΆαžšαžšαž…αž“αžΆαž–αž·αžŸαŸαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž“αŸ…αž€αŸ’αž“αž»αž„αž›αžΈαž“αž»αž…αŸ” αž€αž»αž„αžαžΊαž“αŸαžšαž”αžΆαž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžαžΆαŸ†αž„αž–αžΈαž†αŸ’αž“αžΆαŸ† 2007 αž€αŸ’αžšαž»αž˜αž αžΎαž™αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž†αŸ’αž“αžΆαŸ† 2002 - namespaces αŸ” αž€αž»αž„αžαžΊαž“αŸαžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžšαž…αž“αžΆβ€‹αž€αžΆαž“αŸ‹β€‹αžαŸ‚β€‹αž›αŸ’αž’β€‹αž‡αžΆαž„β€‹αž˜αž»αž“β€‹αž“αŸ…β€‹αž†αŸ’αž“αžΆαŸ† 2008 αžŠαŸ‚αž›β€‹αžœαžΆβ€‹αž˜αžΆαž“β€‹αžŸαŸ’αžšαžΆαž”αŸ‹ αž’αž·αž›αŸ” αžŸαŸŠαžΈαŸ” αžŸαŸŠαžΈαž αžΎαž™ Google αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž™αž“αŸ’αžαž€αžΆαžšαžŸαžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹αžαŸ’αž›αž½αž“αžŠαŸ‚αž›αž αŸ…αžαžΆ αž”αžΌαŸ”αžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž› "αž€αžΆαžšαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž’αž»αž„" αŸ” αž–αžΈαž‘αžΈαž“αŸαŸ‡αž™αžΎαž„αž†αŸ’αž–αŸ„αŸ‡αž‘αŸ…αž˜αž»αžαž™αŸ‰αžΆαž„αž›αžΏαž“αžšαž αžΌαžαžŠαž›αŸ‹αž†αŸ’αž“αžΆαŸ† 2013 αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™ Docker αž›αžΎαž€αžŠαŸ†αž”αžΌαž„αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„ αž αžΎαž™αž‘αžΈαž”αŸ†αž•αž»αžαž’αž»αž„αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αž˜αž½αž™αŸ” αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡ αž§αž”αž€αžšαžŽαŸαžŸαŸ†αžαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αž»αž„αžαžΊαž“αŸαžšαž‚αžΊ αž˜αŸαžŸαžΌαžŸαž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž‚αžΆαžαŸ‹αž˜αž·αž“αž˜αžΆαž“αž”αŸ’αžšαž‡αžΆαž”αŸ’αžšαž·αž™αž—αžΆαž–αžαŸ’αž›αžΆαŸ†αž„αž€αŸαžŠαŸ„αž™αŸ” Kubernetes αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž‡αžΆαž›αžΎαž€αžŠαŸ†αž”αžΌαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† 2015 αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžœαž·αžŸαŸαž™αž“αŸƒαž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αž»αž„αžαžΊαž“αŸαžšαŸ”

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

αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ YAML

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

apiVersion: v1
kind: Pod
metadata:
  name: site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80

αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž“αŸαŸ‡αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰ DevOps ឬ SRE αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž™αŸ‰αžΆαž„αž–αŸαž‰αž›αŸαž‰ αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž‡αžΆαž—αžΆαžŸαžΆαžŠαžΌαž…αž‡αžΆ Python ឬ Javascript αž“αŸ„αŸ‡αž‘αŸαŸ”

αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸƒαž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž½αž˜αž˜αžΆαž“:

  • GitOps ឬ Git αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αŸ†αžŽαŸ‚αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž―αž€αžŸαžΆαžš Kubernetes YAML αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„ git αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž’αŸ’αž“αž€αž’αžΆαž…αžαžΆαž˜αžŠαžΆαž“αž”αžΆαž“αž…αŸ’αž”αžΆαžŸαŸ‹αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„ αž’αŸ’αž“αž€αžŽαžΆαž‡αžΆαž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαžœαžΆ αž“αž·αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ” αž“αŸαŸ‡αž”αž„αŸ’αž€αžΎαž“αžαž˜αŸ’αž›αžΆαž—αžΆαž–αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸ…αž‘αžΌαž‘αžΆαŸ†αž„αž’αž„αŸ’αž‚αž—αžΆαž– αž“αž·αž„αž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ„αž™αž›αž»αž”αž”αŸ†αž”αžΆαžαŸ‹αž—αžΆαž–αž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ αž‡αžΆαž–αž·αžŸαŸαžŸαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž”αž»αž‚αŸ’αž‚αž›αž·αž€αž‚αž½αžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž…αŸ†αž–αŸ„αŸ‡αž’αž“αž’αžΆαž“ Kubernetes αžŠαŸ„αž™αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž‰αŸ’αž…αžΌαž›αžŸαŸ†αžŽαžΎαž‘αžΆαž‰αŸ”
  • αž›αž‘αŸ’αž’αž—αžΆαž–αž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αž“αž’αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαžΆαž‡αžΆ YAML αžœαžΆαž€αŸ’αž›αžΆαž™αž‡αžΆαž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž…αž„αŸ’αž€αŸ„αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αŸαžαž˜αž½αž™ αž¬αž–αžΈαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž’αž“αž’αžΆαž“ Kubernetes αžŠαŸ„αž™αž αŸαžαž»αž“αŸαŸ‡αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αŸ” Kubernetes αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž™αž“αŸ’αžαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž•αŸ’αžαŸαž€ αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž…αŸ†αž“αž½αž“αž’αž”αŸ’αž”αž”αžšαž˜αžΆ αž“αž·αž„αž’αžαž·αž”αžšαž˜αžΆαž“αŸƒαž•αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž˜αŸ’αžšαž·αžαž‘αžΆαž” αž“αž·αž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸƒαž…αžšαžΆαž…αžšαžŽαŸαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžΆαž“αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž‘αžΆαž˜αž‘αžΆαžšαžŸαž˜αžαŸ’αžαž—αžΆαž–αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž…αžšαžΆαž…αžšαžŽαŸαž€αžΎαž“αž‘αžΎαž„αž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ„αŸ‡ maxReplicas αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž–αžΈ 10 αž‘αŸ… 20αŸ–

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 1
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

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

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containers must not run as root"
}

  • αž‡αž˜αŸ’αžšαžΎαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαž–αž–αž€αŸ” αž“αž·αž“αŸ’αž“αžΆαž€αžΆαžšαž‚αž½αžšαž±αŸ’αž™αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž”αŸ†αž•αž»αžαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαžαŸ’αž–αžŸαŸ‹αž“αžΆαž–αŸαž›αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸαŸ‡αž‚αžΊαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž“αŸ’αž‘αž»αž€αž›αžΎαž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαž–αž–αž€αžŸαžΆαž’αžΆαžšαžŽαŸˆαŸ” αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž˜αžΆαžŸαž’αžΆαžαž» αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαž–αž–αž€ Kubernetes αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž…αž„αŸ’αž€αŸ„αž˜αžŽαžΆαž˜αž½αž™αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαž–αž–αž€αžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž“αŸ…αž›αžΎ AWS αž αžΎαž™αž…αž„αŸ‹αž”αž„αŸ’αž αžΆαž‰αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ„αŸ‡αžαžΆαž˜αžšαž™αŸˆαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž“αŸ„αŸ‡αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαž–αž–αž€αž‡αž½αž™αž”αž„αŸ’αž€αžΎαžαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” LoadBalancerαžŠαŸ‚αž›αž“αžΉαž„αž•αŸ’αžαž›αŸ‹αžαž»αž›αŸ’αž™αž—αžΆαž–αž•αŸ’αž‘αž»αž€αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· Amazon Elastic Load BalancerαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžαžΌαžšαž‘αž·αžŸαž…αžšαžΆαž…αžšαžŽαŸαž‘αŸ…αž€αžΆαž“αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ pods αŸ”

αž›αž‘αŸ’αž’αž—αžΆαž–αž–αž„αŸ’αžšαžΈαž€

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

αž§αž‘αžΆαž αžšαžŽαŸαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž™αžΎαž„αž…αž„αŸ‹αž€αŸ†αžŽαžαŸ‹αž’αž“αž’αžΆαž“ CronTabαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž˜αž½αž™αžŠαžΌαž…αž“αŸαŸ‡αŸ–

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: crontabs.my.org
spec:
  group: my.org
  versions:
    - name: v1
      served: true
      storage: true
      Schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                  pattern: '^(d+|*)(/d+)?(s+(d+|*)(/d+)?){4}$'
                replicas:
                  type: integer
                  minimum: 1
                  maximum: 10
  scope: Namespaced
  names:
    plural: crontabs
    singular: crontab
    kind: CronTab
    shortNames:
    - ct

αž€αŸ’αžšαŸ„αž™αž˜αž€αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž’αž“αž’αžΆαž“ CronTab αžŠαžΌαž…αž“αŸαŸ‡αŸ–

apiVersion: "my.org/v1"
kind: CronTab
metadata:
  name: my-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-cron-image
  replicas: 5

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

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

$ operator-sdk new my-operator --repo github.com/myuser/my-operator

αžœαžΆαž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠ boilerplate αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αžšαž½αž˜αž‘αžΆαŸ†αž„αž―αž€αžŸαžΆαžš YAML αž“αž·αž„αž€αžΌαžŠ GolangαŸ–

.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αŸ’αž“αž€αž’αžΆαž…αž”αž“αŸ’αžαŸ‚αž˜ APIs αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΌαž…αž‡αžΆαŸ–

$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService

$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž‘αžΈαž”αŸ†αž•αž»αžαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš αž αžΎαž™αž•αŸ’αž‰αžΎαžœαžΆαž‘αŸ…αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž€αž»αž„αžαžΊαž“αŸαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ–

$ operator-sdk build your.container.registry/youruser/myapp-operator

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž…αž„αŸ‹αž”αžΆαž“αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“ αž€αžΌαžŠ boilerplate αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš Go β€‹β€‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž”αŸ’αžšαŸ‚αž—αžΆαž–αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžšαž”αžŸαŸ‹αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆ αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž―αž€αžŸαžΆαžš controller.go.

αž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™αž‘αŸ€αž αž€αžΌαžŒαžΌαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαžŠαŸ„αž™αž”αŸ’αžšαžΎαžαŸ‚αž―αž€αžŸαžΆαžš YAML αž”αŸ’αžšαž€αžΆαžŸαŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Apache Kafka αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž”αŸ’αžšαž αŸ‚αž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡. αž‡αžΆαž˜αž½αž™αžœαžΆ αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αž‘αžΎαž„αž…αž„αŸ’αž€αŸ„αž˜ Kafka αž“αŸ…αž›αžΎαž€αŸ†αž–αžΌαž›αž“αŸƒ Kubernetes αžŠαŸ„αž™αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž‰αŸ’αž‡αžΆαž–αžΈαžšαž”αžΈαŸ–

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

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

$ kubectl kudo install kafka --instance=my-kafka-name 
            -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 
            -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m 
            -p BROKER_COUNT=5 -p BROKER_MEM=4096m 
            -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 
            -p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20

αž€αžΆαžšαž…αŸ’αž“αŸƒαž”αŸ’αžšαžŒαž·αž

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

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

αžŸαž αž‚αž˜αž“αŸ

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

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

αž˜αžΌαž›αž“αž·αž’αž· Cloud Native αž€αŸαž’αŸ’αžœαžΎαž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹αž•αŸ’αž‘αŸ‡ CloudNativeCon/KubeCon αžŠαŸ‚αž›αž“αŸ…αž–αŸαž›αžŸαžšαžŸαŸαžš αž‚αžΊαž‡αžΆαžŸαž“αŸ’αž“αž·αžŸαžΈαž‘αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αžŠαŸαž’αŸ†αž”αŸ†αž•αž»αžαž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž–αž›αŸ„αž€αŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž’αŸ’αžœαžΎαž‘αžΎαž„αž”αžΈαžŠαž„αž€αŸ’αž“αž»αž„αž˜αž½αž™αž†αŸ’αž“αžΆαŸ† αžœαžΆαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž’αŸ’αž“αž€αž‡αŸ†αž“αžΆαž‰αžšαžΆαž”αŸ‹αž–αžΆαž“αŸ‹αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž…αž„αŸ‹αž€αŸ‚αž›αž˜αŸ’αž’ Kubernetes αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαžšαž”αžŸαŸ‹αžœαžΆ αž€αŸαžŠαžΌαž…αž‡αžΆαžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž–αžΈαž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαŸ—αžŠαŸ‚αž›αž›αŸαž…αž‘αžΎαž„αžšαŸ€αž„αžšαžΆαž›αŸ‹αž”αžΈαžαŸ‚αž˜αŸ’αžαž„αŸ”

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž Cloud Native Foundation αž˜αžΆαž“ αž‚αžŽαŸˆαž€αž˜αŸ’αž˜αžΆαž’αž·αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαžŠαŸ‚αž›αžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„ SIGs αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαŸ’αž˜αžΈ αž“αž·αž„αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ αž‚αž˜αŸ’αžšαŸ„αž„ αž˜αžΌαž›αž“αž·αž’αž·αž•αŸ’αžαŸ„αžαž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαž‘αžΌαžŸαŸŠαžΈαž–αž–αž€αŸ” αž‚αž˜αŸ’αžšαŸ„αž„αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž‡αž½αž™αž€αŸ‚αž›αž˜αŸ’αž’αž…αŸ†αžŽαž»αž…αžαŸ’αž›αžΆαŸ†αž„αžšαž”αžŸαŸ‹ Kubernetes αŸ”

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

αž’αž“αžΆαž‚αž

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

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

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

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