मैंने आधिकारिक ट्यूटोरियल के अनुसार सिंगल नोड कुबेरनेट सेट किया है।

आधिकारिक दस्तावेज़ीकरण के अलावा मैंने सिंगल नोड क्लस्टर सेट अप किया है:

kubectl taint nodes --all node-role.kubernetes.io/master-

विकलांग बेदखली की सीमा:

cat << EOF >> /var/lib/kubelet/config.yaml
evictionHard:
  imagefs.available: 1%
  memory.available: 100Mi
  nodefs.available: 1%
  nodefs.inodesFree: 1%
EOF

systemctl daemon-reload
systemctl restart kubelet

और डॉकर के लिए सिस्टमड ड्राइवर सेट करें:

cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

systemctl daemon-reload
systemctl restart docker

मैंने निम्नलिखित कोशिश की है:

docker build -t localhost:5000/my-image .
kubectl run -it --rm --restart=Always --image=localhost:5000/my-image my-image

लेकिन पॉड लॉग में मुझे ImagePullBackOff दिखाई देता है। अगर मैं स्थानीय भंडार स्थापित करता हूं और छवि बनाने के बाद मैं docker push localhost:5000/my-image करता हूं, तो सब कुछ काम कर रहा है।

क्या स्थानीय छवियों का उपयोग करना संभव है (जो docker images जारी करने के बाद पहले से ही उपलब्ध हैं) स्थानीय भंडार स्थापित करने की आवश्यकता के बिना, इस भंडार को धक्का देकर और फिर इससे खींचकर?

5
Wakan Tanka 14 फरवरी 2020, 17:53
पहली पंक्ति में आपने जो लिंक दिया है, वह kubectl सेट करने के बारे में है, न कि सिंगल-नोड क्लस्टर। कृपया अपडेट करें, क्योंकि अब आपके सेटअप को समझना असंभव है और इस प्रकार नोड की आपकी स्थानीय डॉकटर रजिस्ट्री तक पहुंच होगी या नहीं।
 – 
morgwai
14 फरवरी 2020, 23:56

2 जवाब

आपको बस imagePullPolicy को अपने Pod टेम्प्लेट में container विनिर्देशन में Never पर सेट करने की आवश्यकता है। अन्यथा क्यूबलेट छवि को खींचने का प्रयास करेगा। उदाहरण Pod परिभाषा इस तरह दिख सकती है:

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
    - name: uses-local-image
      image: local-image-name
      imagePullPolicy: Never

इसके बारे में अधिक जानकारी आपको यहां मिल सकती है।

डिफ़ॉल्ट रूप से, क्यूबलेट प्रत्येक छवि को निर्दिष्ट से खींचने का प्रयास करेगा रजिस्ट्री। हालांकि, अगर imagePullPolicy की संपत्ति कंटेनर को IfNotPresent या Never पर सेट किया जाता है, फिर एक स्थानीय छवि का उपयोग किया जाता है (क्रमशः या विशेष रूप से, क्रमशः)।

यदि आप रजिस्ट्री प्रमाणीकरण के विकल्प के रूप में पहले से खींची गई छवियों पर भरोसा करना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि क्लस्टर के सभी नोड्स में समान पूर्व-खींची गई छवियां हों।

इसका उपयोग गति के लिए कुछ छवियों को प्रीलोड करने के लिए या किसी निजी रजिस्ट्री को प्रमाणित करने के विकल्प के रूप में किया जा सकता है।

सभी पॉड्स के पास पहले से खींची गई किसी भी इमेज को पढ़ने का एक्सेस होगा।

6
mario 14 फरवरी 2020, 20:08

मारियो का जवाब सही है। हालांकि कमांड के साथ पूरा होगा। तो, आप अपनी तैनाती इस प्रकार बनाना चाहते हैं:

kubectl run -it --rm --restart Always DEPLOYMENT_NAME --image my-image --image-pull-policy IfNotPresent COMMAND

नोट: यदि आपके पास एक से अधिक नोड होंगे, तो आपको उन सभी पर यह सुनिश्चित करना होगा कि आपके पास उस नाम की एक छवि है, क्योंकि रेपो मौजूद नहीं है, और यह विफल हो जाएगा।

3
tgogos 26 अगस्त 2020, 13:07
1
आपके सुझाव के लिए धन्यवाद @suren, मैंने घोषणात्मक दृष्टिकोण का उपयोग करके उदाहरण Pod परिभाषा जोड़कर अपना उत्तर संपादित किया। इसे आसानी से Doployment पर भी लागू किया जा सकता है। बेशक यह आपके उदाहरण के अनुसार अनिवार्य आदेश के साथ किया जा सकता है। केवल यह ध्यान रखें कि वर्तमान में वे पदावनत हैं: kubectl run --generator=deployment/apps.v1beta1 is DEPRECATED and will be removed in a future version. Use kubectl create instead.
 – 
mario
14 फरवरी 2020, 20:18