image - मैं कुबेरनेट्स को एक छवि को फिर से खींचने के लिए कैसे मजबूर करूं?




pull kubernetes (6)

मेरे पास GKE पर कुबेरनेट्स में निम्नलिखित प्रतिकृति नियंत्रक है:

apiVersion: v1
kind: ReplicationController
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 2
  selector:
    app: myapp
    deployment: initial
  template:
    metadata:
      labels:
        app: myapp
        deployment: initial
    spec:
      containers:
      - name: myapp
        image: myregistry.com/myapp:5c3dda6b
        ports:
        - containerPort: 80
      imagePullPolicy: Always
      imagePullSecrets:
        - name: myregistry.com-registry-key

अब, अगर मैं कहूं

kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b

रोलिंग अपडेट किया जाता है, लेकिन कोई पुन: नहीं खींचता है। क्यूं कर?


Wil सीधे करने के लिए एक नया कॉमन हो सकता है:

एक नया kubectl rollout restart कमांड बनाएँ जो एक परिनियोजन का पुनः आरंभ करता है।

पुल अनुरोध विलीन हो गया। यह संस्करण 1.15 ( changelog ) का हिस्सा होगा


आप imagePullPolicy: Always को परिभाषित कर सकते हैं imagePullPolicy: Always आप परिनियोजन फ़ाइल में।


कुबेरनेट्स पॉड निर्माण पर खींच लेंगे यदि या तो ( अपडेट-छवियों को देखें):

  • टैग की गई छवियों का उपयोग करना :latest
  • imagePullPolicy: Always निर्दिष्ट होता है

यह बहुत अच्छा है अगर आप हमेशा खींचना चाहते हैं। लेकिन क्या होगा यदि आप इसे मांग पर करना चाहते हैं: उदाहरण के लिए यदि आप some-public-image:latest का उपयोग करना चाहते हैं some-public-image:latest लेकिन केवल एक नया संस्करण मैन्युअल रूप से खींचना चाहते हैं जब आप इसके लिए पूछते हैं। आप वर्तमान में कर सकते हैं:

  • imagePullPolicy को IfNotPresent या Never और pre-pull सेट करें: प्रत्येक क्लस्टर नोड पर मैन्युअल रूप से चित्र pre-pull ताकि नवीनतम कैश्ड हो, फिर एक kubectl rolling-update या पॉड्स को पुनरारंभ करने के लिए समान (बदसूरत आसानी से हैक करें!)
  • अस्थायी रूप से imagePullPolicy बदल imagePullPolicy , एक kubectl apply , पॉड को पुनः आरंभ करें (जैसे kubectl rolling-update ), imagePullPolicy वापस imagePullPolicy , एक kubectl apply फिर से kubectl apply (बदसूरत!)
  • अपनी निजी रिपॉजिटरी में some-public-image:latest खींचो और kubectl rolling-update और kubectl rolling-update (भारी!) करो।

ऑन-डिमांड पुल के लिए कोई अच्छा समाधान नहीं। यदि वह बदलता है, तो कृपया टिप्पणी करें; मैं इस awser को अपडेट करूंगा।


जाहिरा तौर पर अब जब आप मौजूदा कंटेनर छवि के समान --image तर्क के साथ रोलिंग-अपडेट चलाते हैं, तो आपको --image-pull-policy भी निर्दिष्ट करनी होगी। निम्नलिखित कमांड को छवि के एक पुल को मजबूर करना चाहिए जब यह कंटेनर की छवि के समान हो:

kubectl rolling-update myapp --image=us.gcr.io/project-107012/myapp:5c3dda6b --image-pull-policy Always



विकास के दौरान मेरी हैक नवीनतम टैग जोड़ने और हमेशा की तरह खींचने के लिए मेरे परिनियोजन प्रकटन को बदलना है

image: etoews/my-image:latest
imagePullPolicy: Always

फिर मैं फली को मैन्युअल रूप से हटाता हूं

kubectl delete pod my-app-3498980157-2zxhd

क्योंकि यह एक परिनियोजन है, कुबेरनेट्स स्वचालित रूप से फली को फिर से बनाएंगे और नवीनतम छवि को खींचेंगे।





kubernetes