ప్రోహోస్టర్ > బ్లాగ్ > పరిపాలన > Yandex.Cloud కోసం Kubernetes CCM (క్లౌడ్ కంట్రోలర్ మేనేజర్)ని పరిచయం చేస్తున్నాము
Yandex.Cloud కోసం Kubernetes CCM (క్లౌడ్ కంట్రోలర్ మేనేజర్)ని పరిచయం చేస్తున్నాము
ఇటీవలి వాటికి కొనసాగింపుగా CSI డ్రైవర్ విడుదల Yandex.Cloud కోసం మేము ఈ క్లౌడ్ కోసం మరొక ఓపెన్ సోర్స్ ప్రాజెక్ట్ను ప్రచురిస్తున్నాము - క్లౌడ్ కంట్రోలర్ మేనేజర్. CCM మొత్తం క్లస్టర్కు మాత్రమే కాకుండా, CSI డ్రైవర్కు కూడా అవసరం. దీని ప్రయోజనం మరియు కొన్ని అమలు లక్షణాల గురించిన వివరాలు కట్లో ఉన్నాయి.
పరిచయం
ఇది ఎందుకు?
Yandex.Cloud కోసం CCMని అభివృద్ధి చేయడానికి మమ్మల్ని ప్రేరేపించిన ఉద్దేశ్యాలు ఇప్పటికే వివరించిన వాటితో పూర్తిగా ఏకీభవించాయి ప్రకటన CSI డ్రైవర్లు. మేము వివిధ క్లౌడ్ ప్రొవైడర్ల నుండి అనేక కుబెర్నెట్స్ క్లస్టర్లను నిర్వహిస్తాము, దీని కోసం మేము ఒకే సాధనాన్ని ఉపయోగిస్తాము. ఇది ఈ ప్రొవైడర్ల యొక్క నిర్వహించబడే పరిష్కారాలను "బైపాస్ చేస్తూ" అనేక సౌకర్యాలను అమలు చేస్తుంది. అవును, మాకు నిర్దిష్ట సందర్భం మరియు అవసరాలు ఉన్నాయి, కానీ వాటి కారణంగా సృష్టించబడిన అభివృద్ధి ఇతర వినియోగదారులకు ఉపయోగకరంగా ఉండవచ్చు.
CCM అంటే ఏమిటి?
సాధారణంగా, మేము క్లస్టర్ కోసం మన చుట్టూ ఉన్న వాతావరణాన్ని సిద్ధం చేస్తాము బయట నుండి - ఉదాహరణకు, Terraform ఉపయోగించి. కానీ కొన్నిసార్లు మన చుట్టూ ఉన్న క్లౌడ్ వాతావరణాన్ని నిర్వహించాల్సిన అవసరం ఉంది క్లస్టర్ నుండి. ఈ అవకాశం అందించబడింది మరియు ఇది అమలు చేయబడుతుంది CCM.
ప్రత్యేకంగా, క్లౌడ్ కంట్రోలర్ మేనేజర్ ఐదు ప్రధాన రకాల పరస్పర చర్యలను అందిస్తుంది:
సందర్భాలలో – కుబెర్నెటెస్లో నోడ్ ఆబ్జెక్ట్ మధ్య 1:1 సంబంధాన్ని అమలు చేస్తుంది (Node) మరియు క్లౌడ్ ప్రొవైడర్లో వర్చువల్ మిషన్. దీని కోసం మేము:
ఫీల్డ్లో పూరించండి spec.providerID వస్తువులో Node. ఉదాహరణకు, OpenStack CCM కోసం ఈ ఫీల్డ్ కింది ఆకృతిని కలిగి ఉంది: openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0. మీరు క్లౌడ్ ప్రొవైడర్ పేరు మరియు ఆబ్జెక్ట్ యొక్క సర్వర్ (ఓపెన్స్టాక్లోని వర్చువల్ మెషీన్) యొక్క ప్రత్యేకమైన UUIDని చూడవచ్చు;
పూరకంగా nodeInfo వస్తువులో Node వర్చువల్ మిషన్ గురించిన సమాచారం. ఉదాహరణకు, మేము AWSలో ఉదాహరణ రకాన్ని పేర్కొంటాము;
మేము క్లౌడ్లో వర్చువల్ మెషీన్ ఉనికిని తనిఖీ చేస్తాము. ఉదాహరణకు, ఒక వస్తువు అయితే Node ఒక స్థితిలోకి వెళ్ళాడు NotReady, క్లౌడ్ ప్రొవైడర్లో వర్చువల్ మెషీన్ ఉనికిలో ఉందో లేదో మీరు తనిఖీ చేయవచ్చు providerID. అది అక్కడ లేకపోతే, వస్తువును తొలగించండి Node, లేకుంటే ఎప్పటికీ క్లస్టర్లోనే ఉంటుంది;
మండలాలు - వస్తువు కోసం వైఫల్యం డొమైన్ను సెట్ చేస్తుంది Node, షెడ్యూలర్ క్లౌడ్ ప్రొవైడర్లోని ప్రాంతాలు మరియు జోన్ల ప్రకారం పాడ్ కోసం నోడ్ను ఎంచుకోవచ్చు;
లోడ్ బ్యాలన్సర్ - ఒక వస్తువును సృష్టించేటప్పుడు Service రకంతో LoadBalancer బయటి నుండి క్లస్టర్ నోడ్లకు ట్రాఫిక్ని మళ్లించే ఒక రకమైన బ్యాలెన్సర్ను సృష్టిస్తుంది. ఉదాహరణకు, Yandex.Cloudలో మీరు ఉపయోగించవచ్చు NetworkLoadBalancer и TargetGroup ఈ ప్రయోజనాల కోసం;
రూట్ - నోడ్ల మధ్య నెట్వర్క్ను నిర్మిస్తుంది, ఎందుకంటే కుబెర్నెటెస్ అవసరాల ప్రకారం, ప్రతి పాడ్ దాని స్వంత IP చిరునామాను కలిగి ఉండాలి మరియు ఏదైనా ఇతర పాడ్ను చేరుకోగలగాలి. ఈ ప్రయోజనాల కోసం, మీరు ఓవర్లే నెట్వర్క్ (VXLAN, GENEVE)ని ఉపయోగించవచ్చు లేదా క్లౌడ్ ప్రొవైడర్ యొక్క వర్చువల్ నెట్వర్క్లో నేరుగా రూటింగ్ టేబుల్ని సెట్ చేయవచ్చు:
వాల్యూమ్ – PVC మరియు SC ఉపయోగించి PV యొక్క డైనమిక్ ఆర్డర్ను అనుమతిస్తుంది. ప్రారంభంలో, ఈ కార్యాచరణ CCMలో భాగంగా ఉంది, కానీ దాని గొప్ప సంక్లిష్టత కారణంగా ఇది ప్రత్యేక ప్రాజెక్ట్, కంటైనర్ స్టోరేజ్ ఇంటర్ఫేస్ (CSI)కి తరలించబడింది. మేము CSI గురించి ఒకటి కంటే ఎక్కువసార్లు మాట్లాడాము రాశారు మరియు, ఇప్పటికే చెప్పినట్లుగా, కూడా విడుదల చేయబడింది CSI డ్రైవర్.
గతంలో, క్లౌడ్తో పరస్పర చర్య చేసే అన్ని కోడ్లు కుబెర్నెట్స్ ప్రాజెక్ట్ యొక్క ప్రధాన Git రిపోజిటరీలో ఉన్నాయి k8s.io/kubernetes/pkg/cloudprovider/providers, కానీ పెద్ద కోడ్ బేస్తో పని చేయడంలో అసౌకర్యం ఉన్నందున వారు దీనిని వదిలివేయాలని నిర్ణయించుకున్నారు. పాత అమలులన్నీ దీనికి తరలించబడ్డాయి ప్రత్యేక రిపోజిటరీ. మరింత మద్దతు మరియు అభివృద్ధి సౌలభ్యం కోసం, అన్ని సాధారణ భాగాలు కూడా తరలించబడ్డాయి ప్రత్యేక రిపోజిటరీ.
CSI మాదిరిగానే, చాలా పెద్ద క్లౌడ్ ప్రొవైడర్లు ఇప్పటికే కుబెర్నెట్స్లో క్లౌడ్లను ప్రభావితం చేయడానికి తమ CCMలను రూపొందించారు. సరఫరాదారు CCMని కలిగి ఉండకపోయినా, అవసరమైన అన్ని విధులు API ద్వారా అందుబాటులో ఉంటే, మీరు CCMని మీరే అమలు చేయవచ్చు.
CCM యొక్క మీ స్వంత అమలును వ్రాయడానికి, అమలు చేయడానికి సరిపోతుంది గో ఇంటర్ఫేస్లు అవసరం.
ప్రారంభంలో, మేము ఇతర CCM ఇంప్లిమెంటేషన్ల వలె ఒక జతని సృష్టించడానికి ప్రయత్నించాము LoadBalancer и TargetGroup ప్రతి Service రకంతో LoadBalancer. అయితే, Yandex.Cloud ఒక ఆసక్తికరమైన పరిమితిని కనుగొన్నారు: మీరు ఉపయోగించలేరు TargetGroups ఖండనతో Targets (జత SubnetID - IpAddress).
అందువల్ల, సృష్టించబడిన CCM లోపల, ఒక నియంత్రిక ప్రారంభించబడుతుంది, ఇది వస్తువులు మారినప్పుడు Node ప్రతి వర్చువల్ మెషీన్లోని అన్ని ఇంటర్ఫేస్ల గురించిన సమాచారాన్ని సేకరిస్తుంది, నిర్దిష్ట వాటికి సంబంధించిన వాటి ప్రకారం వాటిని సమూహపరుస్తుంది NetworkID, ద్వారా సృష్టిస్తుంది TargetGroup న NetworkID, మరియు ఔచిత్యాన్ని కూడా పర్యవేక్షిస్తుంది. తదనంతరం, ఒక వస్తువును సృష్టించేటప్పుడు Service రకంతో LoadBalanacer మేము ముందుగా సృష్టించిన దానిని అటాచ్ చేస్తాము TargetGroup కొత్తకి NetworkLoadBalanacer'ఉదయం.
ఉపయోగించడం ఎలా ప్రారంభించాలి?
CCM కుబెర్నెటెస్ వెర్షన్ 1.15 మరియు అంతకంటే ఎక్కువ వాటికి మద్దతు ఇస్తుంది. ఒక క్లస్టర్లో, అది పని చేయడానికి, దానికి జెండా అవసరం --cloud-provider=external సెట్ చేయబడింది true kube-apiserver, kube-controller-manager, kube-షెడ్యూలర్ మరియు అన్ని kubelets కోసం.
సంస్థాపనకు అవసరమైన అన్ని దశలు వివరించబడ్డాయి README. మానిఫెస్ట్ల నుండి కుబెర్నెటెస్లో ఆబ్జెక్ట్లను సృష్టించడం వరకు ఇన్స్టాలేషన్ దిమ్మదిరిగింది.
Yandex.Cloud APIతో పరస్పర చర్య చేయడానికి సేవా ఖాతా. మేనిఫెస్టోలో Secret అవసరం అధీకృత కీలను బదిలీ చేయండి సేవా ఖాతా నుండి. డాక్యుమెంటేషన్లో వివరించబడింది, సేవా ఖాతాను ఎలా సృష్టించాలి మరియు కీలను ఎలా పొందాలి.
మీ అభిప్రాయాన్ని స్వీకరించడానికి మేము సంతోషిస్తాము మరియు కొత్త సమస్యలుమీకు ఏవైనా సమస్యలు ఎదురైతే!
ఫలితాలు
మేము గత రెండు వారాలుగా ఐదు కుబెర్నెట్స్ క్లస్టర్లలో అమలు చేసిన CCMని ఉపయోగిస్తున్నాము మరియు రాబోయే నెలలో వాటి సంఖ్యను 20కి విస్తరించాలని ప్లాన్ చేస్తున్నాము. మేము ప్రస్తుతం పెద్ద మరియు క్లిష్టమైన K8s ఇన్స్టాలేషన్ల కోసం CCMని ఉపయోగించమని సిఫార్సు చేయము.
CSI విషయంలో వలె, Yandex డెవలపర్లు ఈ ప్రాజెక్ట్ యొక్క అభివృద్ధి మరియు మద్దతును తీసుకుంటే మేము సంతోషిస్తాము - మాకు మరింత సంబంధితమైన పనులను ఎదుర్కోవటానికి మేము వారి అభ్యర్థన మేరకు రిపోజిటరీని బదిలీ చేయడానికి సిద్ధంగా ఉన్నాము.