O le tausaga nei, o le konafesi autu a Europa Kubernetes - KubeCon + CloudNativeCon Europe 2020 - sa faʻapitoa. Peitai, o sea suiga i le faatulagaga e lei taofia ai i matou mai le tuuina atu o la matou lipoti ua leva ona fuafuaina “Alu? Bash! Feiloai i le Shell-operator" faʻapitoa i la matou poloketi Open Source .
O lenei tusiga, faʻaosofia e le lauga, o loʻo tuʻuina mai ai se auala e faʻafaigofie ai le faʻagasologa o le fausiaina o tagata faʻatautaia mo Kubernetes ma faʻaalia ai le auala e mafai ai ona e faia oe lava i se taumafaiga itiiti e faʻaaoga ai se atigi-operator.

Fa'ailoa (~ 23 minute i le Igilisi, e sili atu le faʻamatalaga nai lo le tusiga) ma le faʻamatalaga autu mai ai i tusitusiga. Alu!
I Flant matou te fa'amalieina ma fa'autometi mea uma. O le asō o le a tatou talanoa e uiga i se isi manatu manaia. Feiloai: fa'asologa o atigi cloud-native!
Peitaʻi, seʻi o tatou amata i le tala e tupu ai nei mea uma: Kubernetes.
Kubernetes API ma pule
O le API i Kubernetes e mafai ona faʻatusalia o se ituaiga faila faila ma faʻamaumauga mo ituaiga taʻitasi. O mea (punaoa) i luga o lenei 'au'aunaga o lo'o fa'atusalia e faila YAML. E le gata i lea, o le server o loʻo i ai se API faʻavae e mafai ai ona e faia ni mea se tolu:
- talia punaoa i lona ituaiga ma lona igoa;
- suia punaoa (i lenei tulaga, e naʻo mea "saʻo" e teuina e le 'auʻaunaga - o mea uma e le saʻo na faʻatulagaina pe faʻamoemoe mo isi faʻamaumauga e lafoai);
- ala mo le punaoa (i lenei tulaga, e vave maua e le tagata faʻaoga lona faʻamatalaga lata mai / faʻafouina).
O le mea lea, o Kubernetes e galue o se ituaiga faila faila (mo YAML faʻaaliga) faʻatasi ai ma auala faʻavae e tolu (ioe, o loʻo i ai isi, ae o le a matou faʻaumatia mo le taimi nei).

O le fa'afitauli e na'o le 'au'aunaga e mafai ona teuina fa'amatalaga. Ina ia galue e te manaʻomia pule - le manatu lona lua sili ona taua ma faavae i le lalolagi o Kubernetes.
E lua ituaiga autu o le pulea. O le mea muamua e ave faʻamatalaga mai Kubernetes, faʻagasolo e tusa ai ma manatu faʻapipiʻi, ma toe faʻafoʻi i K8s. O le lona lua e ave faʻamatalaga mai Kubernetes, ae, e le pei o le ituaiga muamua, suia le tulaga o nisi punaoa i fafo.
Sei o tatou vaʻavaʻai totoʻa i le faʻagasologa o le fatuina o se Faʻasalalauga i Kubernetes:
- Fa'atonu Pule (e aofia i totonu
kube-controller-manager) maua faʻamatalaga e uiga i le Faʻatulagaina ma fatuina se ReplicaSet. - ReplicaSet e faia ni kopi se lua (lua pods) e fa'atatau i lenei fa'amatalaga, ae o nei pods e le'i fa'atulagaina.
- E fa'atulaga e le tagata fa'atulagaina pods ma fa'aopoopo fa'amatalaga node i a latou YAML.
- Kubelets faia suiga i se punaoa i fafo (fai mai Docker).
Ona toe faia lea o lenei faasologa atoa i le faasologa faasolosolo: siaki e le kubelet pusa, fuafua le tulaga o le pod ma toe faafoi atu. E maua e le Pule o le ReplicaSet le tulaga ma fa'afouina le tulaga o le seti fa'atusa. O le mea lava lea e tasi e tupu i le Deployment Controller ma iu ai ina maua e le tagata faʻaoga le tulaga faʻafouina (o le taimi nei).

