This is the multi-page printable view of this section.
Click here to print.
Return to the regular view of this page.
कार्य
कुबेरनेट्स प्रलेखन के इस खंड के पृष्ठ एकल कार्य करने का तरीका दिखाते हैं। आमतौर पर, कार्य पृष्ठ दिखाता है कि किसी एक काम को कई छोटे चरणों में विभाजित करके कैसे करना है।
यदि आप एक कार्य पृष्ठ लिखना चाहते हैं, तो देखें
प्रलेखन के लिए एक पुल अनुरोध (Pull Request) बनाएं.
1 - उपकरण स्थापित करें
अपने कंप्यूटर पर कुबेरनेट्स टूल सेटअप करें।
kubectl
कुबेरनेट्स कमांड-लाइन टूल, kubectl,
आपको कुबेरनेट्स क्लस्टर पर कमांड चलाने की अनुमति देता है।
आप एप्लिकेशन को डिप्लॉय करने, क्लस्टर संसाधनों का निरीक्षण
और प्रबंधन करने और लॉग देखने के लिए kubectl का उपयोग कर सकते हैं।
kubectl संचालन की पूरी सूची सहित अधिक जानकारी के लिए, देखें
kubectl
संदर्भ प्रलेखन.
kubectl विभिन्न प्रकार के Linux प्लेटफॉर्म, macOS और Windows पर इंस्टॉल करने योग्य है।
नीचे अपना उपयुक्त ऑपरेटिंग सिस्टम खोजें।
kind
kind
आपको अपने कंप्यूटर पर कुबेरनेट्स चलाने देता है।
इस उपकरण के लिए आवश्यक है कि आपके पास
Docker इंस्टॉल और कॉन्फ़िगर किया गया हो।
kind क्विक स्टार्ट
पृष्ठ आपको दिखाता है कि kind चलाने के लिए आपको क्या करने की आवश्यकता है।
kind क्विक स्टार्ट गाइड देखें
minikube
kind
की तरह, minikube
एक उपकरण
है जो आपको स्थानीय स्तर पर कुबेरनेट्स चलाने देता है। minikube आपके कंप्यूटर
(windows, macOS और linux पीसी सहित) पर सिंगल-नोड कुबेरनेट्स क्लस्टर चलाता
है ताकि आप कुबेरनेट्स सीख सकें या डेवलपमेंट कर सकें।
यदि आपका ध्यान उपकरण को इंस्टॉल करने पर है तो आप मुख्य
आरंभ करें!
गाइड का अनुसरण कर सकते हैं।
minikube क्विक स्टार्ट गाइड देखें
एक बार जब आपके पास minikube काम कर रहा हो,
तो आप इसका उपयोग नमूना एप्लिकेशन
चलाने के लिए कर सकते हैं।
kubeadm
कुबेरनेट्स क्लस्टर बनाने और प्रबंधित करने के लिए आप kubeadm टूल का उपयोग कर सकते हैं।
यह उपयोगकर्ता के अनुकूल तरीके से न्यूनतम व्यवहार्य, सुरक्षित क्लस्टर बनाने और चलाने के लिए आवश्यक कार्य करता है।
kubeadm इंस्टॉल करना आपको दिखाता है कि kubeadm को कैसे इंस्टॉल किया जाए।
एक बार इंस्टॉल होने के बाद, आप इसका उपयोग क्लस्टर बनाने के लिए कर सकते हैं।
kubeadm इंस्टॉल गाइड देखें
1.1 - Linux पर kubectl इंस्टॉल और सेट अप करें
शुरू करने से पहले
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण के भीतर हो। उदाहरण के लिए, v1.33 क्लाइंट v1.32, v1.33 और v1.34 कण्ट्रोल प्लेन के साथ संवाद कर सकते हैं।
kubectl के नवीनतम संस्करण का उपयोग करने से अप्रत्याशित मुद्दों से बचने में मदद मिलती है।
Linux पर kubectl इंस्टॉल करें
Linux पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
Linux पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
-
कमांड से नवीनतम रिलीज डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
टिप्पणी:
एक विशिष्ट संस्करण डाउनलोड करने के लिए, कमांड के $(curl -L -s https://dl.k8s.io/release/stable.txt)
हिस्से को विशिष्ट संस्करण से बदलें।
उदाहरण के लिए, लिनक्स पर 1.33.0 संस्करण डाउनलोड करने के लिए, टाइप करें:
curl -LO https://dl.k8s.io/release/v1.33.0/bin/linux/amd64/kubectl
-
बाइनरी को मान्य करें (वैकल्पिक)
kubectl चेकसम फाइल डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
चेकसम फ़ाइल से kubectl बाइनरी को मान्य करें:
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
यदि मान्य है, तो आउटपुट है:
अगर चेक फेल हो जाता है, तो sha256
nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है:
kubectl: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
टिप्पणी:
बाइनरी और चेकसम का एक ही संस्करण डाउनलोड करें।
-
kubectl इंस्टॉल करें
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
टिप्पणी:
यदि आपके पास टारगेट सिस्टम पर रुट एक्सेस नहीं है, आप तब भी kubectl को ~/.local/bin
डायरेक्टरी में इंस्टॉल कर सकते हैं:
chmod +x kubectl
mkdir -p ~/.local/bin/kubectl
mv ./kubectl ~/.local/bin/kubectl
# and then add ~/.local/bin/kubectl to $PATH
-
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
नेटिव पैकेज मैनेजमेंट के माध्यम से इंस्टॉल करें
-
apt
पैकेज इंडेक्स को अपडेट करे और कुबेरनेट्स apt
रिपॉजिटरी का उपयोग करने के लिए आवश्यक पैकेज इंस्टॉल करें:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
-
गूगल क्लाउड पब्लिक साइनिंग कुंजी (key) डाउनलोड करें:
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
-
कुबेरनेट्स apt
रिपॉजिटरी को जोड़े:
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
-
नए रिपॉजिटरी के साथ apt
पैकेज इंडेक्स अपडेट करें और kubectl इंस्टॉल करें:
sudo apt-get update
sudo apt-get install -y kubectl
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum install -y kubectl
अन्य पैकेज मैनेजमेंट के माध्यम से इंस्टॉल करें
यदि आप Ubuntu या किसी अन्य Linux डिस्ट्रीब्यूशन पर हैं जो snap पैकेज मैनेजर को सपोर्ट करता है, तो kubectl snap एप्लिकेशन के रूप में उपलब्ध है।
snap install kubectl --classic
kubectl version --client
यदि आप Linux पर Homebrew पैकेज मैनेजर का उपयोग कर रहे हैं, तो kubectl इंस्टालेशन के लिए उपलब्ध है।
brew install kubectl
kubectl version --client
kubectl कॉन्फ़िगरेशन सत्यापित करें
kubectl को कुबेरनेट्स क्लस्टर को खोजने और एक्सेस करने के लिए, उसे
क्यूबकॉन्फिग फाइल(kubeconfig) की आवश्यकता होती है,
जो स्वचालित रूप से तब बनता है जब आप
kube-up.sh का उपयोग करके क्लस्टर बनाते हैं
या मिनीक्यूब क्लस्टर को सफलतापूर्वक डिप्लॉय करते हैं।
डिफ़ॉल्ट रूप से, kubectl कॉन्फ़िगरेशन ~/.kube/config
पर स्थित होता है।
जाँच करें कि क्लस्टर स्टेट प्राप्त करके kubectl को ठीक से कॉन्फ़िगर किया गया है:
यदि आपको एक URL प्रतिक्रिया दिखती हैं, तो kubectl आपके क्लस्टर तक पहुँचने के लिए सही ढंग से कॉन्फ़िगर हुआ है।
यदि आपको निम्नलिखित संदेश दिखाई देता है, तो kubectl ठीक से कॉन्फ़िगर नहीं हुआ है या कुबेरनेट्स क्लस्टर से कनेक्ट करने में सक्षम नहीं है।
The connection to the server <server-name:port> was refused - did you specify the right host or port?
उदाहरण के लिए, यदि आप अपने लैपटॉप (स्थानीय रूप से) पर कुबेरनेट्स क्लस्टर चलाना चाहते हैं, तो आपको पहले मिनीक्यूब (minikube) जैसे टूल को इंस्टॉल करना होगा और ऊपर बताए गए कमांड को फिर से चलाना होगा।
यदि kubectl cluster-info
URL प्रतिक्रिया देता है, लेकिन आप अपने क्लस्टर को एक्सेस नहीं कर पा रहें हैं, तो यह जाँचने के लिए कि क्या यह ठीक से कॉन्फ़िगर किया गया है, इस कमांड का उपयोग करें:
kubectl cluster-info dump
वैकल्पिक kubectl कॉन्फ़िगरेशन और प्लगइन्स
शेल ऑटोकम्प्लेशन सक्षम करें
kubectl Bash और Zsh के लिए ऑटोकम्प्लेशन का सपोर्ट प्रदान करता है, जो आपका काफी समय बचा सकता है।
नीचे Bash और Zsh के लिए ऑटोकम्प्लेशन स्थापित करने की प्रक्रियाएँ हैं।
परिचय
Bash के लिए kubectl समापन स्क्रिप्ट kubectl completion bash
कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में समापन स्क्रिप्ट को सोर्स करने से kubectl ऑटोकम्पलीशन सक्षम हो जाती है।
हालाँकि, समापन की स्क्रिप्ट bash-completion पर निर्भर हैं जिसका अर्थ है कि आपको पहले इस सॉफ़्टवेयर को इंस्टॉल करना होगा (आप type _init_completion
चलाकर परीक्षण कर सकते हैं कि आपने पहले से bash-completion इंस्टॉल की है या नहीं)।
Bash-completion को इंस्टॉल करें
कई पैकेज मैनेजर द्वारा bash-completion प्रदान की जाती है (यहाँ देखें)। आप इसे apt-get install bash-completion
या yum install bash-completion
आदि के साथ इंस्टॉल कर सकते हैं।
यह कमांड /usr/share/bash-completion/bash_completion
उत्त्पन्न करता है, जो bash-completion की मुख्य स्क्रिप्ट है। आपके पैकेज मैनेजर के आधार पर, आपको इस फाइल को अपनी ~/.bashrc
फाइल में मैन्युअल रूप से सोर्स करना होगा।
यह पता लगाने के लिए, अपना शेल पुनः लोड करें और type _init_completion
रन करे। यदि कमांड सफल होता है, तो आप पहले से ही तैयार हैं, अन्यथा अपनी ~/.bashrc
फ़ाइल में निम्नलिखित जोड़ें:
source /usr/share/bash-completion/bash_completion
अपना शेल पुनः लोड करें और type _init_completion
टाइप करके सत्यापित करें कि बैश-कम्पलीशन सही ढंग से इंस्टॉल है।
kubectl ऑटोकम्पलीशन सक्षम करे
अब आपको यह सुनिश्चित करने की आवश्यकता है कि kubectl समापन स्क्रिप्ट आपके सभी शेल सत्रों (sourced) में प्राप्त हो जाए। आप ऐसा दो तरीकों से कर सकते हैं:
यदि आप के पास kubectl के लिए एक अन्य नाम (alias) है, तो आप उस अन्य नाम के साथ काम करने के लिए शेल समापन को बढ़ा सकते हैं:
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -F __start_kubectl k' >>~/.bashrc
टिप्पणी:
bash-completion सभी समापन स्क्रिप्ट को /etc/bash_completion.d
में सोर्स करता है।
दोनों दृष्टिकोण बराबर हैं। आपके शेल को पुनः लोड करने के बाद, Kubectl ऑटोकम्पलीशन कार्य करना शुरू कर देगा।
Zsh के लिए kubectl कम्पलीशन स्क्रिप्ट kubectl completion zsh
कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में कम्पलीशन स्क्रिप्ट को सोर्स करने से kubectl ऑटो-कम्पलीशन सक्षम हो जाती है।
अपने सभी शेल सत्रों में ऐसा करने के लिए, निम्नलिखित को अपनी ~/.zshrc
फ़ाइल में जोड़ें:
source <(kubectl completion zsh)
यदि आपके पास kubectl के लिए एक उपनाम है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo 'alias k=kubectl' >>~/.zshrc
echo 'complete -F __start_kubectl k' >>~/.zshrc
अपने शेल को पुनः लोड करने के बाद, kubectl ऑटो-कम्पलीशन कार्य करना चाहिए।
यदि आपको कोई त्रुटि मिलती है जैसे complete:13: command not found: compdef
, तो अपनी ~/.zshrc
फ़ाइल की शुरुआत में निम्नलिखित जोड़ें:
autoload -Uz compinit
compinit
kubectl convert
प्लगइन इंस्टॉल करें
कुबेरनेट्स कमांड-लाइन टूल kubectl
के लिए एक प्लगइन, जो आपको विभिन्न API संस्करण के बीच मैनिफ़ेस्ट को बदलने करने की अनुमति देता है।
यह विशेष रूप से नए कुबेरनेट्स रिलीज के साथ एक गैर-बहिष्कृत API संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
-
कमांड से नवीनतम रिलीज डाउनलोड करें:
curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert
-
बाइनरी को मान्य करें (वैकल्पिक)
kubectl-convert चेकसम फ़ाइल डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert.sha256"
चेकसम फ़ाइल से kubectl-convert बाइनरी को मान्य करें:
echo "$(<kubectl-convert.sha256) kubectl-convert" | sha256sum --check
यदि मान्य है, तो आउटपुट है:
अगर चेक फेल हो जाता है, तो sha256
nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है:
kubectl-convert: FAILED
sha256sum: WARNING: 1 computed checksum did NOT match
टिप्पणी:
बाइनरी और चेकसम का एक ही संस्करण डाउनलोड करें।
-
kubectl-convert इंस्टॉल करें
sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert
-
सत्यापित करें कि प्लगइन सफलतापूर्वक इंस्टॉल है
यदि आपको कोई त्रुटि नहीं दिखाई देती है, तो इसका मतलब है कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है।
आगे क्या है
1.2 - macOS पर kubectl इंस्टॉल और सेटअप करें
शुरू करने से पहले
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण भीतर हो। उदाहरण के लिए, v1.33 क्लाइंट v1.32, v1.33 और v1.34 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं।
kubectl के नए संस्करण का उपयोग करने से समस्या से बचत हो सकती है।
macOS पर kubectl इंस्टॉल करें
macOS पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
macOS पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
-
नवीनतम रिलीज़ डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
टिप्पणी:
एक विशिष्ट संस्करण डाउनलोड करने के लिए, कमांड के इस हिस्से $(curl -L -s https://dl.k8s.io/release/stable.txt)
को विशिष्ट संस्करण से बदलें।
उदाहरण के लिए, Intel macOS पर 1.33.0 संस्करण डाउनलोड करने के लिए, टाइप करें:
curl -LO "https://dl.k8s.io/release/v1.33.0/bin/darwin/amd64/kubectl"
और Apple Silicon macOS के लिए, टाइप करें:
curl -LO "https://dl.k8s.io/release/v1.33.0/bin/darwin/arm64/kubectl"
-
बाइनरी को मान्य करें (वैकल्पिक))
kubectl चेकसम फाइल डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl.sha256"
चेकसम फ़ाइल से kubectl बाइनरी को मान्य करें:
echo "$(<kubectl.sha256) kubectl" | shasum -a 256 --check
यदि मान्य है, तो आउटपुट है:
अगर चेक फेल हो जाता है, तो shasum
nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है:
kubectl: FAILED
shasum: WARNING: 1 computed checksum did NOT match
टिप्पणी:
बाइनरी और चेकसम का एक ही संस्करण डाउनलोड करें।
-
kubectl बाइनरी को एक्सेक्यूट करने योग्य बनायें।
-
kubectl बाइनरी को अपने सिस्टम PATH
के फ़ाइल स्थान पर ले जाएँ।
sudo mv ./kubectl /usr/local/bin/kubectl
sudo chown root: /usr/local/bin/kubectl
टिप्पणी:
सुनिश्चित करें कि /usr/local/bin
आपके पाथ एनवायरनमेंट वेरिएबल में है।
-
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
Homebrew के माध्यम से macOS पर इंस्टॉल करें
यदि आप macOS पर हैं और Homebrew पैकेज मैनेजर का उपयोग कर रहे हैं, आप Homebrew के साथ kubectl इंस्टॉल कर सकते हैं।
-
इंस्टालेशन कमांड रन करें:
या
brew install kubernetes-cli
-
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
Macports के माध्यम से macOS पर इंस्टॉल करें
यदि आप macOS पर हैं और Macports पैकेज मैनेजर का उपयोग कर रहे हैं, आप Macports के साथ kubectl इंस्टॉल कर सकते हैं।
-
इंस्टालेशन कमांड रन करें:
sudo port selfupdate
sudo port install kubectl
-
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
kubectl कॉन्फ़िगरेशन सत्यापित करें
kubectl को कुबेरनेट्स क्लस्टर को खोजने और एक्सेस करने के लिए, उसे
क्यूबकॉन्फिग फाइल(kubeconfig) की आवश्यकता होती है,
जो स्वचालित रूप से तब बनता है जब आप
kube-up.sh का उपयोग करके क्लस्टर बनाते हैं
या मिनीक्यूब क्लस्टर को सफलतापूर्वक डिप्लॉय करते हैं।
डिफ़ॉल्ट रूप से, kubectl कॉन्फ़िगरेशन ~/.kube/config
पर स्थित होता है।
जाँच करें कि क्लस्टर स्टेट प्राप्त करके kubectl को ठीक से कॉन्फ़िगर किया गया है:
यदि आपको एक URL प्रतिक्रिया दिखती हैं, तो kubectl आपके क्लस्टर तक पहुँचने के लिए सही ढंग से कॉन्फ़िगर हुआ है।
यदि आपको निम्नलिखित संदेश दिखाई देता है, तो kubectl ठीक से कॉन्फ़िगर नहीं हुआ है या कुबेरनेट्स क्लस्टर से कनेक्ट करने में सक्षम नहीं है।
The connection to the server <server-name:port> was refused - did you specify the right host or port?
उदाहरण के लिए, यदि आप अपने लैपटॉप (स्थानीय रूप से) पर कुबेरनेट्स क्लस्टर चलाना चाहते हैं, तो आपको पहले मिनीक्यूब (minikube) जैसे टूल को इंस्टॉल करना होगा और ऊपर बताए गए कमांड को फिर से चलाना होगा।
यदि kubectl cluster-info
URL प्रतिक्रिया देता है, लेकिन आप अपने क्लस्टर को एक्सेस नहीं कर पा रहें हैं, तो यह जाँचने के लिए कि क्या यह ठीक से कॉन्फ़िगर किया गया है, इस कमांड का उपयोग करें:
kubectl cluster-info dump
वैकल्पिक Kubectl कॉन्फ़िगरेशन और प्लगइन्स
शेल ऑटोकम्प्लेशन सक्षम करें
kubectl Bash और Zsh के लिए ऑटोकम्प्लेशन का सपोर्ट प्रदान करता है, जो आपका काफी समय बचा सकता है।
नीचे Bash और Zsh के लिए ऑटोकम्प्लेशन स्थापित करने की प्रक्रियाएँ हैं।
परिचय
Bash के लिए kubectl समापन स्क्रिप्ट kubectl completion bash
कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में समापन स्क्रिप्ट को सोर्स करने से kubectl ऑटोकम्पलीशन सक्षम हो जाती है।```
हालाँकि, समापन की स्क्रिप्ट bash-completion पर निर्भर हैं जिसका अर्थ है कि आपको पहले इस सॉफ़्टवेयर को इंस्टॉल करना होगा।
चेतावनी:
Bash-completion के लिये दो संस्करण हैं v1 और v2। v1 bash 3.2 के लिये हैं (जो macOS के लिए डिफ़ॉल्ट है), और v2 bash 4.1+ के लिए है।kubectl कम्पलीशन स्क्रिप्ट Bash-completion v1 और Bash 3.2 के साथ ठीक से
काम नहीं करती है। इसके लिए
Bash-completion v2 और बैश 4.1+ की आवश्यकता है। इसलिए macOS पर kubectl कम्पलीशन को सही तरीके से इस्तेमाल करने के लिए , आपको bash 4.1+ इनस्टॉल और उपयोग करना होगा (
निर्देश)। निम्नलिखित निर्देश मानते हैं कि आप बैश का उपयोग करते हैं (अर्थात 4.1 का कोई भी बैश संस्करण या इससे नया)।
अपग्रेड बैश
निम्नलिखित निर्देश मानते हैं कि आप बैश 4.1+ का उपयोग करते हैं। आप अपने बैश के संस्करण को यह चलाकर देख सकते हैं:
यदि यह बहुत पुराना है, तो आप Homebrew का उपयोग करके इसे इनस्टॉल/अपग्रेड कर सकते हैं:
अपने शेल को पुनः लोड करें और सत्यापित करें कि इच्छित संस्करण का उपयोग किया जा रहा है:
echo $BASH_VERSION $SHELL
Homebrew आमतौर पर इसे /usr/local/bin/bash
पर इनस्टॉल करता है।
इनस्टॉल bash-completion
टिप्पणी:
जैसा कि उल्लेख किया गया है, ये निर्देश मानते हैं कि आप Bash 4.1+ का उपयोग करते हैं, जिसका अर्थ है कि आप bash-completion v2 इनस्टॉल करेंगे (Bash 3.2 और bash-completion v1 पर kubectl पूर्णता काम नहीं करेगी)।
आप type_init_completion
से सत्यापित कर सकते हैं कि क्या आपके पास bash-completion v2 पहले से इनस्टॉल है। यदि नहीं, तो आप इसे Homebrew से इनस्टॉल कर सकते हैं
brew install bash-completion@2
जैसा कि इस कमांड के आउटपुट में बताया गया है, अपनी ~/.bash_profile
फ़ाइल में निम्नलिखित जोड़ें:
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
अपने शेल को पुनः लोड करें और type_init_completion
से सत्यापित करें कि bash-completion v2 सही ढंग से इनस्टॉल है।
kubectl ऑटोकम्पलीशन सक्षम करें
अब आपको यह सुनिश्चित करने की आवश्यकता है कि kubectl समापन स्क्रिप्ट आपके सभी शेल सत्रों (sourced) में प्राप्त हो जाए। इसे हासिल करने के कई तरीके हैं:
-
अपने कम्पलीशन स्क्रिप्ट को ~/.bash_profile
में सोर्स करें:
echo 'source <(kubectl completion bash)' >>~/.bash_profile
-
कम्पलीशन स्क्रिप्ट को /usr/local/etc/bash_completion.d
डायरेक्टरी में जोड़ें:
kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl
-
यदि आपके पास kubectl के लिए एक नाम (alias) है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo 'alias k=kubectl' >>~/.bash_profile
echo 'complete -F __start_kubectl k' >>~/.bash_profile
-
यदि आपने Homebrew के साथ kubectl इनस्टॉल किया है (जैसा कि यहां बताया गया है), तो kubectl कम्पलीशन स्क्रिप्ट पहले से ही /usr/local/etc/bash_completion.d/kubectl
में होनी चाहिए। ऐसे में आपको कुछ भी करने की जरूरत नहीं है।
टिप्पणी:
bash-completion Homebrew से इनस्टॉल होने पर, सारे फाइल्स को BASH_COMPLETION_COMPAT_DIR
डायरेक्टरी में सोर्स कर देता है। इसलिए आखरी दो तरीके काम करते हैं।
किसी भी स्थिति में, आपके शेल को पुनः लोड करने के बाद, Kubectl पूर्णता कार्य करना चाहिए।
Zsh के लिए kubectl कम्पलीशन स्क्रिप्ट kubectl completion zsh
कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में कम्पलीशन स्क्रिप्ट को सोर्स करने से kubectl ऑटो-कम्पलीशन सक्षम हो जाती है।
अपने सभी शेल सत्रों में ऐसा करने के लिए, निम्नलिखित को अपनी ~/.zshrc
फ़ाइल में जोड़ें:
source <(kubectl completion zsh)
यदि आपके पास kubectl के लिए एक उपनाम है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo 'alias k=kubectl' >>~/.zshrc
echo 'complete -F __start_kubectl k' >>~/.zshrc
अपने शेल को पुनः लोड करने के बाद, kubectl ऑटो-कम्पलीशन कार्य करना चाहिए।
यदि आपको कोई त्रुटि मिलती है जैसे complete:13: command not found: compdef
, तो अपनी ~/.zshrc
फ़ाइल की शुरुआत में निम्नलिखित जोड़ें:
autoload -Uz compinit
compinit
kubectl convert
प्लगइन इंस्टॉल करें
कुबेरनेट्स कमांड-लाइन टूल kubectl
के लिए एक प्लगइन, जो आपको विभिन्न API संस्करण के बीच मैनिफ़ेस्ट को बदलने करने की अनुमति देता है।
यह विशेष रूप से नए कुबेरनेट्स रिलीज के साथ एक गैर-बहिष्कृत API संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
-
इस कमांड से नवीनतम रिलीज डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl-convert"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl-convert"
-
बाइनरी को मान्य करें (वैकल्पिक)
kubectl-convert चेकसम फ़ाइल डाउनलोड करें:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl-convert.sha256"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl-convert.sha256"
चेकसम फ़ाइल से kubectl-convert बाइनरी को मान्य करें:
echo "$(<kubectl-convert.sha256) kubectl-convert" | shasum -a 256 --check
यदि मान्य है, तो आउटपुट है:
अगर चेक फेल हो जाता है, तो sha256
nonzero स्थिति के साथ बाहर निकलता है और इस आउटपुट के समान प्रिंट करता है:
kubectl-convert: FAILED
shasum: WARNING: 1 computed checksum did NOT match
टिप्पणी:
बाइनरी और चेकसम का एक ही संस्करण डाउनलोड करें।
-
Kubectl-कन्वर्ट बाइनरी को एक्सेक्यूट करने योग्य बनाएं
chmod +x ./kubectl-convert
-
kubectl-convert binary बाइनरी को अपने सिस्टम PATH
के फ़ाइल स्थान पर ले जाएँ।
sudo mv ./kubectl-convert /usr/local/bin/kubectl-convert
sudo chown root: /usr/local/bin/kubectl-convert
टिप्पणी:
सुनिश्चित करें कि /usr/local/bin
आपके पाथ एनवायरनमेंट वेरिएबल में है।
-
सत्यापित करें कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है
यदि आपको कोई त्रुटि नहीं दिखाई देती है, तो इसका मतलब है कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है।
आगे क्या है
1.3 - Windows पर kubectl इंस्टॉल और सेटअप करें
शुरू करने से पहले
आप kubectl संस्करण का उपयोग करे जो आपके क्लस्टर के एक माइनर संस्करण भीतर हो। उदाहरण के लिए, v1.33 क्लाइंट v1.32, v1.33 और v1.34 कण्ट्रोल प्लेन के साथ कम्युनिकेट कर सकते हैं।
kubectl के नए संस्करण का उपयोग करने से समस्या से बचत हो सकती है।
Windows पर kubectl इंस्टॉल करें
Windows पर kubectl संस्थापित करने के लिए निम्नलिखित विधियाँ मौजूद हैं:
Windows पर curl के माध्यम से kubectl बाइनरी इंस्टॉल करें
-
latest release 1.33.0 डाउनलोड करें।
या यदि आपके पास curl
है, तो इस कमांड का उपयोग करें:
curl -LO https://dl.k8s.io/release/v1.33.0/bin/windows/amd64/kubectl.exe
-
बाइनरी को मान्य करें (वैकल्पिक)
kubectl चेकसम फाइल डाउनलोड करें:
curl -LO https://dl.k8s.io/v1.33.0/bin/windows/amd64/kubectl.exe.sha256
चेकसम फ़ाइल से kubectl बाइनरी को मान्य करें:
-
मैन्युअल रूप से कमांड प्रॉम्प्ट का उपयोग करके CertUtil
के आउटपुट की तुलना डाउनलोडेड चेकसम फ़ाइल से करें:
CertUtil -hashfile kubectl.exe SHA256
type kubectl.exe.sha256
-
True
या False
परिणाम प्राप्त करने के लिए -eq
ऑपरेटर का उपयोग करके सत्यापन को ऑटोमेट करने के लिए powershell का उपयोग करें:
$(Get-FileHash -Algorithm SHA256 .\kubectl.exe).Hash -eq $(Get-Content .\kubectl.exe.sha256)
-
अपने PATH
में बाइनरी जोड़ें।
-
यह सुनिश्चित करने के लिए परीक्षण करें कि kubectl
संस्करण डाउनलोड के समान है:
टिप्पणी:
Windows के लिए Docker Desktop kubectl
का अपना संस्करण
PATH
में जोड़ता है।
यदि आपने पहले Docker Desktop स्थापित किया है, तो आपको Docker Desktop इंस्टॉलर द्वारा जोड़े गए एक
PATH
से पहले अपनी
PATH
प्रविष्टि डालने की आवश्यकता हो सकती है या Docker Desktop के
kubectl
को हटा दें।
Chocolatey या Scoop का उपयोग करके Windows पर इंस्टॉल करें
-
Windows पर kubectl इंस्टॉल करने के लिए आप या तो Chocolatey पैकेज मैनेजर अथवा Scoop कमांड-लाइन इंस्टॉलर का उपयोग कर सकते हैं।
choco install kubernetes-cli
-
यह सुनिश्चित करने के लिए परीक्षण करें कि आपके द्वारा इंस्टॉल किया गया संस्करण उप-टू-डेट है:
-
अपनी होम डायरेक्टरी पर जाएं:
# यदि आप cmd.exe का प्रयोग कर रहे हैं, तो: cd %USERPROFILE%
cd ~
-
.kube
डायरेक्टरी बनाएं:
-
आपके द्वारा अभी बनाई गई .kube
डायरेक्टरी में जाएं:
-
दूरस्थ कुबेरनेट्स क्लस्टर का उपयोग करने के लिए kubectl को कॉन्फ़िगर करें:
New-Item config -type file
टिप्पणी:
अपनी पसंद के टेक्स्ट एडिटर जैसे नोटपैड का उपयोग कर कॉन्फिग फाइल को एडिट करें।
kubectl कॉन्फ़िगरेशन सत्यापित करें
kubectl को कुबेरनेट्स क्लस्टर को खोजने और एक्सेस करने के लिए, उसे
क्यूबकॉन्फिग फाइल(kubeconfig) की आवश्यकता होती है,
जो स्वचालित रूप से तब बनता है जब आप
kube-up.sh का उपयोग करके क्लस्टर बनाते हैं
या मिनीक्यूब क्लस्टर को सफलतापूर्वक डिप्लॉय करते हैं।
डिफ़ॉल्ट रूप से, kubectl कॉन्फ़िगरेशन ~/.kube/config
पर स्थित होता है।
जाँच करें कि क्लस्टर स्टेट प्राप्त करके kubectl को ठीक से कॉन्फ़िगर किया गया है:
यदि आपको एक URL प्रतिक्रिया दिखती हैं, तो kubectl आपके क्लस्टर तक पहुँचने के लिए सही ढंग से कॉन्फ़िगर हुआ है।
यदि आपको निम्नलिखित संदेश दिखाई देता है, तो kubectl ठीक से कॉन्फ़िगर नहीं हुआ है या कुबेरनेट्स क्लस्टर से कनेक्ट करने में सक्षम नहीं है।
The connection to the server <server-name:port> was refused - did you specify the right host or port?
उदाहरण के लिए, यदि आप अपने लैपटॉप (स्थानीय रूप से) पर कुबेरनेट्स क्लस्टर चलाना चाहते हैं, तो आपको पहले मिनीक्यूब (minikube) जैसे टूल को इंस्टॉल करना होगा और ऊपर बताए गए कमांड को फिर से चलाना होगा।
यदि kubectl cluster-info
URL प्रतिक्रिया देता है, लेकिन आप अपने क्लस्टर को एक्सेस नहीं कर पा रहें हैं, तो यह जाँचने के लिए कि क्या यह ठीक से कॉन्फ़िगर किया गया है, इस कमांड का उपयोग करें:
kubectl cluster-info dump
वैकल्पिक kubectl कॉन्फ़िगरेशन और प्लगइन्स
शेल ऑटोकम्प्लेशन सक्षम करें
kubectl Bash और Zsh के लिए ऑटोकम्प्लेशन का सपोर्ट प्रदान करता है, जो आपको बहुत सारी टाइपिंग बचा सकता है।
नीचे Zsh के लिए ऑटोकम्प्लेशन स्थापित करने की प्रक्रियाएँ हैं, यदि आप इसे Windows पर चला रहे हैं।
Zsh के लिए kubectl कम्पलीशन स्क्रिप्ट kubectl completion zsh
कमांड के साथ उत्पन्न की जा सकती है। आपके शेल में कम्पलीशन स्क्रिप्ट को सोर्स करने से kubectl ऑटो-कम्पलीशन सक्षम हो जाती है।
अपने सभी शेल सत्रों में ऐसा करने के लिए, निम्नलिखित को अपनी ~/.zshrc
फ़ाइल में जोड़ें:
source <(kubectl completion zsh)
यदि आपके पास kubectl के लिए एक उपनाम है, तो आप उस उपनाम के साथ काम करने के लिए शेल कम्पलीशन को बढ़ा सकते हैं:
echo 'alias k=kubectl' >>~/.zshrc
echo 'complete -F __start_kubectl k' >>~/.zshrc
अपने शेल को पुनः लोड करने के बाद, kubectl ऑटो-कम्पलीशन कार्य करना चाहिए।
यदि आपको कोई त्रुटि मिलती है जैसे complete:13: command not found: compdef
, तो अपनी ~/.zshrc
फ़ाइल की शुरुआत में निम्नलिखित जोड़ें:
autoload -Uz compinit
compinit
इंस्टॉल kubectl convert
प्लगइन
कुबेरनेट्स कमांड-लाइन टूल kubectl
के लिए एक प्लगइन, जो आपको विभिन्न API संस्करण के बीच मैनिफ़ेस्ट को बदलने करने की अनुमति देता है।
यह विशेष रूप से नए कुबेरनेट्स रिलीज के साथ एक गैर-बहिष्कृत API संस्करण में मैनिफेस्ट को माइग्रेट करने में सहायक हो सकता है।
अधिक जानकारी के लिए, गैर पदावनत एपिस में विस्थापित करें पर जाएं।
-
इस कमांड से नवीनतम रिलीज डाउनलोड करें:
curl -LO https://dl.k8s.io/release/v1.33.0/bin/windows/amd64/kubectl-convert.exe
-
बाइनरी को मान्य करें (वैकल्पिक)
kubectl-convert चेकसम फ़ाइल डाउनलोड करें:
curl -LO https://dl.k8s.io/v1.33.0/bin/windows/amd64/kubectl-convert.exe.sha256
चेकसम फ़ाइल से kubectl-convert बाइनरी को मान्य करें:
-
मैन्युअल रूप से कमांड प्रॉम्प्ट का उपयोग करके CertUtil
के आउटपुट की तुलना डाउनलोड किये गये चेकसम फ़ाइल से करें:
CertUtil -hashfile kubectl-convert.exe SHA256
type kubectl-convert.exe.sha256
-
True
या False
परिणाम प्राप्त करने और -eq
ऑपरेटर का उपयोग करके सत्यापन को ऑटोमेट करने के लिए Powershell का उपयोग करें:
$($(CertUtil -hashfile .\kubectl-convert.exe SHA256)[1] -replace " ", "") -eq $(type .\kubectl-convert.exe.sha256)
-
अपने PATH
में बाइनरी जोड़ें।
-
सत्यापित करें कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है।
यदि आपको कोई त्रुटि नहीं दिखाई देती है, तो इसका मतलब है कि प्लगइन सफलतापूर्वक इंस्टॉल हो गया है।
आगे क्या है
2 - नेटवर्क पॉलिसी प्रोवाइडर इंस्टॉल करें
2.1 - नेटवर्कपॉलिसी के लिए Antrea का उपयोग करें
यह पेज कुबेरनेट्स पर Antrea CNI प्लगइन को कैसे इंस्टॉल और उपयोग करें, यह दिखाता है।
प्रोजेक्ट Antrea की पृष्ठभूमि के लिए, Antrea का परिचय पढ़ें।
शुरू करने से पहले
आपके पास एक कुबेरनेट्स क्लस्टर होना चाहिए। एक क्लस्टर को बूटस्ट्रैप करने के लिए
kubeadm आरंभ करने की गाइड का पालन करें।
kubeadm के साथ Antrea को डिप्लॉय करना
kubeadm के लिए Antrea को डिप्लॉय करने के लिए आरंभ करने की गाइड का पालन करें।
आगे क्या है
एक बार जब आपका क्लस्टर चल रहा हो, तो आप कुबेरनेट्स नेटवर्कपॉलिसी को आज़माने के लिए नेटवर्क पॉलिसी घोषित करें का पालन कर सकते हैं।
3 - सीक्रेट्स (Secrets) का उपयोग करके प्रमाण-पत्रों को सुरक्षित रूप से वितरित करें
यह पृष्ठ दिखाता है कि संवेदनशील डेटा जैसे कि पासवर्ड और एन्क्रिप्शन कुंजियाँ
पॉड्स (pods) में सुरक्षित रूप से कैसे इंजेक्ट की जाती हैं।
शुरू करने से पहले
आपको कुबरनेट्स क्लस्टर की ज़रूरत पड़ेगी और क्यूब सीटीएल कमांड लाइन साधन को
समनुरूप करना होगा ताकि वो आपके क्लस्टर के साथ संवाद कर सकें। हमारी सलाह है की इस टुटोरिअल को क्लस्टर में रन करने के लिए कम से कम दो नोड का इस्तेमाल करे जो कि कंट्रोल प्लेन
होस्ट के तरह ना एक्ट करे। अगर आपके पास पहले से क्लस्टर नही है, आप
minikube
की मदद से वह बना सकते है या आप नीचे दिए हुए इन दो कुबरनेट्स प्लेग्राउंड का इस्तेमाल कर सकते हैं:
अपने गुप्त डेटा को base-64 रूपांतरण में बदलें
मान लीजिए कि आप दो गुप्त जानकारियाँ रखना चाहते हैं: एक उपयोगकर्ता नाम my-app
और एक पासवर्ड 39528$vdg7Jb
। सबसे पहले, base64 एन्कोडिंग टूल का उपयोग करके अपने उपयोगकर्ता नाम और पासवर्ड को base-64 रूप में बदलें। नीचे दिए गए उदाहरण में सामान्य रूप से उपलब्ध base64 प्रोग्राम का उपयोग किया गया है:
echo -n 'my-app' | base64
echo -n '39528$vdg7Jb' | base64
आउटपुट दिखाता है कि आपके उपयोगकर्ता नाम का base-64 रूपांतरण है bXktYXBw
,
और पासवर्ड का base-64 रूपांतरण है Mzk1MjgkdmRnN0pi
।
सावधान:
सुरक्षा जोखिमों को कम करने के लिए, किसी विश्वसनीय स्थानीय टूल का उपयोग करें
जो आपके ऑपरेटिंग सिस्टम द्वारा समर्थित हो। बाहरी टूल पर निर्भरता से बचें।
एक सीक्रेट (Secret) बनाएँ
यहाँ एक कॉन्फ़िगरेशन फ़ाइल दी गई है जिसका उपयोग आप अपना उपयोगकर्ता नाम और पासवर्ड
रखने वाले सीक्रेट को बनाने के लिए कर सकते हैं:
apiVersion: v1
kind: Secret
metadata:
name: test-secret
data:
username: bXktYXBw
password: Mzk1MjgkdmRnN0pi
-
सीक्रेट बनाएँ:
kubectl apply -f https://k8s.io/examples/pods/inject/secret.yaml
-
सीक्रेट के बारे में जानकारी देखें:
kubectl get secret test-secret
आउटपुट:
NAME TYPE DATA AGE
test-secret Opaque 2 1m
-
सीक्रेट के बारे में और विस्तृत जानकारी देखें:
kubectl describe secret test-secret
आउटपुट:
Name: test-secret
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 13 bytes
username: 7 bytes
सीधे kubectl
से एक सीक्रेट (Secret) बनाएँ
यदि आप Base64 एन्कोडिंग चरण को छोड़ना चाहते हैं,
तो आप उसी Secret को kubectl create secret
कमांड का उपयोग करके बना सकते हैं। उदाहरण के लिए:
kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'
यह तरीका अधिक सुविधाजनक है। पहले दिखाया गया विस्तृत तरीका
हर चरण को स्पष्ट रूप से चलाकर यह दर्शाता है कि अंदर क्या हो रहा है।
एक ऐसा पॉड बनाएँ जिसे वॉल्यूम (Volume) के माध्यम से सीक्रेट (Secret) डेटा तक पहुँच प्राप्त हो
यहाँ एक कॉन्फ़िगरेशन फ़ाइल दी गई है जिसका उपयोग आप एक पॉड बनाने के लिए कर सकते हैं:
apiVersion: v1
kind: Pod
metadata:
name: secret-test-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
# name must match the volume name below
- name: secret-volume
mountPath: /etc/secret-volume
readOnly: true
# The secret data is exposed to Containers in the Pod through a Volume.
volumes:
- name: secret-volume
secret:
secretName: test-secret
-
पॉड बनाएँ:
kubectl apply -f https://k8s.io/examples/pods/inject/secret-pod.yaml
-
सुनिश्चित करें कि आपका पॉड चल रहा है:
kubectl get pod secret-test-pod
आउटपुट:
NAME READY STATUS RESTARTS AGE
secret-test-pod 1/1 Running 0 42m
-
उस कंटेनरों के अंदर एक शेल खोलें जो आपके पॉड में चल रहा है:
kubectl exec -i -t secret-test-pod -- /bin/bash
-
सीक्रेट डेटा कंटेनरों को एक वॉल्यूम के माध्यम से उपलब्ध कराया जाता है
जो /etc/secret-volume
के अंतर्गत माउंट किया गया है।
अपने शेल में, /etc/secret-volume
डाइरेक्टरी में फ़ाइलों की सूची देखें:
# यह कमांड कंटेनर के अंदर शेल में चलाएँ
ls /etc/secret-volume
आउटपुट दो फ़ाइलें दिखाता है, जो हर एक गुप्त डेटा के लिए होती हैं:
password username
-
अपने शेल में, username
और password
फ़ाइलों की सामग्री देखें:
# यह कमांड कंटेनर के अंदर शेल में चलाएँ
echo "$( cat /etc/secret-volume/username )"
echo "$( cat /etc/secret-volume/password )"
आउटपुट में आपका उपयोगकर्ता नाम और पासवर्ड दिखेगा:
my-app
39528$vdg7Jb
अपने इमेज या कमांड लाइन को इस प्रकार संशोधित करें कि प्रोग्राम
mountPath
डाइरेक्टरी में फ़ाइलों को ढूंढे। सीक्रेट की data
मैप में हर कुंजी
इस डाइरेक्टरी में एक फ़ाइल नाम बन जाती है।
सीक्रेट (Secret) कुंजियों को विशिष्ट फ़ाइल पथों पर प्रोजेक्ट करे
आप वॉल्यूम के अंदर उन पथों को भी नियंत्रित कर सकते हैं जहाँ सीक्रेट कुंजियाँ प्रोजेक्ट की जाएँ।
प्रत्येक कुंजी के लक्ष्य पथ को बदलने के लिए .spec.volumes[].secret.items
फ़ील्ड का उपयोग करें:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
readOnly: true
volumes:
- name: foo
secret:
secretName: mysecret
items:
- key: username
path: my-group/my-username
जब आप इस पॉड को डिप्लॉय करते हैं, तो निम्न होता है:
mysecret
से username
कुंजी कंटेनर में /etc/foo/username
की बजाय
/etc/foo/my-group/my-username
पथ पर उपलब्ध होती है।
- उस Secret ऑब्जेक्ट की
password
कुंजी प्रोजेक्ट नहीं की जाती है।
यदि आप .spec.volumes[].secret.items
का उपयोग करके कुंजियों को स्पष्ट रूप से सूचीबद्ध करते हैं,
तो निम्न बातों का ध्यान रखें:
- केवल वही कुंजियाँ प्रोजेक्ट होती हैं जो
items
में निर्दिष्ट हैं।
- यदि आप Secret की सभी कुंजियों का उपयोग करना चाहते हैं,
तो सभी को
items
फ़ील्ड में सूचीबद्ध करना होगा।
- सूचीबद्ध सभी कुंजियाँ संबंधित सीक्रेट में मौजूद होनी चाहिए।
अन्यथा वॉल्यूम नहीं बनाया जाएगा।
सीक्रेट (Secret) कुंजियों के लिए POSIX अनुमतियाँ सेट करें
आप किसी एक सीक्रेट कुंजी के लिए POSIX फ़ाइल एक्सेस अनुमति बिट्स सेट कर सकते हैं।
यदि आप कोई अनुमति निर्दिष्ट नहीं करते हैं, तो डिफ़ॉल्ट रूप से 0644
उपयोग होती है।
आप पूरे सीक्रेट वॉल्यूम के लिए एक डिफ़ॉल्ट POSIX फ़ाइल मोड भी सेट कर सकते हैं,
और आवश्यकता होने पर किसी कुंजी के लिए उसे ओवरराइड कर सकते हैं।
उदाहरण के लिए, आप इस तरह डिफ़ॉल्ट मोड निर्दिष्ट कर सकते हैं:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mypod
image: redis
volumeMounts:
- name: foo
mountPath: "/etc/foo"
volumes:
- name: foo
secret:
secretName: mysecret
defaultMode: 0400
Secret /etc/foo
पर माउंट किया गया है;
Secret वॉल्यूम माउंट द्वारा बनाई गई सभी फ़ाइलों की अनुमति 0400
होगी।
टिप्पणी:
यदि आप JSON में पॉड या पॉड टेम्पलेट परिभाषित कर रहे हैं, तो सावधान रहें
कि JSON विनिर्देश अंकों के लिए ऑक्टल लिटरल का समर्थन नहीं करता है,
क्योंकि JSON में 0400
को दशमलव मान 400
माना जाता है।
JSON में, defaultMode
के लिए दशमलव मानों का उपयोग करें।
यदि आप YAML लिख रहे हैं, तो आप defaultMode
को ऑक्टल में लिख सकते हैं।
सीक्रेट (Secret) डेटा का उपयोग करके कंटेनर एनवायरनमेंट वेरिएबल परिभाषित करें
आप अपने कंटेनरों में सीक्रेट्स के डेटा को एनवायरनमेंट वेरिएबल्स के रूप में उपयोग कर सकते हैं।
यदि कोई कंटेनर पहले से ही एनवायरनमेंट वेरिएबल के रूप में सीक्रेट का उपयोग कर रहा है,
तो सीक्रेट अपडेट कंटेनर द्वारा तब तक नहीं देखा जाएगा जब तक कि कंटेनर को पुनः प्रारंभ (restart) न किया जाए। ऐसे कई थर्ड पार्टी समाधान उपलब्ध हैं जो सीक्रेट बदलने पर कंटेनर को पुनः प्रारंभ (restart) करते हैं।
किसी एक सीक्रेट (Secret) से डेटा के साथ कंटेनर एनवायरनमेंट वेरिएबल परिभाषित करें
-
सीक्रेट में key-value जोड़े के रूप में एक एनवायरनमेंट वेरिएबल परिभाषित करें:
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
-
पॉड विनिर्देशन (specification) में SECRET_USERNAME
नामक एनवायरनमेंट वेरिएबल को
सीक्रेट में परिभाषित backend-username
मान सौंपें।
apiVersion: v1
kind: Pod
metadata:
name: env-single-secret
spec:
containers:
- name: envars-test-container
image: nginx
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: backend-user
key: backend-username
-
पॉड बनाएं:
kubectl create -f https://k8s.io/examples/pods/inject/pod-single-secret-env-variable.yaml
-
अपनी शेल में, कंटेनर एनवायरनमेंट वेरिएबल SECRET_USERNAME की सामग्री प्रदर्शित करें:
kubectl exec -i -t env-single-secret -- /bin/sh -c 'echo $SECRET_USERNAME'
आउटपुट इस प्रकार होगा:
backend-admin
एक से अधिक सीक्रेट्स (Secrets) के डेटा से कंटेनर एनवायरनमेंट वेरिएबल्स परिभाषित करें
-
पहले के उदाहरण की तरह, पहले सीक्रेट्स बनाएं:
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
kubectl create secret generic db-user --from-literal=db-username='db-admin'
-
पॉड विनिर्देशन में एनवायरनमेंट वेरिएबल्स परिभाषित करें।
apiVersion: v1
kind: Pod
metadata:
name: envvars-multiple-secrets
spec:
containers:
- name: envars-test-container
image: nginx
env:
- name: BACKEND_USERNAME
valueFrom:
secretKeyRef:
name: backend-user
key: backend-username
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-user
key: db-username
-
पॉड बनाएं:
kubectl create -f https://k8s.io/examples/pods/inject/pod-multiple-secret-env-variable.yaml
-
शेल में, कंटेनर एनवायरनमेंट वेरिएबल्स देखें:
kubectl exec -i -t envvars-multiple-secrets -- /bin/sh -c 'env | grep _USERNAME'
आउटपुट कुछ ऐसा होगा:
DB_USERNAME=db-admin
BACKEND_USERNAME=backend-admin
टिप्पणी:
यह सुविधा Kubernetes v1.6 और बाद के संस्करणों में उपलब्ध है।
-
कई key-value जोड़ों के साथ सीक्रेट बनाएं:
kubectl create secret generic test-secret --from-literal=username='my-app' --from-literal=password='39528$vdg7Jb'
-
envFrom का उपयोग करके सीक्रेट के सभी डेटा को कंटेनर एनवायरनमेंट वेरिएबल्स के रूप में परिभाषित करें।
सीक्रेट में जो key है वह पॉड में एनवायरनमेंट वेरिएबल्स का नाम बन जाता है।
apiVersion: v1
kind: Pod
metadata:
name: envfrom-secret
spec:
containers:
- name: envars-test-container
image: nginx
envFrom:
- secretRef:
name: test-secret
-
पॉड बनाएं:
kubectl create -f https://k8s.io/examples/pods/inject/pod-secret-envFrom.yaml
-
शेल में, username
और password
कंटेनर एनवायरनमेंट वेरिएबल्स प्रदर्शित करें:
kubectl exec -i -t envfrom-secret -- /bin/sh -c 'echo "username: $username\npassword: $password\n"'
आउटपुट कुछ इस तरह होगा:
username: my-app
password: 39528$vdg7Jb
उदाहरण: सीक्रेट्स (Secrets) का उपयोग करके prod/test क्रेडेंशियल्स को Pods में उपलब्ध कराना
इस उदाहरण में एक पॉड प्रोडक्शन क्रेडेंशियल्स वाला सीक्रेट उपयोग करता है
और दूसरा पॉड टेस्ट एनवायरनमेंट क्रेडेंशियल्स वाला सीक्रेट।
-
प्रोड (prod) एनवायरनमेंट क्रेडेंशियल्स के लिए सीक्रेट बनाएं:
kubectl create secret generic prod-db-secret --from-literal=username=produser --from-literal=password=Y4nys7f11
आउटपुट:
secret "prod-db-secret" created
-
टेस्ट एनवायरनमेंट क्रेडेंशियल्स के लिए सीक्रेट बनाएं:
kubectl create secret generic test-db-secret --from-literal=username=testuser --from-literal=password=iluvtests
आउटपुट:
secret "test-db-secret" created
टिप्पणी:
विशेष अक्षर जैसे $
, \
, *
, =
, और !
आपके shell द्वारा व्याख्यायित किए जाएंगे और इन्हें एस्केप करना पड़ेगा।
ज्यादातर शेल में पासवर्ड को ('
) (सिंगल कोट्स) में लपेटना सबसे आसान तरीका है।
उदाहरण के लिए, यदि आपका पासवर्ड 'S!B\*d$zDsb=
' है, तो यह कमांड चलाएं:
kubectl create secret generic dev-db-secret --from-literal=username=devuser --from-literal=password='S!B\*d$zDsb='
यदि आप फ़ाइल से पासवर्ड ले रहे हैं (--from-file
), तो एस्केप करने की जरूरत नहीं होती।
-
पॉड manifests बनाएं:
cat <<EOF > pod.yaml
apiVersion: v1
kind: List
items:
- kind: Pod
apiVersion: v1
metadata:
name: prod-db-client-pod
labels:
name: prod-db-client
spec:
volumes:
- name: secret-volume
secret:
secretName: prod-db-secret
containers:
- name: db-client-container
image: myClientImage
volumeMounts:
- name: secret-volume
readOnly: true
mountPath: "/etc/secret-volume"
- kind: Pod
apiVersion: v1
metadata:
name: test-db-client-pod
labels:
name: test-db-client
spec:
volumes:
- name: secret-volume
secret:
secretName: test-db-secret
containers:
- name: db-client-container
image: myClientImage
volumeMounts:
- name: secret-volume
readOnly: true
mountPath: "/etc/secret-volume"
EOF
टिप्पणी:
दोनों Pods के विनिर्देश केवल एक फ़ील्ड में भिन्न होते हैं; यह एक सामान्य पॉड टेम्पलेट से विभिन्न क्षमताओं वाले Pods बनाना आसान बनाता है।
-
सभी ऑब्जेक्ट्स को API सर्वर पर लागू करें:
kubectl create -f pod.yaml
दोनों कंटेनरों में निम्नलिखित फाइलें मौजूद होंगी जिनमें पर्यावरण अनुसार मान होंगे:
/etc/secret-volume/username
/etc/secret-volume/password
आप दो सर्विस अकाउंट्स का उपयोग करके पॉड विनिर्देशन को और सरल बना सकते हैं:
prod-user
जो prod-db-secret
का उपयोग करता है
test-user
जो test-db-secret
का उपयोग करता है
पॉड विनिर्देशन इस प्रकार सरल हो जाता है:
apiVersion: v1
kind: Pod
metadata:
name: prod-db-client-pod
labels:
name: prod-db-client
spec:
serviceAccount: prod-db-client
containers:
- name: db-client-container
image: myClientImage
संदर्भ
आगे क्या है
- Secrets के बारे में और जानें।
- Volumes के बारे में जानकारी प्राप्त करें।
4 - TLS
अपने क्लस्टर के भीतर ट्रैफ़िक को ट्रांसपोर्ट लेयर सिक्योरिटी (टीएलएस) का उपयोग करके सुरक्षित करना समझें।
4.1 - क्यूबलेट के लिए प्रमाणपत्र आवर्तन कॉन्फ़िगर करें
यह पृष्ठ दिखाता है कि क्यूबलेट के लिए प्रमाणपत्र आवर्तन कैसे सक्षम और कॉन्फ़िगर कर सकते है।
फ़ीचर स्थिति:
Kubernetes v1.19 [stable]
शुरू करने से पहले
- कम से कम कुबेरनेट्स संस्करण 1.8.0 या उसके बाद की आवश्यकता है।
अवलोकन
क्यूबलेट प्रमाणपत्रों का उपयोग कुबरनेट्स API के साथ प्रमाणित करने के लिए करता है।
डिफ़ॉल्ट रूप से, ये प्रमाणपत्र एक वर्ष की समाप्ति के साथ जारी किए जाते हैं ताकि उन्हें बार-बार नवीनीकृत करने की आवश्यकता न हो।
कुबरनेट्स में क्यूबलेट प्रमाणपत्र आवर्तन
शामिल है, जो स्वचालित रूप से एक नई कुंजी उत्पन्न करेगा
जो स्वचालित रूप से एक नई कुंजी उत्पन्न करेगा और वर्तमान प्रमाणपत्र की समाप्ति के करीब आने पर कुबरनेट्स API से एक नया प्रमाणपत्र अनुरोध करेगा।
एक बार नया प्रमाणपत्र उपलब्ध हो जाने पर, यह कुबरनेट्स API के साथ कनेक्शन को प्रमाणित करने के लिए उपयोग किया जाएगा।
क्लाइंट प्रमाणपत्र रोटेशन सक्षम करना
kubelet
प्रक्रिया एक प्राचल --rotate-certificates
स्वीकार करती है जो नियंत्रित करती है कि क्या कुबलेट स्वचालित रूप से वर्तमान में उपयोग किए जा रहे प्रमाणपत्र की समाप्ति के करीब आने पर एक नया प्रमाणपत्र अनुरोध करेगा।
kube-controller-manager
प्रक्रिया एक प्राचल स्वीकार करती है
--cluster-signing-duration
(--experimental-cluster-signing-duration
1.19 से पहले)
जो नियंत्रित करता है कि प्रमाणपत्र कितने समय के लिए जारी किए जाएंगे।
प्रमाणपत्र रोटेशन कॉन्फ़िगरेशन को समझना
जब एक कुबलेट शुरू होता है, यदि इसे बूटस्ट्रैप करने के लिए कॉन्फ़िगर किया गया है (उपयोग करते हुए
--bootstrap-kubeconfig
फ्लैग), तो यह कुबरनेट्स API से कनेक्ट करने और एक प्रमाणपत्र हस्ताक्षर अनुरोध जारी करने के लिए अपने प्रारंभिक प्रमाणपत्र का उपयोग करेगा। आप प्रमाणपत्र हस्ताक्षर अनुरोधों की स्थिति देख सकते हैं:
शुरुआत में, किसी नोड पर कुबलेट से एक प्रमाणपत्र हस्ताक्षर अनुरोध की स्थिति Pending
होगी।
यदि प्रमाणपत्र हस्ताक्षर अनुरोध विशिष्ट मानदंडों को पूरा करता है, तो इसे नियंत्रक प्रबंधक द्वारा स्वचालित रूप से अनुमोदित किया जाएगा, और फिर इसकी स्थिति Approved
होगी।
इसके बाद, नियंत्रक प्रबंधक एक प्रमाणपत्र पर हस्ताक्षर करेगा, जो
--cluster-signing-duration
पैरामीटर द्वारा निर्दिष्ट अवधि के लिए जारी किया जाएगा, और हस्ताक्षरित प्रमाणपत्र को प्रमाणपत्र हस्ताक्षर अनुरोध से जोड़ा जाएगा।
कुबलेट कुबरनेट्स API से हस्ताक्षरित प्रमाणपत्र प्राप्त करेगा और इसे डिस्क पर लिखेगा,
--cert-dir
द्वारा निर्दिष्ट स्थान में। फिर कुबलेट कुबरनेट्स API से कनेक्ट करने के लिए नए प्रमाणपत्र का उपयोग करेगा।
जैसे ही हस्ताक्षरित प्रमाणपत्र की समाप्ति निकट आती है, कुबलेट स्वचालित रूप से कुबरनेट्स API का उपयोग करके एक नया प्रमाणपत्र हस्ताक्षर अनुरोध जारी करेगा।
यह प्रमाणपत्र पर शेष समय के 30% और 10% के बीच किसी भी बिंदु पर हो सकता है।
फिर से, नियंत्रक प्रबंधक स्वचालित रूप से प्रमाणपत्र अनुरोध को अनुमोदित करेगा और प्रमाणपत्र हस्ताक्षर अनुरोध से एक हस्ताक्षरित प्रमाणपत्र जोड़ेगा।
कुबलेट कुबरनेट्स API से नया हस्ताक्षरित प्रमाणपत्र प्राप्त करेगा और इसे डिस्क पर लिखेगा।
फिर यह कुबरनेट्स API के साथ कनेक्शन को नए प्रमाणपत्र का उपयोग करके पुन: कनेक्ट करने के लिए अपडेट करेगा।