ProHoster > Blag > Riarachán > An taithí atá againn ag obair le sonraí i gcnuasach Kubernetes etcd go díreach (gan K8s API)
An taithí atá againn ag obair le sonraí i gcnuasach Kubernetes etcd go díreach (gan K8s API)
Níos mó agus níos mó, tá cliaint ag iarraidh orainn rochtain a sholáthar ar bhraisle Kubernetes le bheith in ann rochtain a fháil ar sheirbhísí laistigh den bhraisle: a bheith in ann nascadh go díreach le bunachar sonraí nó seirbhís éigin, feidhmchlár áitiúil a nascadh le feidhmchláir laistigh den bhraisle...
Mar shampla, tá gá le nascadh ó do mheaisín áitiúil le seirbhís memcached.staging.svc.cluster.local. Cuirimid an cumas seo ar fáil ag baint úsáide as VPN laistigh den bhraisle lena nascann an cliant. Chun seo a dhéanamh, fógraímid subnets de pods, seirbhísí agus braisle DNS a bhrú ar an gcliant. Mar sin, nuair a dhéanann cliant iarracht ceangal leis an tseirbhís memcached.staging.svc.cluster.local, téann an t-iarratas chuig an DNS braisle agus mar fhreagra faigheann sé seoladh na seirbhíse seo ó líonra na seirbhíse braisle nó an seoladh pod.
Déanaimid braislí K8s a chumrú ag baint úsáide as kubeadm, áit a bhfuil an subnet seirbhíse réamhshocraithe 192.168.0.0/16, agus tá an líonra pods 10.244.0.0/16. De ghnáth oibríonn gach rud go maith, ach tá cúpla pointe ann:
Subnet 192.168.*.* a úsáidtear go minic i líonraí oifigí cliant, agus fiú níos minice i líonraí baile forbróirí. Agus ansin faigheann muid coinbhleachtaí: oibríonn ródairí baile ar an bhfolíon seo agus brúnn an VPN na subnets seo ón mbraisle chuig an gcliant.
Tá roinnt braislí againn (táirgeadh, stáitse agus/nó roinnt braislí forbartha). Ansin, de réir réamhshocraithe, beidh na subnets céanna acu go léir le haghaidh pods agus seirbhísí, rud a chruthaíonn deacrachtaí móra maidir le hobair chomhuaineach le seirbhísí i roinnt braislí.
Táimid tar éis glacadh le fada ó shin leis an gcleachtas subnets éagsúla a úsáid le haghaidh seirbhísí agus pods laistigh den tionscadal céanna - go ginearálta, ionas go mbeidh líonraí éagsúla ag gach braisle. Mar sin féin, tá líon mór braislí i bhfeidhm nár mhaith liom a rolladh anonn ó thús, ós rud é go ritheann siad go leor seirbhísí, feidhmchláir stáit, etc.
Agus ansin d'iarramar orainn féin: conas an subnet a athrú i mbraisle atá ann cheana féin?
Cinntí a chuardach
Is é an cleachtas is coitianta ná athchruthú go léir seirbhísí le cineál ClusterIP. Mar rogha, is féidir comhairle a thabhairt agus seo:
Tá fadhb ag an bpróiseas seo a leanas: tar éis gach rud a chumrú, tagann na pods suas leis an sean IP mar fhreastalaí ainm DNS i /etc/resolv.conf.
Ós rud é nár aimsigh mé an réiteach fós, bhí orm an braisle iomlán a athshocrú le kubeadm a athshocrú agus é a thionscnamh arís.
Ach níl sé seo oiriúnach do chách... Seo réamhrá níos mionsonraithe dár gcás:
Úsáidtear flannel;
Tá braislí sna scamaill agus ar chrua-earraí;
Ba mhaith liom a sheachaint ath-imscaradh na seirbhísí go léir sa bhraisle;
Is gá go ginearálta gach rud a dhéanamh le líon íosta fadhbanna;
Is é leagan Kubernetes 1.16.6 (mar sin féin, beidh céimeanna breise cosúil le leaganacha eile);
Is é an tasc is mó a chinntiú go bhfuil i mbraisle imscaradh ag baint úsáide as kubeadm le subnet seirbhíse 192.168.0.0/16, cuir ina ionad 172.24.0.0/16.
Agus tharla sé go raibh suim againn le fada an lá a fheiceáil cad é agus conas a stóráiltear Kubernetes in etcd, cad is féidir a dhéanamh leis... Mar sin cheapamar: “Cén fáth nach n-uasdátú ach na sonraí in srl., ag cur seoltaí nua in ionad na sean-seoltaí IP (folíon).? "
Tar éis dúinn uirlisí réamhdhéanta a chuardach le haghaidh oibriú le sonraí in etcd, ní bhfuaireamar aon rud a réitigh an fhadhb go hiomlán. (Dála an scéil, má tá eolas agat ar aon fhóntais chun oibriú le sonraí go díreach i srl, bheimis buíoch as na naisc.) Mar sin féin, is pointe tosaigh maith é etcdhelper ó OpenShift(buíochas lena údair!).
Is féidir leis an bhfóntas seo nascadh le etcd ag baint úsáide as teastais agus sonraí a léamh as sin ag baint úsáide as orduithe ls, get, dump.
Cuir etcdhelper leis
Tá an chéad smaoineamh eile loighciúil: “Cad é atá ag cur bac ort an áirgiúlacht seo a chur leis tríd an gcumas sonraí a scríobh chuig etcd a chur leis?”
Rinneadh leagan modhnaithe de etcdhelper de le dhá fheidhm nua changeServiceCIDR и changePodCIDR. ar sise is féidir leat an cód a fheiceáil anseo.
Cad a dhéanann na gnéithe nua? Algartam changeServiceCIDR:
díserializer a chruthú;
slonn rialta a thiomsú le cur in ionad CIDR;
téimid trí gach seirbhís leis an gcineál ClusterIP sa bhraisle:
díchódaigh an luach ó srl go réad Téigh;
ag baint úsáide as slonn rialta cuirimid an chéad dá bheart den seoladh in ionad;
sannfaidh an tseirbhís seoladh IP ón bhfolíon nua;
srathach a chruthú, an réad Téigh a thiontú ina phrotobuf, scríobh sonraí nua chuig etcd.
Feidhm changePodCIDR go bunúsach cosúil changeServiceCIDR - ach amháin in ionad eagarthóireacht a dhéanamh ar an tsonraíocht seirbhíse, a dhéanaimid é le haghaidh an nód agus athrú .spec.PodCIDR chuig fo-líon nua.
Cleachtais
Athraigh seirbhís CIDR
Tá an plean chun an tasc a chur i bhfeidhm an-simplí, ach baineann sé le downtime ag an am a athchruthú na pods go léir sa bhraisle. Tar éis cur síos a dhéanamh ar na príomhchéimeanna, roinnfimid smaointe maidir le conas, go teoiriciúil, is féidir an t-am aga neamhfhónaimh seo a íoslaghdú.
Céimeanna ullmhúcháin:
na bogearraí riachtanacha a shuiteáil agus an etcdhelper paisteáilte a chur le chéile;
cúltaca etcd agus /etc/kubernetes.
Plean gníomhaíochta gairid chun seirbhísCIDR a athrú:
athrú ar an apiserver agus manifests rialtóir-bainisteoir;
atheisiúint deimhnithe;
ag athrú seirbhísí ClusterIP in srl;
atosú ar gach pods sa bhraisle.
Seo a leanas seicheamh iomlán gníomhartha go mion.
1. Suiteáil etcd-cliant le haghaidh dumpála sonraí:
Sábhálann muid dúinn féin etcdhelper.go, spleáchais a íoslódáil, a bhailiú:
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
4. Athraigh an subnet seirbhíse i manifests eitleán rialaithe Kubernetes. I gcomhaid /etc/kubernetes/manifests/kube-apiserver.yaml и /etc/kubernetes/manifests/kube-controller-manager.yaml athraigh an paraiméadar --service-cluster-ip-range chuig folíon nua: 172.24.0.0/16 in ionad 192.168.0.0/16.
5. Ós rud é go bhfuilimid ag athrú an fholíon seirbhíse dá n-eisíonn kubeadm deimhnithe le haghaidh apiserver (lena n-áirítear), ní mór iad a atheisiúint:
Feicfimid cé na fearainn agus na seoltaí IP ar eisíodh an deimhniú reatha dóibh:
openssl x509 -noout -ext subjectAltName </etc/kubernetes/pki/apiserver.crt
X509v3 Subject Alternative Name:
DNS:dev-1-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:apiserver, IP Address:192.168.0.1, IP Address:10.0.0.163, IP Address:192.168.199.100
Déanaimis cumraíocht íosta a ullmhú le haghaidh kubeadm:
Rabhadh! Ag an nóiméad seo, stopann réiteach fearainn ag obair sa bhraisle, ós rud é i pods atá ann cheana féin /etc/resolv.conf tá an seanseoladh CoreDNS (kube-dns) cláraithe, agus athraíonn kube-proxy na rialacha iptables ón sean-fholíon go dtí an ceann nua. Tuilleadh san alt tá sé scríofa faoi roghanna féideartha chun downtime a íoslaghdú.
Ceartaimis ConfigMap san ainmspás kube-system:
kubectl -n kube-system edit cm kubelet-config-1.16
- ionad anseo clusterDNS chuig seoladh IP nua na seirbhíse kube-dns: kubectl -n kube-system get svc kube-dns.
kubectl -n kube-system edit cm kubeadm-config
- déanfaimid é a shocrú data.ClusterConfiguration.networking.serviceSubnet chuig fo-líon nua.
Ós rud é gur athraíodh an seoladh kube-dns, is gá an chumraíocht kubelet ar gach nód a nuashonrú:
Níl fágtha ach na pods go léir a atosú sa bhraisle:
kubectl get pods --no-headers=true --all-namespaces |sed -r 's/(S+)s+(S+).*/kubectl --namespace 1 delete pod 2/e'
Íoslaghdaigh aga neamhfhónaimh
Smaointe ar conas aga neamhfhónaimh a íoslaghdú:
Tar éis na manifests eitleán rialaithe a athrú, cruthaigh seirbhís nua kube-dns, mar shampla, leis an ainm kube-dns-tmp agus seoladh nua 172.24.0.10.
Déan if in etcdhelper, nach modhnóidh an tseirbhís kube-dns.
Ionadaigh an seoladh i ngach kubelets ClusterDNS go ceann nua, agus leanfaidh an seanseirbhís ag obair go comhuaineach leis an tseirbhís nua.
Fan go dtí go mbeidh na pods a bhfuil feidhmchláir orthu rolladh anonn iontu féin ar chúiseanna nádúrtha nó ag am comhaontaithe.
Scrios an tseirbhís kube-dns-tmp agus athrú serviceSubnetCIDR don tseirbhís kube-dns.
Ligfidh an plean seo duit aga neamhfhónaimh a íoslaghdú go ~ nóiméad - ar feadh ré bhaint na seirbhíse kube-dns-tmp agus an subnet don tseirbhís a athrú kube-dns.
Modhnú podNetwork
Ag an am céanna, shocraigh muid féachaint ar conas podNetwork a mhodhnú ag baint úsáide as an etcdhelper mar thoradh air. Seo a leanas seicheamh na ngníomhartha:
cumraíochtaí a shocrú i kube-system;
an forléiriú kube-controller-manager a shocrú;
athraigh podCIDR go díreach i srl;
atosaigh gach nód braisle.
Anois tuilleadh faoi na gníomhartha seo:
1. Athraigh ConfigMap sa spás ainm kube-system:
kubectl -n kube-system edit cm kubeadm-config
- ceartú data.ClusterConfiguration.networking.podSubnet chuig fo-líon nua 10.55.0.0/16.
6. Déanaimis na nóid bhraisle go léir a atosú ceann ar cheann.
7. Má fhágann tú nód amháin ar a laghad sean-podCIDR, ansin ní bheidh kube-controller-manager in ann tosú, agus ní bheidh pods sa bhraisle sceidealta.
Go deimhin, is féidir athrú podCIDR a dhéanamh níos simplí fós (mar shampla, mar sin). Ach bhíomar ag iarraidh a fháil amach conas oibriú le etcd go díreach, mar go bhfuil cásanna ann nuair a bhíonn rudaí Kubernetes in eagar srl - an t-aon cheann leagan féideartha. (Mar shampla, ní féidir leat an réimse Seirbhíse a athrú gan aga neamhfhónaimh spec.clusterIP.)
Iomlán na
Pléann an t-alt an fhéidearthacht oibriú le sonraí in etcd go díreach, i.e. ag seachaint API Kubernetes. Uaireanta ligeann an cur chuige seo duit "rudaí deacra" a dhéanamh. Rinneamar tástáil ar na hoibríochtaí a thugtar sa téacs ar bhraislí fíor-K8s. Mar sin féin, tá a stádas ullmhachta le húsáid fhorleathan PoC (cruthúnas coincheapa). Dá bhrí sin, más mian leat leagan modhnaithe den áirgiúlacht etcdhelper a úsáid ar do bhraislí, déan é sin ar do phriacal féin.