ProHoster > Blog > fitantanan-draharaha > Ny traikefanay amin'ny angona ao amin'ny cluster Kubernetes etcd mivantana (tsy misy K8s API)
Ny traikefanay amin'ny angona ao amin'ny cluster Kubernetes etcd mivantana (tsy misy K8s API)
Mihamaro ny mpanjifa mangataka antsika hanome fidirana amin'ny kluster Kubernetes ahafahana miditra amin'ny serivisy ao anatin'ny kluster: afaka mifandray mivantana amin'ny angon-drakitra na serivisy sasany, mampifandray fampiharana eo an-toerana amin'ny fampiharana ao anatin'ny kluster...
Ohatra, ilaina ny mifandray amin'ny milina eo an-toerana amin'ny serivisy memcached.staging.svc.cluster.local. Manome izany fahaiza-manao izany izahay amin'ny fampiasana VPN ao anatin'ny cluster izay ifandraisan'ny mpanjifa. Mba hanaovana izany, dia manambara ny subnets amin'ny pods, serivisy ary manosika DNS cluster amin'ny mpanjifa. Noho izany, rehefa manandrana mifandray amin'ny serivisy ny mpanjifa memcached.staging.svc.cluster.local, mankany amin'ny DNS cluster ny fangatahana ary ho setrin'izany dia mahazo ny adiresin'ity serivisy ity avy amin'ny tambajotra serivisy cluster na ny adiresy pod.
Izahay dia manamboatra cluster K8s amin'ny alΓ lan'ny kubeadm, izay misy ny subnet serivisy default 192.168.0.0/16, ary ny tambajotran'ny pods dia 10.244.0.0/16. Matetika dia mandeha tsara ny zava-drehetra, saingy misy teboka roa:
Subnet 192.168.*.* matetika ampiasaina amin'ny tambajotra biraon'ny mpanjifa, ary matetika kokoa amin'ny tambajotra an-trano mpamorona. Ary avy eo dia mahazo fifandirana izahay: miasa amin'ity subnet ity ny router an-trano ary ny VPN dia manosika ireo subnets avy amin'ny cluster mankany amin'ny mpanjifa.
Manana cluster maromaro izahay (famokarana, sehatra ary/na vondrona dev maromaro). Avy eo, amin'ny alΓ lan'ny default, izy rehetra dia hanana subnets mitovy ho an'ny pods sy serivisy, izay miteraka fahasahiranana lehibe amin'ny asa miaraka amin'ny serivisy amin'ny cluster maromaro.
Efa ela izahay no nandray ny fomba fampiasana zana-tambajotra samihafa ho an'ny serivisy sy pods ao anatin'ny tetikasa iray ihany - amin'ny ankapobeny, mba hanana tambajotra samihafa ny cluster rehetra. Na izany aza, misy cluster marobe miasa izay tsy tiako hihodina avy hatrany, satria izy ireo dia manao serivisy maro, fampiharana ara-panjakana, sns.
Ary avy eo dia nanontany tena izahay hoe: ahoana no hanovana ny subnet amin'ny cluster efa misy?
Fikarohana fanapahan-kevitra
Ny fanao mahazatra indrindra dia ny mamerina ny rehetra serivisy misy karazana ClusterIP. Ho safidy, afaka manoro hevitra ary ity:
Ity dingana manaraka ity dia manana olana: aorian'ny fametrahana ny zava-drehetra, ny pods dia tonga miaraka amin'ny IP taloha ho DNS nameserver ao amin'ny /etc/resolv.conf.
Koa satria mbola tsy nahita ny vahaolana aho dia tsy maintsy namerina ny cluster manontolo miaraka amin'ny reset kubeadm ary manomboka izany indray.
Misy cluster na eny amin'ny rahona na amin'ny fitaovana;
Te-hiala amin'ny fametrahana indray ny serivisy rehetra ao amin'ny cluster aho;
Ilaina ny manao ny zava-drehetra amin'ny ankapobeny miaraka amin'ny olana kely indrindra;
Ny Kubernetes dia 1.16.6 (na izany aza, ny dingana hafa dia hitovy amin'ny dikan-teny hafa);
Ny tena asa dia ny miantoka fa ao amin'ny cluster napetraka mampiasa kubeadm miaraka amin'ny serivisy subnet 192.168.0.0/16, soloy amin'ny 172.24.0.0/16.
Ary ny zava-nitranga dia efa ela izahay no liana tamin'ny fahitana hoe inona sy ahoana no fitahirizana ao amin'ny Kubernetes ao amin'ny etcd, inona no azo atao amin'izany... Dia nieritreritra izahay hoe: βManinona raha manavao fotsiny ny angon-drakitra ao amin'ny etcd, soloina vaovao ny adiresy IP taloha (subnet).? "
Rehefa nikaroka fitaovana efa vonona hiasa amin'ny angon-drakitra ao amin'ny etcd izahay, dia tsy nahita na inona na inona nahavaha ny olana. (Raha ny tokony ho izy, raha fantatrao momba ny fitaovana ampiasaina amin'ny fiasana amin'ny angon-drakitra mivantana amin'ny etcd, dia mankasitraka ireo rohy izahay.) Na izany aza, ny toerana tsara hanombohana dia etcdhelper avy amin'ny OpenShift(misaotra ny mpanoratra azy!).
omeo adiresy IP avy amin'ny subnet vaovao ny serivisy;
mamorona serializer, manova ny zavatra Go ho protobuf, manoratra angona vaovao ho etcd.
asa changePodCIDR tena mitovy changeServiceCIDR - fa tsy manova ny fanondroana serivisy ihany no ataonay ho an'ny node sy ny fanovana .spec.PodCIDR amin'ny subnet vaovao.
fampiharana
Hanova serivisy CIDR
Ny drafitra amin'ny fanatanterahana ny asa dia tena tsotra, fa izany dia mitaky fotoana fitsaharana amin'ny fotoana fanamboarana indray ny pods rehetra ao amin'ny cluster. Aorian'ny famariparitana ireo dingana lehibe, dia hizara hevitra ihany koa isika amin'ny fomba, amin'ny teoria, ny mety hampihenana io fotoana io.
Dingana fanomanana:
fametrahana ny rindrambaiko ilaina sy ny fanangonana ny patched etcdhelper;
Mitahiry ho an'ny tenantsika isika etcdhelper.go, misintona miankina, manangona:
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
Miangavy azafady! Amin'izao fotoana izao dia mijanona tsy miasa ao amin'ny cluster ny famaha ny sehatra, satria ao amin'ny pods efa misy /etc/resolv.conf ny adiresy CoreDNS taloha (kube-dns) dia misoratra anarana, ary ny kube-proxy dia manova ny fitsipika iptables avy amin'ny subnet taloha mankany amin'ny vaovao. Ao amin'ny lahatsoratra dia nosoratana momba ny safidy mety hanamaivanana ny fotoana fitsaharana.
Andao amboary ny ConfigMap ao amin'ny namespace kube-system:
kubectl -n kube-system edit cm kubelet-config-1.16
- soloy eto clusterDNS mankany amin'ny adiresy IP vaovao an'ny serivisy kube-dns: kubectl -n kube-system get svc kube-dns.
manao if amin'ny etcdhelper, izay tsy hanova ny serivisy kube-dns.
Soloy ny adiresy amin'ny kubelets rehetra ClusterDNS amin'ny iray vaovao, fa ny serivisy taloha dia mbola hiasa miaraka amin'ny vaovao.
Andraso mandra-pihodina ny pods misy fampiharana na noho ny antony voajanahary na amin'ny fotoana nifanarahana.
Fafao ny serivisy kube-dns-tmp ary miova serviceSubnetCIDR ho an'ny serivisy kube-dns.
Ity drafitra ity dia ahafahanao manamaivana ny fotoana fialan-tsasatra ho ~ iray minitra - mandritra ny faharetan'ny fanesorana serivisy kube-dns-tmp ary manova ny subnet ho an'ny serivisy kube-dns.
Modification podNetwork
Nandritra izany fotoana izany, nanapa-kevitra ny hijery ny fomba hanovana podNetwork amin'ny fampiasana ny etcdhelper vokatra. Ny filaharan'ny hetsika dia toy izao manaraka izao:
fanamboarana configs in kube-system;
fanamboarana ny kube-controller-manager manifest;
manova podCIDR mivantana amin'ny etcd;
avereno indray ny node cluster rehetra.
More izao momba ireto hetsika ireto:
1. Ovao ny ConfigMap's ao amin'ny namespace kube-system:
6. Andeha hojerentsika tsirairay ny node cluster rehetra.
7. Raha miala amin'ny node iray farafahakeliny ianao podCIDR taloha, dia tsy afaka manomboka ny kube-controller-manager, ary tsy ho voalahatra ny pods ao amin'ny cluster.
Raha ny marina, ny fanovana podCIDR dia azo atao tsotra kokoa (ohatra, toy izany). Saingy te hianatra ny fomba fiasa mivantana amin'ny etcd izahay, satria misy tranga rehefa manitsy ny zavatra Kubernetes amin'ny etcd - irery ihany variana mety. (Ohatra, tsy azonao atao ny manova fotsiny ny saha serivisy raha tsy misy ny fotoana fialan-tsasatra spec.clusterIP.)
Ny vokany
Ny lahatsoratra dia miresaka momba ny mety hiasa amin'ny angona amin'ny etcd mivantana, i.e. mandingana ny Kubernetes API. Indraindray io fomba fiasa io dia ahafahanao manao "zavatra mamitaka". Nosedrainay ny asa nomena ao amin'ny lahatsoratra amin'ny k8s tena izy. Na izany aza, ny satan'ny fahavononana ho an'ny fampiasana miely patrana dia PoC (porofon'ny hevitra). Noho izany, raha te hampiasa dikan-teny novaina amin'ny utility etcdhelper ianao amin'ny clusters dia ataovy amin'ny risikao manokana izany.