tagata fa'a'au'au
E foliga mai o Kubernetes e faʻavae i luga o le galuega faʻatasi a le tele o faʻatonu (o le Kubernetes operators o loʻo pulea foi). O le fesili e tulaʻi mai, faʻafefea ona fatuina lau oe lava faʻalapotopotoga ma se taumafaiga itiiti? Ma o le mea lea na matou atiina ae e sau e laveai . E mafai ai e le pulega o le polokalama ona fatuina a latou lava faʻamatalaga e faʻaaoga ai metotia masani.
Fa'ata'ita'iga faigofie: kopi mea lilo
Seʻi o tatou vaavaai i se faaaʻoaʻoga faigofie.
Fa'apea o lo'o i ai la tatou fuifui Kubernetes. O lo'o i ai se igoa avanoa default ma se mea lilo mysecret. E le gata i lea, o loʻo i ai isi igoa i totonu o le fuifui. O nisi oi latou o loʻo i ai se igoa faʻapitoa e faʻapipiʻi ia i latou. O la matou sini o le kopiina o le Secret i igoa avanoa ma se igoa.
O le galuega e faigata ona o le mea moni e mafai ona aliali mai igoa fou i totonu o le fuifui, ma o nisi oi latou e ono iai lenei igoa. I le isi itu, pe a tape le igoa, e tatau foi ona tape le Secret. E le gata i lea, o le mea lilo lava ia e mafai foi ona suia: i lenei tulaga, o le mealilo fou e tatau ona kopiina i igoa uma ma igoa. Afai e tape fa'afuase'i le Secret i so'o se igoa, e tatau ona toe fa'afo'i vave e le matou fa'alapotopotoga.
O lea la ua uma ona fa'atulagaina le galuega, ua o'o i le taimi e amata ai ona fa'atino e fa'aaoga ai le atigi-operator. Ae muamua e aoga le fai atu o ni nai upu e uiga i le atigi-operator lava ia.
E fa'afefea ona galue le shell-operator
E pei o isi galuega mamafa i Kubernetes, o le shell-operator e alu i lana lava pod. I totonu o lenei pusa i totonu o le lisi /hooks faila faila e teuina. E mafai ona avea ma tusitusiga i Bash, Python, Ruby, ma isi. Matou te taʻua ia faila faila o matau (faʻamau).

Shell-operator e lesitala i mea Kubernetes ma faʻatautaia nei matau e tali atu ai i na mea tatou te manaʻomia.

E fa'afefea ona iloa e le tagata fai atigi le matau e tamo'e ma afea? O le manatu o matau uma e lua vaega. I le taimi o le amataga, o le shell-operator e faʻatautaia matau uma ma se finauga --config O le tulaga lea o le faatulagaga. Ma a maeʻa, e faʻalauiloa matau i le auala masani - e tali atu ai i mea na tutupu o loʻo faʻapipiʻi ai. I le tulaga mulimuli, e maua e le matau le tala fa'atatau (tala fa'atatau) - faʻamatalaga i le JSON format, lea o le a tatou talanoa atili ai i lalo.
Faia o se tagata faʻatautaia i Bash
O lea ua matou sauni mo le faʻatinoga. Ina ia faia lenei mea, e tatau ona tatou tusia ni galuega se lua (i le ala, matou te fautuaina faletusi , lea e matua faafaigofieina ai le tusitusi matau i Bash):
- o le mea muamua e manaʻomia mo le faʻatulagaina o tulaga - e faʻaalia ai le faʻasologa o mea;
- o le lona lua o loʻo i ai le manatu autu o le matau.
#!/bin/bash
source /shell_lib.sh
function __config__() {
cat << EOF
configVersion: v1
# BINDING CONFIGURATION
EOF
}
function __main__() {
# THE LOGIC
}
hook::run "$@"
O le isi laasaga o le filifili po o a mea tatou te manaʻomia. I la matou tulaga, e tatau ona matou siaki:
- puna lilo mo suiga;
- igoa uma i le fuifui, ina ia e iloa po'o fea o lo'o iai se fa'ailoga e fa'apipi'i i ai;
- mealilo taula'i ina ia mautinoa o lo'o ogatasi uma ma le mealilo fa'apogai.
Fa'asoa i le puna lilo
Fuafuaga fusifusia mo ia e fai si faigofie. Matou te faʻaalia matou te fiafia i Secret ma le igoa mysecret i igoa avanoa default:

function __config__() {
cat << EOF
configVersion: v1
kubernetes:
- name: src_secret
apiVersion: v1
kind: Secret
nameSelector:
matchNames:
- mysecret
namespace:
nameSelector:
matchNames: ["default"]
group: main
EOF
O le i'uga, o le a fa'aoso le matau pe a suia le mealilo fa'apogai (src_secret) ma maua le tala fa'atatau o lo'o mulimuli mai:

E pei ona e vaʻai, o loʻo i ai le igoa ma le mea atoa.
Tausia o igoa avanoa
O lea la e tatau ona e lesitala i igoa avanoa. Ina ia faia lenei mea, matou te faʻamaonia le faʻaogaina o le faʻapipiʻiina lea:
- name: namespaces
group: main
apiVersion: v1
kind: Namespace
jqFilter: |
{
namespace: .metadata.name,
hasLabel: (
.metadata.labels // {} |
contains({"secret": "yes"})
)
}
group: main
keepFullObjectsInMemory: false
E pei ona e vaʻaia, ua faʻaalia se fanua fou i le faʻatulagaga ma le igoa jqFilter. E pei ona taʻu mai e lona igoa, jqFilter fa'amama uma fa'amatalaga e le mana'omia ma faia se mea fou JSON ma fanua e fiafia i ai i tatou. O se matau e iai se fa'atulagaga fa'apena o le a maua le fa'amatalaga fa'amaufa'atasi nei:

O lo'o iai se fa'asologa filterResults mo igoa ta'itasi ile fuifui. Boolean fesuiaiga hasLabel e fa'ailoa mai pe fa'apipi'i se fa'ailoga i se igoa avanoa. Tagata filifilia keepFullObjectsInMemory: false o lo'o ta'u mai ai e le mana'omia le teuina o mea uma e manatua.
Su'esu'eina mealilo fa'amoemoe
Matou te lesitala i mea lilo uma e iai faʻamatalaga faʻamaonia managed-secret: "yes" (O la matou sini lea dst_secrets):
- name: dst_secrets
apiVersion: v1
kind: Secret
labelSelector:
matchLabels:
managed-secret: "yes"
jqFilter: |
{
"namespace":
.metadata.namespace,
"resourceVersion":
.metadata.annotations.resourceVersion
}
group: main
keepFullObjectsInMemory: false
I lenei mea jqFilter fa'amama uma fa'amatalaga se'i vagana le igoa avanoa ma le parakalafa resourceVersion. O le parakalafa mulimuli na pasi atu i le faʻamatalaga pe a fatuina le mealilo: e mafai ai ona e faʻatusatusa faʻamatalaga o mealilo ma faʻafou i latou.
O se matau ua fa'atulagaina i lenei auala o le a, pe a fa'atinoina, e maua ai fa'amaumauga fa'amau e tolu o lo'o fa'amatalaina i luga. E mafai ona manatu o se ituaiga ata (ata) fuifui.

Faʻavae i luga o nei faʻamatalaga uma, e mafai ona atiaʻe se algorithm autu. E fa'asolosolo i luga o igoa avanoa uma ma:
- pe afai
hasLabelmatauputruemo le igoa o lo'o iai nei:- fa'atusatusa le mealilo o le lalolagi ma le mea fa'apitonu'u:
- afai e tasi i latou, e leai se aoga;
- afai latou te eseese - executes
kubectl replacepoʻocreate;
- fa'atusatusa le mealilo o le lalolagi ma le mea fa'apitonu'u:
- pe afai
hasLabelmataupufalsemo le igoa o lo'o iai nei:- faʻamautinoa e le o iai le Secret i le igoa avanoa:
- afai o loʻo i ai le Secret Secret, tape faʻaaoga
kubectl delete; - afai e le iloa le mea lilo i le lotoifale, e leai se mea e fai.
- afai o loʻo i ai le Secret Secret, tape faʻaaoga
- faʻamautinoa e le o iai le Secret i le igoa avanoa:

e mafai ona e sii maia i la matou .
O le auala lena na mafai ai ona matou fatuina se faʻatonuga Kubernetes e faʻaaoga ai laina 35 o le YAML config ma e tusa ma le aofaʻi tutusa o le Bash code! O le galuega a le shell-operator o le faʻafesoʻotaʻi faʻatasi.
Ae ui i lea, o le kopiina o mealilo e le na o le pau lea o le vaega o le faʻaogaina o le aoga. O nisi nei o faʻataʻitaʻiga e faʻaalia ai le mea na te mafaia.
Faataitaiga 1: Faia suiga ile ConfigMap
Se'i o tatou va'ava'ai i se Fa'asoa e aofia ai ni pusa se tolu. E fa'aoga e Pod le ConfigMap e teu ai nisi fa'atulagaga. Ina ua fa'alauiloa ia pods, sa i ai le ConfigMap i se tulaga patino (tatou ta'ua v.1). E tusa ai, o pods uma e faʻaogaina lenei faʻamatalaga patino o le ConfigMap.
Ia tatou faapea ua suia le ConfigMap (f.2). Ae ui i lea, o le pods o le a faʻaogaina le lomiga muamua o ConfigMap (v.1):

