د کانټینر چلولو وخت یو برنامه ده چې د کانټینرونو چلولو لپاره ډیزاین شوې.
ډیر معلوماتي. مګر که تاسو د ډاکر سره آشنا یاست ، نو تاسو باید عمومي نظر ولرئ چې دا څه کوي. (د کانټینر رن ټایم او کبلیټ ترمینځ د مسؤلیتونو جلا کولو توضیحات واقعیا خورا فرعي دي او زه به یې دلته نه ځم.)
И د API سرور?
د API سرور د Kubernetes کنټرول پینل برخه ده چې د Kubernetes API افشا کوي. د API سرور د Kubernetes کنټرول پینل د پیرودونکي اړخ دی
هر هغه څوک چې کله هم د کبرنیټس سره څه کړي وي باید د API سره مستقیم یا د kubectl له لارې اړیکه ونیسي. دا د هغه څه زړه دی چې Kubernetes Kubernetes جوړوي - دماغ چې د YAML غرونه بدلوي موږ ټول پوهیږو او مینه لرو (؟) کاري زیربنا ته. داسې ښکاري چې API باید زموږ په لږترلږه ترتیب کې شتون ولري.
هغه ډایرکټر ته لاره چې د جامد پوډونو لپاره فایلونه لري، یا هغه فایل ته لاره چې د جامد پوډونو تشریح کوي. د نقطو سره پیل شوي فایلونه له پامه غورځول شوي. (منحرف شوی: دا اختیار باید د --config اختیار له لارې کوبیلټ ته لیږدول شوي ترتیب شوي فایل کې تنظیم شي. د نورو معلوماتو لپاره، وګورئ kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file .)
دا اختیار موږ ته د چلولو اجازه راکوي جامد پوزې - پوډونه چې د Kubernetes API له لارې نه اداره کیږي. جامد پوډونه په ندرت سره کارول کیږي ، مګر دا د ګړندي کلستر لوړولو لپاره خورا اسانه دي ، او دا هغه څه دي چې موږ ورته اړتیا لرو. موږ به دا لوی خبرداری له پامه غورځوو (بیا ، دا په تولید کې مه چلوئ!) او وګورو چې ایا موږ پوډ چلولی شو.
لومړی به موږ د جامد پوډونو او چلولو لپاره لارښود جوړ کړو kubelet:
(بیا بیا، دا په تولید کې مه چلوئ! زه یو څه حیران وم چې د ډیفالټ ترتیب خورا ناامنه دی. مګر زه اټکل کوم چې دا د پراختیا او ازموینې اسانه کول دي.)
او، په زړه پورې حیرانتیا، 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 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.
دلته موږ ګورو چې زموږ د Kubernetes چاپیریال څومره بدبختانه نیمګړی دی - موږ د خدماتو لپاره هیڅ حساب نه لرو. راځئ چې په لاسي ډول د خدماتو حساب رامینځته کولو سره بیا هڅه وکړو او وګورو چې څه پیښیږي:
$ 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 کې پوډ رامینځته کوئ ، نو دا یې راجستر کوي ، مګر هڅه نه کوي چې معلومه کړي چې کوم نوډ یې پرمخ وړي.
(بدلون mink8s د نوډ نوم ته.) د حذف او پلي کولو وروسته، موږ ګورو چې نګینکس پیل شوی او داخلي 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>
د دې لپاره چې ډاډ ترلاسه کړئ چې د پوډونو تر مینځ شبکه په سمه توګه کار کوي، موږ کولی شو د بل پوډ څخه curl چلوو:
$ 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>
دا خورا په زړه پوري ده چې پدې چاپیریال کې کیندل او وګورئ چې څه کار کوي او څه نه کوي. ما وموندله چې ConfigMap او پټ کار لکه څنګه چې تمه کیږي، مګر خدمت او ګمارل ندي.
بریا!
دا پوسټ اوږدیږي ، نو زه به د بریا اعلان وکړم او ووایم چې دا یو مناسب ترتیب دی چې "کوبرنیټس" بلل کیدی شي. دا د معیارونو له مخې د Kubernetes) او موږ یو څه شیان لرو چې کار کوي: