ProHoster > blog > Amministrazzjoni > L-esperjenza tagħna bid-dejta fil-cluster ta’ etcd Kubernetes direttament (mingħajr K8s API)
L-esperjenza tagħna bid-dejta fil-cluster ta’ etcd Kubernetes direttament (mingħajr K8s API)
Dejjem aktar, il-klijenti qed jitolbuna biex nipprovdu aċċess għall-cluster Kubernetes biex ikunu jistgħu jaċċessaw is-servizzi fi ħdan il-cluster: sabiex ikunu jistgħu jgħaqqdu direttament ma 'xi database jew servizz, biex jgħaqqdu applikazzjoni lokali ma' applikazzjonijiet fi ħdan il-cluster...
Pereżempju, hemm bżonn li tikkonnettja mill-magna lokali tiegħek għal servizz memcached.staging.svc.cluster.local. Aħna nipprovdu din il-kapaċità billi tuża VPN fi ħdan il-cluster li miegħu jgħaqqad il-klijent. Biex tagħmel dan, aħna nħabbru subnets ta 'miżwed, servizzi u push cluster DNS lill-klijent. Għalhekk, meta klijent jipprova jgħaqqad mas-servizz memcached.staging.svc.cluster.local, it-talba tmur għand il-cluster DNS u bi tweġiba tirċievi l-indirizz ta’ dan is-servizz min-netwerk tas-servizz tal-cluster jew l-indirizz tal-pod.
Aħna kkonfiguraw clusters K8s billi tuża kubeadm, fejn is-subnet tas-servizz default hija 192.168.0.0/16, u n-netwerk tal-imżiewed huwa 10.244.0.0/16. Normalment kollox jaħdem tajjeb, iżda hemm ftit punti:
Subnet 192.168.*.* spiss jintuża fin-netwerks tal-uffiċċju tal-klijenti, u saħansitra aktar spiss fin-netwerks tad-dar tal-iżviluppaturi. U mbagħad ikollna kunflitti: ir-routers tad-dar jaħdmu fuq din is-subnet u l-VPN timbotta dawn is-subnets mill-cluster għall-klijent.
Għandna diversi clusters (produzzjoni, stadju u/jew diversi clusters dev). Imbagħad, b'mod awtomatiku, kollha kemm huma se jkollhom l-istess subnets għall-imżiewed u s-servizzi, li joħloq diffikultajiet kbar għal xogħol simultanju ma 'servizzi f'diversi clusters.
Ilna ilu adottaw il-prattika li nużaw subnets differenti għal servizzi u pods fi ħdan l-istess proġett - b'mod ġenerali, sabiex il-clusters kollha jkollhom netwerks differenti. Madankollu, hemm numru kbir ta 'clusters fl-operat li ma nixtieqx ngħaddi mill-bidu, peress li jmexxu ħafna servizzi, applikazzjonijiet stateful, eċċ.
U mbagħad staqsejna lilna nfusna: kif nibdlu s-subnet fi cluster eżistenti?
Tiftix ta' deċiżjonijiet
L-aktar prattika komuni hija li terġa 'tinħoloq kollha servizzi bit-tip ClusterIP. Bħala għażla, jista jagħti parir u dan:
Il-proċess li ġej għandu problema: wara kollox ikkonfigurat, il-miżwed joħorġu bl-IP l-antik bħala nameserver DNS f'/etc/resolv.conf.
Peress li għadni ma sibtx is-soluzzjoni, kelli reset il-cluster kollu b'kubeadm reset u nerġa' nibda.
Iżda dan mhux adattat għal kulħadd... Hawn huma introduzzjonijiet aktar dettaljati għall-każ tagħna:
Flanella tintuża;
Hemm raggruppamenti kemm fis-sħab kif ukoll fuq il-ħardwer;
Nixtieq nevita li skjerament mill-ġdid is-servizzi kollha fil-cluster;
Hemm bżonn li ġeneralment isir kollox b'numru minimu ta 'problemi;
Il-verżjoni Kubernetes hija 1.16.6 (madankollu, aktar passi se jkunu simili għal verżjonijiet oħra);
Il-kompitu ewlieni huwa li jiġi żgurat li fi cluster skjerati bl-użu ta 'kubeadm b'subnet tas-servizz 192.168.0.0/16, ibdelha bi 172.24.0.0/16.
U ġara li konna ilna interessati li naraw x’u kif fil-Kubernetes jinħażen f’etcd, x’jista’ jsir biha... Allura ħsibna: “Għaliex mhux biss taġġorna d-dejta f'etcd, billi tissostitwixxi l-indirizzi IP qodma (subnet) b'oħrajn ġodda? "
Wara li fittxejna għodod lesti biex naħdmu mad-dejta fl-etcd, ma sibna xejn li solviet kompletament il-problema. (Mill-mod, jekk taf dwar xi utilitajiet biex taħdem bid-dejta direttament fl-etcd, napprezzaw il-links.) Madankollu, punt tat-tluq tajjeb huwa etcdhelper minn OpenShift(grazzi lill-awturi tagħha!).
Din l-utilità tista 'tqabbad ma' etcd billi tuża ċertifikati u taqra d-dejta minn hemm billi tuża kmandi ls, get, dump.
Żid etcdhelper
Il-ħsieb li jmiss huwa loġiku: "X'qed iwaqqafk milli żżid din l-utilità billi żżid il-ħila li tikteb id-dejta fuq etcd?"
Sar verżjoni modifikata ta' etcdhelper b'żewġ funzjonijiet ġodda changeServiceCIDR и changePodCIDR. fuqha tista 'tara l-kodiċi hawn.
jikkompila espressjoni regolari biex tissostitwixxi s-CIDR;
ngħaddu mis-servizzi kollha bit-tip ClusterIP fil-cluster:
jiddekowdja l-valur minn etcd f'oġġett Go;
billi tuża espressjoni regolari nissostitwixxu l-ewwel żewġ bytes tal-indirizz;
tassenja s-servizz indirizz IP mis-subnet il-ġdid;
oħloq serializzatur, ikkonverti l-oġġett Go fi protobuf, ikteb data ġdida lil etcd.
Funzjoni changePodCIDR essenzjalment simili changeServiceCIDR - biss minflok ma neditjaw l-ispeċifikazzjoni tas-servizz, nagħmluha għan-node u nbiddlu .spec.PodCIDR għal subnet ġdid.
Prattika
Bidla tas-servizz CIDR
Il-pjan għall-implimentazzjoni tal-kompitu huwa sempliċi ħafna, iżda jinvolvi waqfien fil-ħin tal-ħolqien mill-ġdid tal-imżiewed kollha fil-cluster. Wara li niddeskrivew il-passi ewlenin, se naqsmu wkoll ħsibijiet dwar kif, fit-teorija, dan il-ħin ta 'waqfien jista' jiġi minimizzat.
Passi preparatorji:
l-installazzjoni tas-softwer meħtieġ u l-assemblaġġ tal-etcdhelper patched;
backup etcd u /etc/kubernetes.
Pjan ta' azzjoni fil-qosor għat-tibdil tas-servizz CIDR:
tibdil tal-manifesti tal-apiserver u tal-kontrollur-manager;
ħruġ mill-ġdid taċ-ċertifikati;
it-tibdil tas-servizzi ClusterIP f'etcd;
bidu mill-ġdid tal-imżiewed kollha fil-cluster.
Din li ġejja hija sekwenza sħiħa ta 'azzjonijiet fid-dettall.
wget https://raw.githubusercontent.com/flant/examples/master/2020/04-etcdhelper/etcdhelper.go
go get go.etcd.io/etcd/clientv3 k8s.io/kubectl/pkg/scheme k8s.io/apimachinery/pkg/runtime
go build -o etcdhelper etcdhelper.go
Attenzjoni! F'dan il-mument, ir-riżoluzzjoni tad-dominju tieqaf taħdem fil-cluster, peress li fil-miżwed eżistenti /etc/resolv.conf l-indirizz CoreDNS antik (kube-dns) huwa reġistrat, u kube-proxy jibdel ir-regoli iptables mis-subnet il-qadima għal dik ġdida. Aktar fl-artikolu huwa miktub dwar għażliet possibbli biex jimminimizzaw il-perijodi ta 'waqfien.
Li jibqa 'huwa li terġa' tibda l-imżiewed kollha fil-cluster:
kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(S+)s+(S+).*/kubectl --namespace 1 delete pod 2/e'
Imminimizza l-waqfien
Ħsibijiet dwar kif timminimizza l-waqfien:
Wara li tbiddel il-manifesti tal-pjan ta 'kontroll, oħloq servizz ġdid ta' kube-dns, pereżempju, bl-isem kube-dns-tmp u indirizz ġdid 172.24.0.10.
Għamla if f'etcdhelper, li mhux se jimmodifika s-servizz kube-dns.
Ibdel l-indirizz fil-kubelets kollha ClusterDNS għal wieħed ġdid, filwaqt li s-servizz l-antik se jkompli jaħdem fl-istess ħin mal-ġdid.
Stenna sakemm il-miżwed bl-applikazzjonijiet jinqalgħu jew waħedhom għal raġunijiet naturali jew fi żmien miftiehem.
Ħassar is-servizz kube-dns-tmp u l-bidla serviceSubnetCIDR għas-servizz kube-dns.
Dan il-pjan jippermettilek timminimizza l-waqfien għal ~ minuta - għat-tul tat-tneħħija tas-servizz kube-dns-tmp u tbiddel is-subnet għas-servizz kube-dns.
Modifika podNetwork
Fl-istess ħin, iddeċidejna li nħarsu lejn kif timmodifika podNetwork billi tuża l-etcdhelper li jirriżulta. Is-sekwenza tal-azzjonijiet hija kif ġej:
6. Ejja nibdew mill-ġdid in-nodi tal-cluster kollha wieħed wieħed.
7. Jekk tħalli mill-inqas nodu wieħed podCIDR qodma, allura kube-controller-manager ma jkunx jista 'jibda, u l-imżiewed fil-cluster mhux se jkunu skedati.
Fil-fatt, it-tibdil tal-podCIDR jista’ jsir saħansitra aktar sempliċi (pereżempju, hekk). Imma ridna nitgħallmu kif naħdmu bl-etcd direttament, għax hemm każijiet meta teditja oġġetti Kubernetes f'etcd - l-uniku varjant possibbli. (Pereżempju, ma tistax sempliċement tibdel il-qasam tas-Servizz mingħajr waqfien spec.clusterIP.)
Total
L-artiklu jiddiskuti l-possibbiltà li taħdem b'dejta f'etcd direttament, i.e. billi tevita l-API Kubernetes. Xi drabi dan l-approċċ jippermettilek li tagħmel "affarijiet delikati". Aħna ttestjajna l-operazzjonijiet mogħtija fit-test fuq clusters reali K8s. Madankollu, l-istatus tagħhom ta 'prontezza għal użu mifrux huwa PoC (prova tal-kunċett). Għalhekk, jekk trid tuża verżjoni modifikata tal-utilità etcdhelper fuq il-clusters tiegħek, agħmel dan bir-riskju tiegħek.