E fa'apefea ona ou fa'afeiloa'i i latou i le ConfigMap fou (v.2)? E faigofie le tali: faʻaaoga se mamanu. Se'i fa'aopoopo se fa'amatalaga siaki i le vaega template Fa'atonuga fa'atino:

O se taunuuga, o lenei siaki tupe o le a lesitala i pods uma, ma o le a tutusa ma le Deployment. Ole taimi nei e te manaʻomia le faʻafouina o le faʻamatalaga pe a suia le ConfigMap. Ma o le atigi-operator e sau i le tulaga lea. Pau lava le mea e tatau ona e faia o le polokalama se matau o le a lesitala i le ConfigMap ma faʻafouina le siaki tupe.
Afai e fai e le tagata fa'aoga suiga i le ConfigMap, o le a matauina e le atigi-operator ma toe fa'atatau le siakiga. A maeʻa lea o le a faʻaalia ai le togafiti faʻataulāitu a Kubernetes: o le a faʻaumatia e le tufuga le pusa, faia se mea fou, faʻatali mo ia. Ready, ma agai atu i le isi. O le i'uga, o le a fa'amaopoopo le Fa'atonu ma sui i le fa'afou fou o le ConfigMap.

Fa'ata'ita'iga 2: Galulue fa'atasi ma Fa'amatalaga Punaoa Fa'apitoa
E pei ona e iloa, o Kubernetes e faʻatagaina oe e fatuina ituaiga masani o mea faitino. Mo se faʻataʻitaʻiga, e mafai ona e fatuina le agalelei MysqlDatabase. Fa'apea o lenei ituaiga e lua metadata parameters: name и namespace.
apiVersion: example.com/v1alpha1
kind: MysqlDatabase
metadata:
name: foo
namespace: bar
E iai a matou fa'aputuga Kubernetes ma igoa eseese e mafai ona matou fatuina ai MySQL databases. I lenei tulaga e mafai ona fa'aogaina le shell-operator e siaki ai punaoa MysqlDatabase, faʻafesoʻotaʻi i latou i le MySQL server ma faʻamaopoopoina tulaga manaʻomia ma matauina o le fuifui.

