Nostra experientia cum notitia in etcd Kubernetes uvam directe (sine K8s API)
Clientes magis rogant nos ut accessum praebeamus ad botrum Kubernetes ut officia accedere possint intra botrum, ut possint directe coniungere aliquo datorum vel servitiorum, coniungere applicationem localem cum applicationibus intra botrum.
Exempli gratia, opus est connectere ex machina locali tuo ad servitium memcached.staging.svc.cluster.local. Hanc facultatem praebemus utendi VPN intra botrum cum quo client connectit. Ad hoc nuntiamus subnets siliquis, servitiis et dis botri DNS clienti. Unde cum clientelam coniungere conatur ad servitium memcached.staging.svc.cluster.localpetitio pergit ad botrum DNS et respondet inscriptioni huius servitii ex botri servitii retis vel vasculi inscriptionis.
K8s ligaturas configuramus utentes kubeadm, ubi defectus servitii subnet is 192.168.0.0/16ac retis siliquae 10.244.0.0/16. Fere omnia bene operantur, sed duo puncta sunt;
Subnet 192.168.*.* saepe usus est in retiaculis officii clientis, et etiam saepius in elit domus ligula. Et tunc certamina obtinemus: iter itineris opus in hoc subnet, et VPN has subnetes a botro ad clientem impellit.
Plures ligaturae habemus (productionem, scaenam et/vel plures racemos dev). Dein, defalta, iidem omnes subnetes pro siliquis et servitiis habebunt, quae magnas difficultates pro simultaneo opere cum servitiis in pluribus racemis procreant.
Nos iam pridem usu usi sumus diversis subnets pro servitiis et siliquis intra idem consilium - generatim, ut omnes ligaturae diversae retiacula habeant. Sunt tamen in operatione botri permulta, quae a scabere volvere nolim, cum multa officia, applicationes statusque currunt, etc.
Et tunc ipsi quaesivimus: quomodo subnet in existenti botro mutare?
Searching in decisions
Maxime usu est recreare omnes officia cum type ClusterIP. Velit optio, potest monere et hoc:
Processus sequens quaestionem habet: postquam omnia configurantur, siliquae ascendunt cum IP vetusto ut DNS nominatoris in /etc/resolv.conf.
Cum adhuc solutionem non inveniebam, totum botrum cum kubeadm retexere et iterum init.
Sed hoc non omnibus convenit.
Flannel' dicitur;
Botri sunt in nubibus et in ferramentis;
Nolim re- liquare omnia officia in botro vitare;
Opus est generaliter omnia agere cum minimo numero quaestionum;
Versio Kubernetes est 1.16.6 (similis tamen erit ulterior gradus in aliis versionibus);
Praecipuum opus est ut in botro destruxit usura kubeadm cum servitio subnet 192.168.0.0/16, Repone cum 172.24.0.0/16.
Et ita factum est ut iamdudum curavimus videre quid et quomodo in Kubernetes repositum in etc., quid fieri possit cum eo... Sic cogitavimus: βCur non solum renovare notitias in etc., reposuit in inscriptionibus IP antiquis (subnet) novis? Β»
Quaesito instrumentorum praeparatorum ad operandum cum notitia in etcd, nihil invenimus quod problema omnino solvitur. (Per viam, si scis aliquas utilitates ad operandum cum data directe in etc., per nexus bene volumus). Sed bonum principium est etcdhelper ex OpenShift(Auctoribus gratias).
Haec utilitas potest coniungere cum libellorum etcd utendo et lege data inde utendo mandata ls, get, dump.
Adde etcdhelper
Proxima cogitatio logica est: "Quid prohibet te hanc utilitatem addere addendo facultatem scribendi datas etcd?"
Facta est mutatio etchelperi versio cum duabus novis functionibus changeServiceCIDR ΠΈ changePodCIDR. in eam potes videre codice hic.
Quid novi features faciunt? Algorithmus changeServiceCIDR:
creare deserializer;
compilare a regular expression to repone CIDR;
itur per omnia officia cum genere ClusterIP in botro;
decode valorem ab etcd in a Go objectum;
a regulari locutione duos primos bytes inscriptionis substituimus;
munus IP inscriptioni e novo subnet assign;
creare serializer, converte Go objectum in protobuf, novas notitias scribe etc.
munus changePodCIDR per se similis changeServiceCIDR - solum pro edendis speciebus servitium, id facimus pro nodi et mutatione .spec.PodCIDR ad novam subnet.
praxi
Mutare ministerium CIDR
Consilium ad munus exsequendi valde simplex est, sed involvit tempus down tempore recreationis omnium leguminarum in botro. Gradibus principalibus perscriptis, cogitationes etiam communicabimus quomodo, in theoria, hoc downtime potest minui.
Gradus praeparatorii:
necessariis programmatibus inaugurari et disjicere etcdhelper congregare;
Nisi ipsi nobis etcdhelper.goclientelas, collecta;
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. Mutare ministerium subnet in Kubernetes imperium planum manifestat. In files /etc/kubernetes/manifests/kube-apiserver.yaml ΠΈ /etc/kubernetes/manifests/kube-controller-manager.yaml mutare modularis --service-cluster-ip-range ad novam subnet: 172.24.0.0/16 pro 192.168.0.0/16.
5. Cum mutamus servitium subnet ad quod kubeadm quaestiones testimoniales pro apiservore (including), necesse est ut reiciantur:
Videamus quae dominia et IP inscriptiones testimonium pro currenti prolatum est:
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
Cautus esto Hoc momento, resolutio regio in botro operatur, cum in legumine existente /etc/resolv.conf Inscriptio vetus CoreDNS (kube-dns) relatus est, et kube-proxy mutat regulas iptables ex veteri subnet ad novam. Praeterea in articulo scriptum est de optionibus possibilibus ad downtime minimize.
Sit scriptor configMap fix in spatio nominali kube-system:
kubectl -n kube-system edit cm kubelet-config-1.16
- hic reponere clusterDNS ad novam IP inscriptionem kube-dns servitii: kubectl -n kube-system get svc kube-dns.
kubectl -n kube-system edit cm kubeadm-config
- nos figam data.ClusterConfiguration.networking.serviceSubnet ad novam subnet.
Cum inscriptionem kube-dns mutatam esse, necesse est ut kubeletes omnes nodos config mittat;
7. Si exeatis saltem unus nodi vetus podCIDRtunc kube moderatoris procurator incipere non poterit, et siliquae in botro non accedant.
Re quidem vera mutatio podCIDR etiam simplicior fieri potest (exem. gr. ita). Sed voluimus scire quomodo laborare cum etc. tantum fieri variant. (Exempli gratia, non potes modo mutare agrum servitii sine tempore down spec.clusterIP.)
exitum
The article discusses De possibilitate operandi cum data in etc. directe, i.e. praeteriens Kubernetes API. Interdum aditus permittit te facere "dolosae res." Operationes in textu de racemis realibus K8s datis probavimus. Status autem promptitudinis ad usum diffundendum est PoC (probationem conceptus). Si ergo vis modificatam versionem utilitatis etc. adiutoris in racemis uti, fac cum periculo tuo.