پرو هوسٽر > بلاگ > انتظاميه > اسان جو تجربو etcd Kubernetes ڪلستر ۾ ڊيٽا سان ڪم ڪرڻ سڌو (K8s API کان سواء)
اسان جو تجربو etcd Kubernetes ڪلستر ۾ ڊيٽا سان ڪم ڪرڻ سڌو (K8s API کان سواء)
وڌ کان وڌ، ڪلائنٽ اسان کان پڇي رهيا آهن ڪبرنيٽس ڪلستر تائين رسائي فراهم ڪرڻ لاءِ ڪلسٽر اندر خدمتن تائين رسائي حاصل ڪرڻ لاءِ: ته جيئن اهي سڌو سنئون ڪجهه ڊيٽابيس يا خدمت سان ڳنڍي سگهن، مقامي ايپليڪيشن کي ڪلستر اندر ايپليڪيشنن سان ڳنڍڻ لاءِ...
مثال طور، توهان جي مقامي مشين مان هڪ خدمت سان ڳنڍڻ جي ضرورت آهي memcached.staging.svc.cluster.local. اسان هي صلاحيت مهيا ڪندا آهيون هڪ VPN استعمال ڪندي ڪلستر جي اندر جنهن سان ڪلائنٽ ڳنڍي ٿو. هن کي ڪرڻ لاءِ، اسان اعلان ڪريون ٿا سبنيٽس جي پوڊس، سروسز ۽ پش ڪلسٽر DNS ڪلائنٽ ڏانهن. اهڙيء طرح، جڏهن هڪ ڪلائنٽ خدمت سان ڳنڍڻ جي ڪوشش ڪري ٿو memcached.staging.svc.cluster.local, درخواست ڪلستر DNS ڏانهن وڃي ٿي ۽ جواب ۾ هن خدمت جو پتو ڪلستر سروس نيٽ ورڪ يا پوڊ ايڊريس کان وصول ڪري ٿو.
اسان kubeadm استعمال ڪندي K8s ڪلستر کي ترتيب ڏيو ٿا، جتي ڊفالٽ سروس سب نيٽ آهي 192.168.0.0/16، ۽ پوڊ جو نيٽ ورڪ آهي 10.244.0.0/16. عام طور تي هر شي چڱي طرح ڪم ڪري ٿو، پر اتي ڪجهه نقطا آهن:
سب نيٽ 192.168.*.* اڪثر ڪلائنٽ آفيس نيٽ ورڪن ۾ استعمال ٿيندا آهن، ۽ اڃا به وڌيڪ ڊولپر گهر نيٽ ورڪ ۾. ۽ پوءِ اسان تڪرارن سان ختم ڪريون ٿا: گهر جا روٽر هن سب نيٽ تي ڪم ڪن ٿا ۽ وي پي اين انهن سبنيٽس کي ڪلستر کان ڪلائنٽ ڏانهن ڌڪي ٿو.
اسان گهڻو وقت اڳ هڪ ئي پروجيڪٽ ۾ خدمتن ۽ پوڊس لاءِ مختلف ذيلي نيٽ استعمال ڪرڻ جو رواج اختيار ڪيو آهي - عام طور تي، ته جيئن سڀني ڪلستر جا مختلف نيٽ ورڪ هجن. تنهن هوندي به، آپريشن ۾ ڪلسٽرن جو هڪ وڏو تعداد آهي، جنهن کي مان شروع کان رول اوور ڪرڻ نه چاهيندس، ڇاڪاڻ ته اهي ڪيتريون ئي خدمتون هلائيندا آهن، رياستي ايپليڪيشنون وغيره.
سڀ کان وڌيڪ عام رواج ٻيهر ٺاهڻ آهي سڀ ڪجهه ClusterIP قسم سان خدمتون. هڪ اختيار جي طور تي، صلاح ڪري سگهي ٿو ۽ هي:
ھيٺ ڏنل عمل ۾ ھڪڙو مسئلو آھي: سڀڪنھن شيء کي ترتيب ڏيڻ کان پوء، پوڊس /etc/resolv.conf ۾ DNS نالي سرور جي طور تي پراڻي IP سان گڏ ايندا آھن.
جيئن ته مون کي اڃا تائين حل نه مليو، مون کي پوري ڪلستر کي kubeadm ري سيٽ سان ري سيٽ ڪرڻو پيو ۽ ان کي ٻيهر شروع ڪيو.
پر اهو هر ڪنهن لاءِ مناسب ناهي... هتي اسان جي ڪيس لاءِ وڌيڪ تفصيلي تعارف آهن:
فلالين استعمال ڪيو ويندو آهي؛
بادلن ۾ ۽ هارڊويئر تي ڪلسٽر آهن.
مان ڪلستر ۾ سڀني خدمتن کي ٻيهر ترتيب ڏيڻ کان پاسو ڪرڻ چاهيندس؛
عام طور تي گهٽ ۾ گهٽ مسئلن سان سڀ ڪجهه ڪرڻ جي ضرورت آهي؛
بنيادي ڪم کي يقيني بڻائڻ آهي ته ڪلستر ۾ kubeadm استعمال ڪندي هڪ خدمت سبٽ سان 192.168.0.0/16، ان سان مٽايو 172.24.0.0/16.
۽ ائين ئي ٿيو آهي ته اسان گهڻو وقت کان اهو ڏسڻ ۾ دلچسپي وٺندا هئاسين ته ڪبرنيٽس وغيره ۾ ڇا ۽ ڪيئن ذخيرو ٿيل آهي، ان سان ڇا ڪري سگهجي ٿو... تنهنڪري اسان سوچيو: “ڇو نه صرف ڊيٽا کي تازه ڪاري ڪريو etcd ۾، پراڻن IP پتي (سب نيٽ) کي نئين سان تبديل ڪريو؟ »
وغيره ۾ ڊيٽا سان ڪم ڪرڻ لاءِ تيار ٿيل اوزارن جي ڳولا ڪرڻ تي، اسان کي ڪجھ به نه مليو جيڪو مسئلو مڪمل طور تي حل ڪري. (انهي سان، جيڪڏهن توهان ڄاڻو ٿا ڪنهن به استعمال جي باري ۾ ڊيٽا سان ڪم ڪرڻ لاء سڌو etcd ۾، اسان لنڪ جي تعريف ڪنداسين.) بهرحال، هڪ سٺو شروعاتي نقطو آهي وغيره مددگار OpenShift کان(ان جي ليکڪن جي مهرباني!).
هي افاديت سرٽيفڪيٽ استعمال ڪندي etcd سان ڳنڍي سگهي ٿي ۽ حڪمن کي استعمال ڪندي اتان کان ڊيٽا پڙهي سگهي ٿي ls, get, dump.
شامل ڪريو وغيره
ايندڙ سوچ منطقي آهي: "توهان کي هن افاديت کي شامل ڪرڻ کان ڇا روڪيو آهي وغيره وغيره ۾ ڊيٽا لکڻ جي صلاحيت شامل ڪندي؟"
اهو ٻن نون ڪمن سان etcdhelper جو تبديل ٿيل ورزن بڻجي ويو changeServiceCIDR и changePodCIDR. هن تي توهان ڪوڊ ڏسي سگهو ٿا هتي.
نيون خاصيتون ڇا ڪندا؟ الگورتھم changeServiceCIDR:
هڪ deserializer ٺاهيو؛
CIDR کي تبديل ڪرڻ لاءِ باقاعده اظهار گڏ ڪريو؛
اسان ڪلستر ۾ ClusterIP قسم سان سڀني خدمتن جي ذريعي وڃون ٿا:
اي ڊي ڊي مان قيمت کي ڊيڪوڊ ڪريو Go اعتراض ۾؛
باقاعده اظهار استعمال ڪندي اسان پتي جي پهرين ٻن بائيٽ کي تبديل ڪندا آهيون.
سروس کي تفويض ڪريو هڪ IP پتو نئين سب نيٽ کان؛
هڪ سيريلائزر ٺاهيو، گو اعتراض کي پروٽوبف ۾ تبديل ڪريو، نئين ڊيٽا وغيره کي لکو.
فعل changePodCIDR بنيادي طور تي هڪجهڙائي changeServiceCIDR - صرف خدمت جي وضاحت کي تبديل ڪرڻ جي بدران، اسان اهو ڪندا آهيون نوڊ ۽ تبديلي لاءِ .spec.PodCIDR هڪ نئين ذيلي نيٽ ورڪ ڏانهن.
مشق
تبديل ڪريو سروس CIDR
ڪم کي لاڳو ڪرڻ جو منصوبو تمام سادو آهي، پر ان ۾ ڪلستر ۾ سڀني پوڊس جي ٻيهر تخليق جي وقت ۾ وقت شامل آهي. مکيه مرحلن کي بيان ڪرڻ کان پوء، اسان پڻ خيالن جي حصيداري ڪنداسين ته ڪيئن، نظريي ۾، هن وقت جي گهٽتائي کي گهٽائي سگهجي ٿو.
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
هي منصوبو توهان کي اجازت ڏيندو ته گھٽ ۾ گھٽ وقت گھٽ ڪرڻ جو وقت ~ هڪ منٽ تائين - سروس ختم ڪرڻ جي مدت لاءِ kube-dns-tmp ۽ خدمت لاءِ ذيلي نيٽ تبديل ڪرڻ kube-dns.
ترميمي podNetwork
ساڳئي وقت، اسان اهو ڏسڻ جو فيصلو ڪيو ته ڪيئن بدلجي وڃي podNetwork جي نتيجي ۾ etcdhelper استعمال ڪندي. عملن جو سلسلو هن ريت آهي:
۾ ٺاھ جوڙ کي درست ڪرڻ kube-system;
ڪيب-ڪنٽرولر-منيجر مينيفيسٽ کي درست ڪرڻ؛
تبديل ڪريو podCIDR سڌو etcd ۾؛
سڀني ڪلستر نوڊس کي ريبوٽ ڪريو.
هاڻي انهن عملن بابت وڌيڪ:
1. نالي جي جاءِ ۾ ConfigMap کي تبديل ڪريو kube-system:
7. جيڪڏهن توهان گهٽ ۾ گهٽ هڪ نوڊ ڇڏيندا آهيو پراڻي podCIDR, پوء kube-controller-manager شروع ڪرڻ جي قابل نه هوندا، ۽ ڪلستر ۾ پوڊ شيڊول نه ٿي سگهندا.
حقيقت ۾، podCIDR تبديل ڪرڻ اڃا به آسان ٿي سگهي ٿو (مثال طور، پوء). پر اسان اهو سکڻ چاهيون ٿا ته سڌو سنئون etcd سان ڪيئن ڪم ڪجي، ڇاڪاڻ ته اهڙا ڪيس آهن جڏهن ڪبرنيٽس شيون وغيره کي ايڊٽ ڪري رهيا آهن. صرف ممڪن قسم. (مثال طور، توهان صرف سروس فيلڊ کي بغير وقت جي بغير تبديل نٿا ڪري سگهو spec.clusterIP.)
نتيجو
مضمون سڌو سنئون وغيره ۾ ڊيٽا سان ڪم ڪرڻ جي امڪان تي بحث ڪري ٿو، يعني. Kubernetes API کي پاس ڪرڻ. ڪڏهن ڪڏهن هي طريقو توهان کي "مشڪل شيون" ڪرڻ جي اجازت ڏئي ٿو. اسان حقيقي K8s ڪلستر تي متن ۾ ڏنل عملن کي آزمايو. تنهن هوندي به، وسيع استعمال لاء سندن تياري جي حيثيت آهي PoC (تصور جو ثبوت). تنهن ڪري، جيڪڏهن توهان پنهنجي ڪلستر تي etcdhelper افاديت جو تبديل ٿيل نسخو استعمال ڪرڻ چاهيو ٿا، ائين ڪريو پنهنجي خطري تي.