Fa'ata'ita'iga 3: Mata'ituina o Feso'otaiga
E pei ona e iloa, o le faʻaaogaina o le ping o le auala sili lea ona faigofie e mataʻituina ai se fesoʻotaiga. I lenei faʻataʻitaʻiga o le a matou faʻaalia pe faʻapefea ona faʻatinoina sea mataʻituina e faʻaaoga ai le shell-operator.
Muamua lava, e tatau ona e lesitala i nodes. E mana'omia e le atigi le igoa ma le tuatusi IP o node ta'itasi. Faatasi ai ma la latou fesoasoani, o le a ia pingina nei nodes.
configVersion: v1
kubernetes:
- name: nodes
apiVersion: v1
kind: Node
jqFilter: |
{
name: .metadata.name,
ip: (
.status.addresses[] |
select(.type == "InternalIP") |
.address
)
}
group: main
keepFullObjectsInMemory: false
executeHookOnEvent: []
schedule:
- name: every_minute
group: main
crontab: "* * * * *"
Parakalafa executeHookOnEvent: [] taofia le matau mai le tamoe e tali atu i soʻo se mea e tupu (o lona uiga, i le tali atu i suiga, faʻaopoopo, tape nodes). Peitai, o ia o le a tamoe (ma fa'afou le lisi o nodes) Fa'atulagaina - minute uma, e pei ona faʻatonuina e le fanua schedule.
O lea la ua tula’i mai le fesili, e fa’afefea tonu ona tatou iloa fa’afitauli e pei o le leiloa o le pa’u? Sei o tatou tilotilo i le code:
function __main__() {
for i in $(seq 0 "$(context::jq -r '(.snapshots.nodes | length) - 1')"); do
node_name="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.name')"
node_ip="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.ip')"
packets_lost=0
if ! ping -c 1 "$node_ip" -t 1 ; then
packets_lost=1
fi
cat >> "$METRICS_PATH" <<END
{
"name": "node_packets_lost",
"add": $packets_lost,
"labels": {
"node": "$node_name"
}
}
END
done
}
Matou te faʻasolosolo i le lisi o nodes, maua o latou igoa ma tuatusi IP, ping i latou ma lafo iʻuga i Prometheus. E mafai e le Shell-operator ona auina atu fua faatatau i Prometheus, faʻasaoina i latou i se faila o loʻo i ai e tusa ai ma le ala o loʻo faʻamaonia i le fesuiaiga o le siosiomaga $METRICS_PATH.
e mafai ona e faia se tagata e faagaoioia mo le mataituina fesootaiga faigofie i se fuifui.
Faiga fa'atonu
O lenei tusiga o le a le atoatoa e aunoa ma le faamatalaina o se isi masini taua ua fausia i totonu o le atigi-operator. Va'ai faalemafaufau e fa'atino se ituaiga matau e tali atu ai i se mea na tupu i le fuifui.
- O le a le mea e tupu pe afai, i le taimi lava e tasi, e tupu se mea i totonu o le fuifui? O le isi mea na tupu?
- E fa'atautaia ea e le shell-operator se isi fa'ata'ita'iga o le matau?
- Ae fa'apefea pe a fai, e lima mea tutupu e tutupu i le fuifui i le taimi e tasi?
- O le a fa'agaioi tutusa e le atigi-fa'agaioiina?
- Ae fa'afefea mea fa'aaoga e pei ole manatua ma le PPU?
O le mea e lelei ai, o le shell-operator o loʻo i ai se masini faʻapipiʻi faʻapipiʻi. O mea uma e tutupu e tu'u ma fa'agasolo fa'asolosolo.
Sei o tatou faataitaia lenei mea i ni faataitaiga. Faapea e lua a tatou matau. O le mea muamua e alu i le matau muamua. A mae'a loa ona fa'agasolo, e aga'i i luma le laina. O isi mea e tolu e sosoo ai e toe faʻafeiloaʻi i le matau lona lua - ua aveese mai le laina ma ulufale i totonu "i se vaega". O lena lava e maua ai e le matau le tele o mea tutupu - po'o, sili atu le sa'o, o se fa'asologa o fa'asalalauga fa'atasi.
E faapena foi i nei mea tutupu e mafai ona tu'ufa'atasia i se tasi tele. O le parameter e nafa ma lenei mea group i le faatulagaga fusifusia.

E mafai ona e faia so'o se numera o laina/matau ma a latou fa'apotopotoga eseese. Mo se faʻataʻitaʻiga, e tasi le laina e mafai ona galue i ni matau se lua, poʻo le isi itu.

Pau lava le mea e tatau ona e faia o le faʻatulagaina o le fanua e tusa ai queue i le faatulagaga fusifusia. Afai e le o ta'u mai se igoa o le laina, e alu le matau i luga o le laina fa'aletonu (default). O lenei faiga fa'atonu e mafai ai e oe ona fa'ato'a uma fa'afitauli tau pulega o puna'oa pe a galue i matau.
iʻuga
Na matou faʻamatalaina le mea e taʻu o le atigi-operator, faʻaalia le auala e mafai ai ona faʻaoga vave ma faʻafaigofie le fausiaina o Kubernetes operators, ma tuʻuina atu ni faʻataʻitaʻiga o lona faʻaogaina.
O faʻamatalaga auʻiliʻili e uiga i le atigi-operator, faʻapea foʻi ma se aʻoaʻoga vave ile faʻaogaina, o loʻo maua ile tala tutusa . Aua e te faatuai e faʻafesoʻotaʻi i matou i fesili: e mafai ona e talanoaina i se faʻapitoa (i Rusia) poʻo totonu (i le gagana Peretania).
Ma afai e te fiafia i ai, matou te fiafia i taimi uma e vaʻai i mataupu fou / PR / fetu i GitHub, lea, i le ala, e mafai ona e mauaina isi . Faatasi ai ma i latou e taua le faʻamaonia , o le uso tele lea o le shell-operator. E fa'aogaina e lenei fa'aoga siata Helm e fa'apipi'i ai fa'aopoopoga, e mafai ona tu'uina atu fa'afouga ma mata'ituina fa'asologa o siata eseese/taua, fa'atonutonu le fa'apipi'iina o siata, ma e mafai fo'i ona toe fa'aleleia e tali atu ai i mea tutupu i totonu o le fuifui.

Vitio ma fa'asolo
Vitio mai le faatinoga (~23 minute):
Tuuina atu o le lipoti:
SALA
Faitau foi i la matou blog:
- «";
- «";
- «";
- «.
puna: www.habr.com
