Hei Habr!
Pakupera kwezhizha, tinoda kukuyeuchidza kuti tinoramba tichishanda pamusoro pehurukuro
Enjoy reading!
Panguva yekunyora chinyorwa ichi, zera reKubernetes riri approx.
Midziyo yakatanga sedhizaini yakakosha yekuzviparadzanisa nevamwe muLinux; midziyo yaisanganisira kubvira 2007
Kuedza kunzwisisa kuti sei Kubernetes yakakurumbira, ngatiedze kupindura mibvunzo mishoma. Ndeipi nguva yekupedzisira vagadziri vakakwanisa kubvumirana pamafambisirwo ekushandisa mukugadzira? Vangani vagadziri vaunoziva vanoshandisa zvishandiso sezvavanopihwa kunze kwebhokisi? Vangani vatariri vemakore varipo nhasi vasinganzwisise kuti maapplication anoshanda sei? Tichatarisa mhinduro dzemibvunzo iyi munyaya ino.
Infrastructure seYAML
Munyika yabva kuPuppet naChef kuenda Kubernetes, imwe yeshanduko huru kwave kutama kubva ku "infrastructure secode" kuenda ku "infrastructure as data" -kunyanya, seYAML. Zvese zviwanikwa muKubernetes, izvo zvinosanganisira mapods, zvigadziriso, akaiswa zviitiko, mavhoriyamu, nezvimwe, zvinogona kutsanangurwa zviri nyore muYAML faira. Semuyenzaniso:
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
Maonero aya anoita kuti zvive nyore kuDevOps kana SRE nyanzvi kuti vataure zvizere mabasa avo pasina kunyora kodhi mumitauro yakaita sePython kana Javascript.
Zvimwe zvakanakira kuronga zvivakwa se data zvinosanganisira:
- GitOps kana Git Operations Version Control. Iyi nzira inobvumidza iwe kuti uchengete ese Kubernetes YAML mafaera mune git repositories, saka iwe unogona kuteedzera chaizvo pakaitwa shanduko, ndiani akazviita, uye chii chaizvo chakanyatso chinja. Izvi zvinowedzera kujeka kwemashandiro musangano rese uye zvinonatsiridza mashandiro ekuita nekubvisa kusajeka, kunyanya uko vashandi vanofanirwa kutsvaga zviwanikwa zvavanoda. Panguva imwecheteyo, zvinova nyore kuita otomatiki shanduko kuKubernetes zviwanikwa nekungobatanidza chikumbiro chekudhonza.
- Scalability. Kana zviwanikwa zvinotsanangurwa seYAML, zvinova nyore kwazvo kune vanobata masumbu kuti vachinje nhamba imwe kana mbiri muKubernetes sosi, nekudaro vachichinja kuti inoyera sei. Kubernetes inopa nzira yekuchinjika autoscaling yemapods, ayo anogona kushandiswa kuona zviri nyore kuti ndeapi hushoma uye huwandu hwehuwandu hwepods hunodiwa mune imwe dhizaini yekumisikidza kubata yakaderera uye yakakwirira mwero wetraffic. Semuyenzaniso, kana iwe wakaisa chigadziriso chinoda kuwedzera huwandu nekuda kwekamwe kamwe spike mutraffic, saka maxReplicas inogona kuchinjwa kubva pagumi kuenda pamakumi maviri:
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
- Chengetedzo uye manejimendi. YAML yakanakira kuongorora kuti zvinhu zvinoiswa sei muKubernetes. Semuenzaniso, chikuru chekuchengetedza chine chekuita kana basa rako riri kushanda seasiri-admin mushandisi. Muchiitiko ichi, tingada maturusi akadai
makwikwi , YAML/JSON validator, plusVhura Policy Agent , mutemo unosimbisa kuti uve nechokwadi chekuti mamiriro acho ezvinhuSecurityContext mabasa ako haatenderi mudziyo kuti ushande nerusarura rwemaneja. Kana izvi zvichidikanwa, vashandisi vanogona kushandisa mutemo wakapfavandinonamata , sezvizvi:
package main
deny[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Containers must not run as root"
}
- Sarudzo dzekubatanidza ne cloud provider. Imwe yeanonyanya kuzivikanwa maitiro mune yanhasi yepamusoro tekinoroji ndeyekumhanyisa mitoro yebasa pane yeruzhinji Cloud vanopa. Kushandisa chikamu
cloud-provider Kubernetes inobvumira chero cluster kuti ibatanidze nemupi wegore painomhanya. Semuenzaniso, kana mushandisi achimhanyisa application muKubernetes paAWS uye achida kuburitsa iyo application kuburikidza nesevhisi, mupi wegore anobatsira otomatiki kugadzira iyo sevhisi.LoadBalancer
iyo inozopa otomatiki muyero wekuenzanisaAmazon Elastic Load Balancer kuendesa traffic kune application pods.
Kuwedzera
Kubernetes inowedzera zvakanyanya uye vanogadzira vanoida. Kune seti yezviwanikwa zviripo senge pods, deployments, StatefulSets
, zvakavanzika, ConfigMaps
, nezvimwewo. Ichokwadi, vashandisi nevagadziri vanogona kuwedzera zvimwe zviwanikwa mufomu
Somuenzaniso, kana tichida kutsanangura chitubu CronTab
, ipapo iwe unogona kuita seizvi:
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
Gare gare isu tinogona kugadzira CronTab sosi chinhu chakadai:
apiVersion: "my.org/v1"
kind: CronTab
metadata:
name: my-cron-object
spec:
cronSpec: "* * * * */5"
image: my-cron-image
replicas: 5
Imwe sarudzo yekuwedzera muKubernetes ndeyekuti mugadziri anogona kunyora zvake zvirevo.
Kune akati wandei maturusi munharaunda anoita kuti zvive nyore kune vanogadzira kuti vagadzire ivo vanoshanda. Pakati pavo -
$ operator-sdk new my-operator --repo github.com/myuser/my-operator
Izvi zvinogadzira ese boilerplate kodhi yemushandisi wako, kusanganisira YAML mafaera uye Golang kodhi:
.
|____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
Ipapo iwe unogona kuwedzera anodiwa APIs uye controller, seizvi:
$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService
$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService
Zvadaro, pakupedzisira, unganidza mushandisi uye utumire kune registry yemudziyo wako:
$ operator-sdk build your.container.registry/youruser/myapp-operator
Kana mugadziri achida kunyange kutonga kwakawanda, iyo boilerplate kodhi muGo mafaera inogona kuchinjwa. Semuenzaniso, kugadzirisa zvakatemwa zvemutongi, unogona kuita shanduko kufaira controller.go
.
Chimwe chirongwa
$ kubectl kudo install zookeeper
$ kubectl kudo install kafka
Uye wozozvigadzirisa nemumwe murairo:
$ 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
Innovations
Mumakore mashoma apfuura, kuburitswa kukuru kwaKubernetes kwave kubuda mwedzi mishoma yega yega - kureva, matatu kusvika mana makuru ekuburitswa pagore. Huwandu hwezvinhu zvitsva zvinounzwa mune chimwe nechimwe chazvo hazvidzike. Uyezve, hapana zviratidzo zvekuderera kunyange munguva dzino dzakaoma - tarisa kuti mamiriro akaita sei iye zvino
Hutsva hutsva hunokutendera iwe kuti uwedzere kuchinjika cluster mashandiro pane akasiyana mabasa akasiyana. Pamusoro pezvo, vanogadzira mapurogiramu vanonakidzwa nekutonga kukuru kana vachitumira maapplication zvakananga kukugadzira.
Nharaunda
Chimwe chinhu chikuru chekuzivikanwa kwaKubernetes isimba renharaunda yayo. Muna 2015, pakusvika vhezheni 1.0, Kubernetes yakatsigirwa na
Kunewo nharaunda dzakasiyana-siyana
Iyo Cloud Native Foundation zvakare inotambira CloudNativeCon/KubeCon, iyo, panguva yekunyora, ndiyo yakakura kwazvo yakavhurika sosi musangano munyika. Inowanzoitwa katatu pagore, inounza pamwe zviuru zvevashandi vanoda kuvandudza Kubernetes uye ecosystem yayo, pamwe nekudzidza zvitsva zvinoonekwa mwedzi mitatu yega yega.
Uyezve, Cloud Native Foundation ine
Chekupedzisira, ndinotenda kuti Kubernetes yaisazobudirira sezvazviri pasina kuedza kwenharaunda yese, uko vanhu vanonamatirana asi panguva imwe chete vachigamuchira vatsva muboka.
Ramangwana
Imwe yematambudziko makuru ayo vagadziri vachazosangana naro mune ramangwana kugona kutarisa pane iyo kodhi iyo pachayo, uye kwete pane zvivakwa zvazvinoita. Inosangana nemaitiro aya
Muchinyorwa chino, isu tangokwenya pamusoro pemamiriro azvino eKubernetes - kutaura zvazviri, ingori muromo wechando. Kubernetes vashandisi vane zvimwe zvakawanda zviwanikwa, kugona, uye zvigadziriso zvavanazvo.
Source: www.habr.com