I ka hopena o ke kauwela, makemake mākou e hoʻomanaʻo iā ʻoe e hoʻomau mākou i ka hana ma ke kumuhana Kubernetes a ua hoʻoholo e hoʻopuka i kahi ʻatikala mai Stackoverflow e hōʻike ana i ke kūlana o kēia papahana i ka hoʻomaka ʻana o Iune.
Nanea i ka heluhelu ʻana!
I ka manawa e kākau ai i kēia ʻatikala, ua kokoke ka makahiki o Kubernetes. ʻeono makahiki, a i loko o nā makahiki ʻelua i hala iho nei ua ulu nui kona kaulana a hoʻopaʻa mau ʻia i waena punahele loa nā paepae. Aia ʻo Kubernetes i ke kolu o kēia makahiki. No ka recap: He kahua ʻo Kubernetes i hoʻolālā ʻia no ka holo ʻana a me ka hoʻonohonoho ʻana i nā ukana pahu pahu.
Hoʻomaka nā pahu ma ke ʻano he hoʻolālā kūikawā no ka hoʻokaʻawale ʻana i nā kaʻina hana ma Linux; Ua hoʻokomo ʻia nā pahu mai ka makahiki 2007 pūʻulu, a mai ka makahiki 2002 - nā inoa inoa. Ua hoʻolālā maikaʻi ʻia nā pahu i ka makahiki 2008, i ka wā i loaʻa ai LXC, a ua hoʻomohala ʻo Google i kāna ʻoihana hui kūloko i kapa ʻia ʻO Borg, kahi i "hana ʻia nā hana a pau i loko o nā pahu." Mai ʻaneʻi mākou wikiwiki i 2013, i ka wā i hoʻokuʻu mua ʻia ai ʻo Docker, a ua lilo nā ipu i mea hoʻonā kaulana. I kēlā manawa, ʻo ka mea hana nui no ka hoʻokani pahu pahu Mesos, ʻoiai ʻaʻole kaulana ʻo ia. Ua hoʻokuʻu mua ʻia ʻo Kubernetes i ka makahiki 2015, a ma hope iho ua lilo kēia mea hana i ka maʻamau de facto ma ke kahua o ka orchestration ipu.
No ka ho'āʻo e hoʻomaopopo i ke kumu i kaulana ai ʻo Kubernetes, e hoʻāʻo kākou e pane i kekahi mau nīnau. ʻO ka manawa hea ka manawa hope i hiki ai i nā mea hoʻomohala ke ʻae i ka pehea e kau ai i nā noi i ka hana? ʻEhia mau mea hoʻomohala āu i ʻike ai i ka mea hoʻohana i nā mea hana e like me ka mea i hoʻolako ʻia ma waho o ka pahu? ʻEhia nā luna hoʻomalu kapua i kēia lā i maopopo ʻole i ka hana ʻana o nā noi? E nānā mākou i nā pane i kēia mau nīnau ma kēia ʻatikala.
Hoʻolālā e like me YAML
I ka honua i hele mai ka Puppet a me Chef i Kubernetes, ʻo kekahi o nā hoʻololi nui loa ʻo ka neʻe ʻana mai ka "infrastructure as code" i ka "infrastructure as data" -e like me YAML. Hiki ke wehewehe maʻalahi ʻia nā kumuwaiwai āpau ma Kubernetes, nā pods, nā hoʻonohonoho, nā manawa i hoʻonohonoho ʻia, nā volumes, a me nā mea ʻē aʻe ma kahi faila YAML. ʻo kahi laʻana:
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
ʻO kēia ʻike ka mea maʻalahi i nā ʻoihana DevOps a i ʻole SRE e hōʻike piha i kā lākou mau hana me ka ʻole e kākau i nā code ma nā ʻōlelo e like me Python a i ʻole Javascript.
ʻO nā mea maikaʻi ʻē aʻe o ka hoʻonohonoho ʻana i nā ʻōnaehana e like me ka ʻikepili:
GitOps a i ʻole Git Operations Version Control. ʻO kēia ala e hiki ai iā ʻoe ke mālama i nā faila Kubernetes YAML āpau i loko o nā waihona git, no laila hiki iā ʻoe ke hahai pololei i ka wā i hana ʻia ai kahi hoʻololi, nāna i hana, a me ka mea i loli maoli. Hoʻonui kēia i ka ʻike o nā hana a puni ka hui a hoʻomaikaʻi i ka maikaʻi o ka hana ma o ka hoʻopau ʻana i ka ambiguity, ʻoiai ma kahi e ʻimi ai nā limahana i nā kumuwaiwai a lākou e pono ai. Ma ka manawa like, lilo ia i mea maʻalahi ke hoʻololi maʻalahi i nā kumuwaiwai Kubernetes ma ka hoʻohui ʻana i kahi noi huki.
Scalability. Ke wehewehe ʻia nā kumuwaiwai ʻo YAML, lilo ia i mea maʻalahi loa i nā mea hoʻohana cluster ke hoʻololi i hoʻokahi a ʻelua paha helu i loko o kahi kumu Kubernetes, a laila e hoʻololi i ke ʻano o ka unahi. Hāʻawi ʻo Kubernetes i kahi hana no ka hoʻokaʻawale autoscaling o nā pods, hiki ke hoʻohana ʻia no ka hoʻoholo maʻalahi i ka helu liʻiliʻi a me ka helu kiʻekiʻe o nā pods e koi ʻia i kahi hoʻonohonoho hoʻonohonoho pono e mālama i nā pae haʻahaʻa a kiʻekiʻe. No ka laʻana, inā ua kau ʻoe i kahi hoʻonohonoho e koi ai i ka mana hou ma muli o ka piʻi koke ʻana o ke kaʻa, a laila hiki ke hoʻololi ʻia maxReplicas mai 10 a 20:
Palekana a me ka hooponopono. He maikaʻi ʻo YAML no ka loiloi ʻana i ke ʻano o nā mea i kau ʻia ma Kubernetes. No ka laʻana, pili ka manaʻo palekana nui inā e holo ana kāu mau hana ma ke ʻano he mea hoʻohana ʻole. I kēia hihia, pono paha mākou i nā mea hana e like me paio, mea hōʻoia YAML/JSON, hoʻohui Wehe Kulekele Agena, he mea hōʻoia kulekele e hōʻoia i ka pōʻaiapili PalekanaContext ʻAʻole ʻae kāu mau hana i ka pahu e holo me nā kuleana luna. Inā koi ʻia kēia, hiki i nā mea hoʻohana ke hoʻohana i kahi kulekele maʻalahi pule au, e like me kēia:
package main
deny[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Containers must not run as root"
}
Nā koho no ka hoʻohui ʻana me kahi mea hāʻawi kapua. ʻO kekahi o nā hiʻohiʻona kaulana loa o ka ʻenehana kiʻekiʻe o kēia lā ʻo ka holo ʻana i nā haʻahaʻa hana ma nā mea hoʻolako kapuaʻi lehulehu. Ke hoʻohana nei i ka ʻāpana mea hoʻolako ao Hāʻawi ʻo Kubernetes i kēlā me kēia puʻupuʻu e hui pū me ka mea hāʻawi kapua e holo ai. No ka laʻana, inā hoʻohana ka mea hoʻohana i kahi noi ma Kubernetes ma AWS a makemake e hōʻike i kēlā noi ma o kahi lawelawe, kōkua ka mea hāʻawi kapua i ka hana ʻana i ka lawelawe. LoadBalancerka mea e hoʻolako 'akomi i ka ukana kaulike ʻO Amazon Elastic Load Balancee hoʻohuli hou i ke kaʻa i nā pods noi.
Hoʻonui
He mea hoʻonui loa ʻo Kubernetes a makemake nā mea hoʻomohala. Aia kahi hoʻonohonoho o nā kumuwaiwai e like me nā pods, deployments, StatefulSets, mea huna, ConfigMaps, etc. ʻOiaʻiʻo, hiki i nā mea hoʻohana a me nā mea hoʻomohala ke hoʻohui i nā kumuwaiwai ʻē aʻe ma ke ʻano nā wehewehe waiwai maʻamau.
No ka laʻana, inā makemake mākou e wehewehe i kahi kumuwaiwai CronTab, a laila hiki iā ʻoe ke hana penei:
ʻO kahi koho ʻē aʻe no ka hoʻonui ʻia ma Kubernetes ʻo ia ka mea hiki ke kākau i kāna mau ʻōlelo ponoʻī. Operator he kaʻina hana kūikawā i ka hui Kubernetes e hana ana e like me ka "kaapuni mana" Me ke kōkua o kahi mea hoʻohana, hiki i ka mea hoʻohana ke hoʻokaʻawale i ka hoʻokele ʻana i nā CRD (nā wehewehe kumu kumu maʻamau) ma o ka hoʻololi ʻana i ka ʻike me ka Kubernetes API.
Nui nā mea hana i loko o ke kaiāulu e maʻalahi i nā mea hoʻomohala e hana i kā lākou mea hana ponoʻī. Ma waena o lākou - Ka Papa Hana a me SDK mea hana. Hāʻawi kēia SDK i kahi kumu e hiki ai i kahi mea hoʻomohala ke hoʻomaka koke i ka hana ʻana i kahi mea hoʻohana. E ʻōlelo mākou hiki iā ʻoe ke hoʻomaka mai ka laina kauoha e like me kēia:
$ operator-sdk new my-operator --repo github.com/myuser/my-operator
Hana kēia i nā code boilerplate no kāu mea hoʻohana, me nā faila YAML a me ka code Golang:
Inā makemake ka mea hoʻomohala i ka mana hou aku, hiki ke hoʻololi ʻia ke code boilerplate ma nā faila Go. No ka laʻana, e hoʻololi i nā kikoʻī o ka mea hoʻoponopono, hiki iā ʻoe ke hoʻololi i ka faila controller.go.
ʻO kekahi papahana NA WAHI A PAU, hiki iā ʻoe ke hana i nā ʻōlelo me ka hoʻohana wale ʻana i nā faila YAML. No ka laʻana, e wehewehe ʻia kahi mea hoʻohana no Apache Kafka no laila,. Me ia, hiki iā ʻoe ke hoʻokomo i kahi hui Kafka ma luna o nā Kubernetes me nā kauoha ʻelua:
I nā makahiki i hala iho nei, e puka mai ana nā hoʻokuʻu Kubernetes nui i kēlā me kēia mahina - ʻo ia hoʻi, ʻekolu a ʻehā mau hoʻokuʻu nui i kēlā me kēia makahiki. ʻAʻole emi ka helu o nā hiʻohiʻona hou i hoʻokomo ʻia i kēlā me kēia o lākou. Eia kekahi, ʻaʻohe hōʻailona o ka lohi ʻana i kēia mau manawa paʻakikī - e nānā i ke kūlana i kēia manawa Ka hana papahana Kubernetes ma Github.
Hāʻawi nā mana hou iā ʻoe e hoʻomaʻamaʻa maʻalahi i nā hana puʻupuʻu ma waena o nā haʻahaʻa hana like ʻole. Eia kekahi, hauʻoli ka poʻe programmer i ka mana ʻoi aku ka maikaʻi i ka wā e kau pololei ana i nā noi i ka hana.
Ke kaiaulu
ʻO kekahi ʻano nui o ka kaulana o Kubernetes ʻo ia ka ikaika o kona kaiāulu. Ma 2015, ma ka hiki ʻana i ka mana 1.0, kākoʻo ʻia ʻo Kubernetes e Ka Papahana Hoʻonohonoho ʻInikua Kapua.
Aia kekahi mau kaiaulu like ʻole ʻO SIG (Special Interest Groups) i kālele ana i ka hana ʻana ma nā wahi like ʻole o Kubernetes i ka wā e ulu ana ka papahana. Ke hoʻohui mau nei kēia mau pūʻulu i nā hiʻohiʻona hou, e ʻoi aku ka maʻalahi o ka hana ʻana me Kubernetes.
Hoʻokipa pū ka Cloud Native Foundation iā CloudNativeCon/KubeCon, ʻo ia, i ka manawa e kākau ai, ʻo ia ka ʻaha kūkā open source nui loa ma ka honua. Hoʻopaʻa maʻamau ʻia ʻekolu manawa i ka makahiki, e hui pū ana i nā kaukani ʻoihana e makemake e hoʻomaikaʻi iā Kubernetes a me kāna kaiaolaola, a me ke aʻo ʻana i nā hiʻohiʻona hou e ʻike ʻia i kēlā me kēia ʻekolu mahina.
Eia kekahi, ua loaʻa iā Cloud Native Foundation Komite Hooponopono Kiekie, ka mea, me nā SIG, e loiloi i nā mea hou a i kēia manawa papahana nā kālā i kālele ʻia i ke kaiaola ao. ʻO ka hapa nui o kēia mau papahana e kōkua i ka hoʻomaikaʻi ʻana i ka ikaika o Kubernetes.
ʻO ka hope, ke manaʻoʻiʻo nei au ʻaʻole e holomua ʻo Kubernetes me ka ʻole o ka hoʻoikaika ʻana o ke kaiāulu holoʻokoʻa, kahi e hui pū ai nā kānaka akā i ka manawa like e hoʻokipa i nā mea hou i loko o ka pā.
ʻO ka Future
ʻO kekahi o nā pilikia nui a nā mea hoʻomohala e hana ai i ka wā e hiki mai ana, ʻo ia ka hiki ke nānā aku i nā kikoʻī o ke code ponoʻī, ʻaʻole i ka ʻōnaehana e holo ai. Kūlike ia i kēia mau ʻano serverless architectural paradigm, ʻo ia kekahi o nā alakaʻi i kēia lā. Loaʻa nā ʻōhua kiʻekiʻe, e.g. knative и OpenFaas, e hoʻohana ana i nā Kubernetes e hoʻokaʻawale i ka ʻōnaehana mai ka mea hoʻomohala.
Ma kēia ʻatikala, ua ʻohi wale mākou i ka ʻili o ka mokuʻāina ʻo Kubernetes i kēia manawa-ʻoiaʻiʻo, ʻo ia wale nō ka piko o ka hau hau. Loaʻa i nā mea hoʻohana Kubernetes nā kumuwaiwai ʻē aʻe, hiki, a me nā hoʻonohonoho hoʻonohonoho i kā lākou makemake.