నిజం చెప్పాలంటే, నాకు 100% ఖచ్చితంగా తెలియదు. కానీ ఇంటర్నల్లను త్రవ్వడం మరియు కుబెర్నెట్స్లో నిజంగా ఏమి జరుగుతుందో చూడటం ఆసక్తికరంగా ఉందని నేను భావిస్తున్నాను. కాబట్టి కేవలం వినోదం కోసం, కనీస “కుబెర్నెటెస్ క్లస్టర్” వాస్తవానికి ఎలా ఉంటుందో చూద్దాం. (ఇది కంటే చాలా సులభం అవుతుంది కుబెర్నెటెస్ ది హార్డ్ వే.)
మీకు కుబెర్నెట్స్, లైనక్స్ మరియు కంటైనర్ల గురించి ప్రాథమిక పరిజ్ఞానం ఉందని నేను భావిస్తున్నాను. మేము ఇక్కడ మాట్లాడేవన్నీ పరిశోధన/అభ్యాస ప్రయోజనాల కోసం మాత్రమే, వాటిలో దేనినీ ఉత్పత్తిలో పెట్టవద్దు!
పర్యావలోకనం
Kubernetes అనేక భాగాలను కలిగి ఉంది. ప్రకారం వికీపీడియా, ఆర్కిటెక్చర్ ఇలా కనిపిస్తుంది:
ఇక్కడ కనీసం ఎనిమిది భాగాలు చూపబడ్డాయి, కానీ వాటిలో చాలా వరకు మేము విస్మరిస్తాము. సహేతుకంగా కుబెర్నెట్స్ అని పిలవబడే కనీస విషయం మూడు ప్రధాన భాగాలను కలిగి ఉంటుందని నేను చెప్పాలనుకుంటున్నాను:
క్యూబ్లెట్
kube-apiserver (ఇది etcd పై ఆధారపడి ఉంటుంది - దాని డేటాబేస్)
కంటైనర్ రన్టైమ్ (ఈ సందర్భంలో డాకర్)
వాటిలో ప్రతి దాని గురించి డాక్యుమెంటేషన్ ఏమి చెబుతుందో చూద్దాం (రస్., ఆంగ్ల.) మొదట క్యూబ్లెట్:
క్లస్టర్లోని ప్రతి నోడ్పై పనిచేసే ఏజెంట్. పాడ్లో కంటైనర్లు నడుస్తున్నట్లు ఇది నిర్ధారిస్తుంది.
తగినంత సింపుల్ గా అనిపిస్తుంది. గురించి కంటైనర్ రన్టైమ్లు (కంటైనర్ రన్టైమ్)?
కంటైనర్ రన్టైమ్ అనేది కంటైనర్లను అమలు చేయడానికి రూపొందించబడిన ప్రోగ్రామ్.
చాలా ఇన్ఫర్మేటివ్. మీకు డాకర్ గురించి బాగా తెలిసి ఉంటే, అది ఏమి చేస్తుందనే దాని గురించి మీకు సాధారణ ఆలోచన ఉండాలి. (కంటైనర్ రన్టైమ్ మరియు కుబెలెట్ మధ్య బాధ్యతల విభజన వివరాలు వాస్తవానికి చాలా సూక్ష్మంగా ఉన్నాయి మరియు నేను వాటి జోలికి వెళ్లను.)
И API సర్వర్?
API సర్వర్ అనేది Kubernetes APIని బహిర్గతం చేసే Kubernetes నియంత్రణ ప్యానెల్ భాగం. API సర్వర్ అనేది Kubernetes నియంత్రణ ప్యానెల్ యొక్క క్లయింట్ వైపు
కుబెర్నెట్స్తో ఎప్పుడైనా ఏదైనా చేసిన ఎవరైనా APIతో నేరుగా లేదా kubectl ద్వారా పరస్పర చర్య చేయాల్సి ఉంటుంది. మనందరికీ తెలిసిన మరియు ఇష్టపడే (?) YAML పర్వతాలను పని చేసే అవస్థాపనగా మార్చే మెదడు - ఇది కుబెర్నెటెస్ కుబెర్నెట్స్గా చేస్తుంది. మా కనిష్ట కాన్ఫిగరేషన్లో API ఉండాలని స్పష్టంగా కనిపిస్తోంది.
ముందస్తు షరతులు
రూట్ యాక్సెస్తో Linux వర్చువల్ లేదా ఫిజికల్ మెషీన్ (నేను వర్చువల్ మెషీన్లో ఉబుంటు 18.04ని ఉపయోగిస్తున్నాను).
మరియు అది అంతే!
బోరింగ్ సంస్థాపన
మనం ఉపయోగించే మెషీన్లో డాకర్ని ఇన్స్టాల్ చేయాలి. (డాకర్ మరియు కంటైనర్లు ఎలా పని చేస్తాయో నేను వివరంగా చెప్పను; మీకు ఆసక్తి ఉంటే, అద్భుతమైన వ్యాసాలు) దీనితో ఇన్స్టాల్ చేద్దాం apt:
ఆ తర్వాత, మేము కుబెర్నెట్స్ బైనరీలను పొందాలి. వాస్తవానికి, మా "క్లస్టర్" యొక్క ప్రారంభ ప్రయోగానికి మనకు మాత్రమే అవసరం kubelet, ఇతర సర్వర్ భాగాలను అమలు చేయడానికి మేము ఉపయోగించవచ్చు kubelet. మా క్లస్టర్ రన్ అయిన తర్వాత దానితో ఇంటరాక్ట్ అవ్వడానికి, మేము కూడా ఉపయోగిస్తాము kubectl.
kubelet రూట్గా అమలు చేయాలి. అతను మొత్తం నోడ్ను నిర్వహించాల్సిన అవసరం ఉన్నందున చాలా తార్కికం. దాని పారామితులను చూద్దాం:
$ ./kubelet -h
<слишком много строк, чтобы разместить здесь>
$ ./kubelet -h | wc -l
284
వావ్, చాలా ఎంపికలు! అదృష్టవశాత్తూ, మనకు వాటిలో కొన్ని మాత్రమే అవసరం. మాకు ఆసక్తి ఉన్న పారామితులలో ఒకటి ఇక్కడ ఉంది:
--pod-manifest-path string
స్టాటిక్ పాడ్ల కోసం ఫైల్లను కలిగి ఉన్న డైరెక్టరీకి మార్గం లేదా స్టాటిక్ పాడ్లను వివరించే ఫైల్కు మార్గం. చుక్కలతో ప్రారంభమయ్యే ఫైల్లు విస్మరించబడతాయి. (విస్మరించబడింది: --config ఎంపిక ద్వారా Kubeletకి పంపబడిన కాన్ఫిగరేషన్ ఫైల్లో ఈ ఎంపికను తప్పనిసరిగా సెట్ చేయాలి. మరింత సమాచారం కోసం, చూడండి kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file .)
ఈ ఐచ్ఛికం మాకు అమలు చేయడానికి అనుమతిస్తుంది స్టాటిక్ పాడ్లు — Kubernetes API ద్వారా నిర్వహించబడని పాడ్లు. స్టాటిక్ పాడ్లు చాలా అరుదుగా ఉపయోగించబడతాయి, అయితే అవి త్వరగా క్లస్టర్ను పెంచడానికి చాలా సౌకర్యవంతంగా ఉంటాయి మరియు ఇది మనకు అవసరమైనది. మేము ఈ పెద్ద హెచ్చరికను విస్మరిస్తాము (మళ్లీ, దీన్ని ఉత్పత్తిలో అమలు చేయవద్దు!) మరియు మేము పాడ్ను అమలు చేయగలమో లేదో చూద్దాం.
ముందుగా స్టాటిక్ పాడ్ల కోసం డైరెక్టరీని క్రియేట్ చేసి రన్ చేస్తాము kubelet:
kubelet కొన్ని హెచ్చరికలు రాయడం ప్రారంభిస్తుంది మరియు ఏమీ జరగడం లేదు. కానీ అది నిజం కాదు! డాకర్ గురించి చూద్దాం:
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c8a35e26663 busybox "echo 'hello world!'" 36 seconds ago Exited (0) 36 seconds ago k8s_hello_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_4
68f670c3c85f k8s.gcr.io/pause:3.2 "/pause" 2 minutes ago Up 2 minutes k8s_POD_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_0
$ sudo docker logs k8s_hello_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_4
hello world!
kubelet నేను పాడ్ మానిఫెస్ట్ని చదివాను మరియు మా స్పెసిఫికేషన్ల ప్రకారం రెండు కంటైనర్లను ప్రారంభించమని డాకర్కు ఆదేశాన్ని ఇచ్చాను. (మీరు "పాజ్" కంటైనర్ గురించి ఆలోచిస్తున్నట్లయితే, ఇది కుబెర్నెట్స్ హ్యాక్ - చూడండి ఈ బ్లాగ్.) కుబెలెట్ మా కంటైనర్ను లాంచ్ చేస్తుంది busybox పేర్కొన్న ఆదేశంతో మరియు స్టాటిక్ పాడ్ తొలగించబడే వరకు దానిని నిరవధికంగా పునఃప్రారంభిస్తుంది.
మిమ్మల్ని మీరు అభినందించుకోండి. టెర్మినల్కు వచనాన్ని అవుట్పుట్ చేయడానికి మేము చాలా గందరగోళంగా ఉన్న మార్గాలలో ఒకదానితో ముందుకు వచ్చాము!
మొదలైన వాటిని ప్రారంభించండి
మా అంతిమ లక్ష్యం Kubernetes APIని అమలు చేయడం, కానీ అలా చేయడానికి మనం ముందుగా అమలు చేయాలి మొదలైనవి. పాడ్స్ డైరెక్టరీలో దాని సెట్టింగ్లను ఉంచడం ద్వారా కనిష్ట etcd క్లస్టర్ను ప్రారంభిద్దాం (ఉదాహరణకు, pods/etcd.yaml):
మీరు ఎప్పుడైనా Kubernetesతో పని చేసి ఉంటే, ఈ YAML ఫైల్లు మీకు బాగా తెలిసి ఉండాలి. ఇక్కడ గమనించదగ్గ రెండు పాయింట్లు మాత్రమే ఉన్నాయి:
మేము హోస్ట్ ఫోల్డర్ను మౌంట్ చేసాము /var/lib/etcd పాడ్లో తద్వారా etcd డేటా పునఃప్రారంభించిన తర్వాత భద్రపరచబడుతుంది (ఇది చేయకపోతే, పాడ్ పునఃప్రారంభించిన ప్రతిసారీ క్లస్టర్ స్థితి తొలగించబడుతుంది, ఇది కనీస కుబెర్నెట్స్ ఇన్స్టాలేషన్కు కూడా మంచిది కాదు).
మేము ఇన్స్టాల్ చేసాము hostNetwork: true. ఈ సెట్టింగ్, ఆశ్చర్యకరంగా, పాడ్ యొక్క అంతర్గత నెట్వర్క్కు బదులుగా హోస్ట్ నెట్వర్క్ని ఉపయోగించడానికి etcdని కాన్ఫిగర్ చేస్తుంది (ఇది etcd క్లస్టర్ను కనుగొనడం API సర్వర్కు సులభతరం చేస్తుంది).
etcd నిజానికి లోకల్ హోస్ట్లో నడుస్తోందని మరియు డేటాను డిస్క్లో సేవ్ చేస్తుందని ఒక సాధారణ తనిఖీ చూపిస్తుంది:
$ curl localhost:2379/version
{"etcdserver":"3.4.3","etcdcluster":"3.4.0"}
$ sudo tree /var/lib/etcd/
/var/lib/etcd/
└── member
├── snap
│ └── db
└── wal
├── 0.tmp
└── 0000000000000000-0000000000000000.wal
API సర్వర్ని ప్రారంభిస్తోంది
Kubernetes API సర్వర్ని అమలు చేయడం మరింత సులభం. పాస్ చేయవలసిన ఏకైక పరామితి --etcd-servers, మీరు ఆశించినది చేస్తుంది:
ఈ YAML ఫైల్ను డైరెక్టరీలో ఉంచండి pods, మరియు API సర్వర్ ప్రారంభమవుతుంది. తో తనిఖీ చేస్తోంది curl Kubernetes API పూర్తిగా ఓపెన్ యాక్సెస్తో పోర్ట్ 8080లో వింటున్నట్లు చూపిస్తుంది - ప్రామాణీకరణ అవసరం లేదు!
(మళ్ళీ, దీన్ని ప్రొడక్షన్లో అమలు చేయవద్దు! డిఫాల్ట్ సెట్టింగ్ చాలా అసురక్షితంగా ఉందని నేను కొంచెం ఆశ్చర్యపోయాను. కానీ అభివృద్ధి మరియు పరీక్షను సులభతరం చేయడానికి నేను ఊహిస్తున్నాను.)
మరియు, ఆశ్చర్యకరంగా, kubectl ఎటువంటి అదనపు సెట్టింగ్లు లేకుండా బాక్స్ వెలుపల పని చేస్తుంది!
$ ./kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:47:41Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:39:24Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
$ ./kubectl get pod
No resources found in default namespace.
సమస్య
కానీ మీరు కొంచెం లోతుగా త్రవ్వినట్లయితే, ఏదో తప్పు జరుగుతున్నట్లు అనిపిస్తుంది:
$ ./kubectl get pod -n kube-system
No resources found in kube-system namespace.
మేము సృష్టించిన స్టాటిక్ పాడ్లు పోయాయి! వాస్తవానికి, మా కుబెలెట్ నోడ్ కనుగొనబడలేదు:
$ ./kubectl get nodes
No resources found in default namespace.
ఏంటి విషయం? మీరు కొన్ని పేరాగ్రాఫ్ల క్రితం గుర్తుంచుకుంటే, మేము చాలా సులభమైన కమాండ్ లైన్ పారామితులతో kubeletని ప్రారంభించాము, కాబట్టి API సర్వర్ని ఎలా సంప్రదించాలో మరియు దాని స్థితిని ఎలా తెలియజేయాలో kubeletకి తెలియదు. డాక్యుమెంటేషన్ను అధ్యయనం చేసిన తర్వాత, మేము సంబంధిత జెండాను కనుగొంటాము:
--kubeconfig string
ఫైల్కి మార్గం kubeconfig, ఇది API సర్వర్కి ఎలా కనెక్ట్ చేయాలో నిర్దేశిస్తుంది. లభ్యత --kubeconfig API సర్వర్ మోడ్ని ప్రారంభిస్తుంది, నం --kubeconfig ఆఫ్లైన్ మోడ్ని ప్రారంభిస్తుంది.
ఈ సమయంలో, మనకు తెలియకుండానే, మేము "ఆఫ్లైన్ మోడ్"లో క్యూబ్లెట్ను నడుపుతున్నాము. (మనం పెడాంటిక్గా ఉన్నట్లయితే, స్వతంత్ర కుబెలెట్ని "కనీస ఆచరణీయమైన కుబెర్నెట్స్"గా భావించవచ్చు, కానీ అది చాలా బోరింగ్గా ఉంటుంది). "నిజమైన" కాన్ఫిగరేషన్ పని చేయడానికి, మేము kubeconfig ఫైల్ను kubeletకి పాస్ చేయాలి, తద్వారా API సర్వర్తో ఎలా మాట్లాడాలో దానికి తెలుసు. అదృష్టవశాత్తూ ఇది చాలా సులభం (మాకు ఎటువంటి ప్రమాణీకరణ లేదా సర్టిఫికేట్ సమస్యలు లేవు కాబట్టి):
(మార్గం ద్వారా, మీరు kubelet రన్ చేయనప్పుడు కర్ల్ ద్వారా APIని యాక్సెస్ చేయడానికి ప్రయత్నిస్తే, అది ఇప్పటికీ నడుస్తున్నట్లు మీరు కనుగొంటారు! Kubelet దాని డాకర్ వంటి పాడ్లకు "తల్లిదండ్రులు" కాదు, ఇది "నియంత్రణ లాంటిది" డెమోన్." కుబెలెట్ ద్వారా నిర్వహించబడే కంటైనర్లు కుబెలెట్ వాటిని ఆపే వరకు నడుస్తూనే ఉంటాయి.)
కొన్ని నిమిషాల్లో kubectl మేము ఆశించిన విధంగా పాడ్లు మరియు నోడ్లను చూపాలి:
$ ./kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default hello-mink8s 0/1 CrashLoopBackOff 261 21h
kube-system etcd-mink8s 1/1 Running 0 21h
kube-system kube-apiserver-mink8s 1/1 Running 0 21h
$ ./kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
mink8s Ready <none> 21h v1.18.5 10.70.10.228 <none> Ubuntu 18.04.4 LTS 4.15.0-109-generic docker://19.3.6
ఈసారి మనల్ని మనం నిజంగా అభినందించుకుందాం (నేను ఇప్పటికే మనల్ని మనం అభినందించుకున్నానని నాకు తెలుసు) - మాకు పూర్తి ఫంక్షనల్ APIతో నడుస్తున్న కనీస కుబెర్నెట్స్ "క్లస్టర్" ఉంది!
కింద లాంచ్ చేస్తున్నాం
ఇప్పుడు API సామర్థ్యం ఏమిటో చూద్దాం. nginx పాడ్తో ప్రారంభిద్దాం:
$ ./kubectl apply -f nginx.yaml
Error from server (Forbidden): error when creating "nginx.yaml": pods "nginx" is
forbidden: error looking up service account default/default: serviceaccount
"default" not found
$ ./kubectl get serviceaccounts
No resources found in default namespace.
మా కుబెర్నెటీస్ వాతావరణం ఎంత అసంపూర్ణంగా ఉందో ఇక్కడ మేము చూస్తాము - సేవల కోసం మాకు ఖాతాలు లేవు. సేవా ఖాతాను మాన్యువల్గా సృష్టించడం ద్వారా మళ్లీ ప్రయత్నిద్దాం మరియు ఏమి జరుగుతుందో చూద్దాం:
$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: default
EOS
serviceaccount/default created
$ ./kubectl apply -f nginx.yaml
Error from server (ServerTimeout): error when creating "nginx.yaml": No API
token found for service account "default", retry after the token is
automatically created and added to the service account
మేము సేవా ఖాతాను మాన్యువల్గా సృష్టించినప్పటికీ, ప్రమాణీకరణ టోకెన్ రూపొందించబడలేదు. మేము మా మినిమలిస్టిక్ "క్లస్టర్"తో ప్రయోగాన్ని కొనసాగిస్తున్నందున, సాధారణంగా స్వయంచాలకంగా జరిగే చాలా ఉపయోగకరమైన విషయాలు మిస్ అవుతున్నాయని మేము కనుగొంటాము. కుబెర్నెటెస్ API సర్వర్ చాలా మినిమలిస్టిక్గా ఉంది, చాలా వరకు హెవీ లిఫ్టింగ్ మరియు ఆటోమేటిక్ కాన్ఫిగరేషన్ వివిధ కంట్రోలర్లు మరియు బ్యాక్గ్రౌండ్ జాబ్లలో జరుగుతాయి.
ఎంపికను సెట్ చేయడం ద్వారా మేము ఈ సమస్యను పరిష్కరించగలము automountServiceAccountToken సేవా ఖాతా కోసం (మేము దీన్ని ఏమైనప్పటికీ ఉపయోగించాల్సిన అవసరం లేదు కాబట్టి):
$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: default
automountServiceAccountToken: false
EOS
serviceaccount/default configured
$ ./kubectl apply -f nginx.yaml
pod/nginx created
$ ./kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx 0/1 Pending 0 13m
చివరగా, పాడ్ కనిపించింది! కానీ నిజానికి అది ప్రారంభం కాదు ఎందుకంటే మన దగ్గర లేదు ప్లానర్ (షెడ్యూలర్) అనేది కుబెర్నెటెస్ యొక్క మరొక ముఖ్యమైన భాగం. మళ్ళీ, మేము Kubernetes API ఆశ్చర్యకరంగా "మూగ" అని చూస్తాము - మీరు APIలో పాడ్ని సృష్టించినప్పుడు, అది దానిని నమోదు చేస్తుంది, కానీ దాన్ని ఏ నోడ్లో అమలు చేయాలో గుర్తించడానికి ప్రయత్నించదు.
నిజానికి, పాడ్ను అమలు చేయడానికి మీకు షెడ్యూలర్ అవసరం లేదు. మీరు పారామీటర్లోని మానిఫెస్ట్కు మాన్యువల్గా నోడ్ను జోడించవచ్చు nodeName:
(భర్తీ చేయండి mink8s నోడ్ పేరుకు.) తొలగించి, దరఖాస్తు చేసిన తర్వాత, nginx ప్రారంభమైందని మరియు అంతర్గత IP చిరునామాను వింటున్నట్లు మేము చూస్తాము:
$ ./kubectl delete pod nginx
pod "nginx" deleted
$ ./kubectl apply -f nginx.yaml
pod/nginx created
$ ./kubectl get pods -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx 1/1 Running 0 30s 172.17.0.2 mink8s <none> <none>
$ curl -s 172.17.0.2 | head -4
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
పాడ్ల మధ్య నెట్వర్క్ సరిగ్గా పని చేస్తుందని నిర్ధారించుకోవడానికి, మేము మరొక పాడ్ నుండి కర్ల్ని అమలు చేయవచ్చు:
$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: curl
spec:
containers:
- image: curlimages/curl
name: curl
command: ["curl", "172.17.0.2"]
nodeName: mink8s
EOS
pod/curl created
$ ./kubectl logs curl | head -6
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
ఈ వాతావరణాన్ని త్రవ్వడం మరియు ఏది పని చేస్తుంది మరియు ఏది పని చేయదు అని చూడటం చాలా ఆసక్తికరంగా ఉంటుంది. కాన్ఫిగ్మ్యాప్ మరియు సీక్రెట్ ఆశించిన విధంగా పని చేస్తున్నాయని నేను కనుగొన్నాను, కానీ సర్వీస్ మరియు డిప్లాయ్మెంట్ చేయడం లేదు.
విజయం!
ఈ పోస్ట్ చాలా పొడవుగా ఉంది, కాబట్టి నేను విజయాన్ని ప్రకటించబోతున్నాను మరియు ఇది "కుబెర్నెట్స్" అని పిలవబడే ఆచరణీయ కాన్ఫిగరేషన్ అని చెప్పబోతున్నాను. సంగ్రహంగా చెప్పాలంటే: నాలుగు బైనరీలు, ఐదు కమాండ్ లైన్ పారామితులు మరియు "మాత్రమే" YAML యొక్క 45 లైన్లు (కాదు కుబెర్నెట్స్ ప్రమాణాల ప్రకారం) మరియు మాకు చాలా కొన్ని పనులు ఉన్నాయి:
సాధారణ Kubernetes API (కొన్ని హ్యాక్లతో) ఉపయోగించి పాడ్లు నిర్వహించబడతాయి
మీరు పబ్లిక్ కంటైనర్ చిత్రాలను అప్లోడ్ చేయవచ్చు మరియు నిర్వహించవచ్చు
పాడ్లు సజీవంగా ఉంటాయి మరియు స్వయంచాలకంగా పునఃప్రారంభించబడతాయి
ఒకే నోడ్లోని పాడ్ల మధ్య నెట్వర్కింగ్ చాలా బాగా పనిచేస్తుంది
కాన్ఫిగమ్మ్యాప్, సీక్రెట్ మరియు సింపుల్ స్టోరేజ్ మౌంటు పని ఊహించిన విధంగా ఉంటుంది
కానీ కుబెర్నెట్లను నిజంగా ఉపయోగకరంగా చేసేవి చాలా వరకు లేవు, అవి:
పాడ్ షెడ్యూలర్
ప్రమాణీకరణ/ప్రామాణీకరణ
బహుళ నోడ్స్
సేవల నెట్వర్క్
క్లస్టర్డ్ అంతర్గత DNS
సేవా ఖాతాల కోసం కంట్రోలర్లు, విస్తరణలు, క్లౌడ్ ప్రొవైడర్లతో ఏకీకరణ మరియు కుబెర్నెటెస్ తీసుకొచ్చే అనేక ఇతర గూడీస్
కాబట్టి మనం నిజంగా ఏమి పొందాము? Kubernetes API, దాని స్వంతంగా నడుస్తుంది, ఇది నిజంగా ఒక వేదిక మాత్రమే కంటైనర్ ఆటోమేషన్. ఇది పెద్దగా ఏమీ చేయదు - ఇది APIని ఉపయోగించే వివిధ కంట్రోలర్లు మరియు ఆపరేటర్లకు పని - కానీ ఇది ఆటోమేషన్ కోసం స్థిరమైన వాతావరణాన్ని అందిస్తుంది.