আমি কীভাবে কুবারনেটিকে কোনও চিত্র পুনরায় টানতে বাধ্য করব?


161

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

ঘূর্ণায়মান আপডেট সম্পাদিত হয়, কিন্তু কোনও পুনরায় টানতে পারে না। কেন?


12
আমি একই ট্যাগ দিয়ে একটি ভিন্ন চিত্র দিয়েছি। যদি আলাদা ট্যাগ দেওয়ার দরকার হয় তবে ভাল, আমি imagePullPolicyক্ষেত্রের কোনও পয়েন্ট দেখতে পাচ্ছি না ।
টর্স্টেন ব্রোঞ্জার

4
আমি একটি নির্দিষ্ট ট্যাগ ব্যবহার করতে চাই, তবে এর নতুন সংস্করণ।
টর্স্টেন ব্রোঞ্জার

3
@ টর্স্টেনব্রোনার আমি মনে করি এটি কুবারনেটস / ডকার তত্ত্বের একটি ব্রেকিং পরিবর্তন। আপনি যে চিত্রটি টেনে আনতে পারেন: ট্যাগ (সর্বশেষ ব্যতীত) দুটি ভিন্ন সময়ে এবং দুটি পৃথক চিত্র পেতে সমস্যাযুক্ত হবে। একটি ট্যাগ সংস্করণ সংখ্যার অনুরূপ। ছবিটি বদলে সর্বদা ট্যাগ পরিবর্তন করা ভাল অনুশীলন হবে।
duct_tape_coder

2
এটা নির্ভর করে. খুব স্থিতিশীল এপিআই সহ সুরক্ষা আপডেট রয়েছে। তারপরে, আমি এতটা স্পষ্ট করে না বলে সর্বশেষতম সংস্করণ চাই।
টর্স্টেন ব্রোঞ্জার

1
@ টরস্টেনব্রোনার ব্যবহার সম্পর্কে latest, এটি করবেন না। সর্বশেষতমটি সর্বশেষতম ট্যাগ সহ, ভাল, আরও সাম্প্রতিক চিত্রটি টানবে। আপনি যা চান সেটি হ'ল সেমভেয়ার রেঞ্জ। উদাহরণস্বরূপ ~ 1.2.3। এটি> = 1.2.3 এবং <1.3.0 এর ব্যাপ্তির মধ্যে ট্যাগ সহ চিত্রগুলি টানবে। যতক্ষণ না ইমেজ বিক্রেতার সেমওয়ার অনুসরণ করে আপনার জানা (এবং এটি গুরুত্বপূর্ণ অংশ) কোনও পিছনে ব্রেকিং পরিবর্তন যুক্ত করা হয়নি (উদ্দেশ্য অনুসারে) এবং কোনও নতুন বৈশিষ্ট্য যুক্ত করা হয়নি (সম্ভাব্য সুরক্ষা উদ্বেগ)। দয়া করে latestউত্পাদন সিস্টেমে কখনই ব্যবহার করবেন না।
ডেভিড জে এডি

উত্তর:


140

যদি হয় (তবে আপডেট-ইমেজ ডক দেখুন ): কুবারনেটস পড তৈরির দিকে টান দেবে :

  • ট্যাগ করা ছবি ব্যবহার :latest
  • imagePullPolicy: Always উল্লিখিত আছে

আপনি যদি সর্বদা টানতে চান তবে এটি দুর্দান্ত। তবে আপনি যদি এটি চাহিদা অনুযায়ী করতে চান তবে: উদাহরণস্বরূপ, আপনি যদি ব্যবহার করতে চান some-public-image:latestতবে কেবল এটির জন্য জিজ্ঞাসা করার সময় ম্যানুয়ালি একটি নতুন সংস্করণ টানতে চান। আপনি বর্তমানে করতে পারেন:

  • সেট imagePullPolicyথেকে IfNotPresentবা Neverএবং প্রাক খিঁচ : প্রতিটি ক্লাস্টার নোডের তাই সর্বশেষ ক্যাসে নিয়ে যাওয়া হয় টান ম্যানুয়ালি চিত্র, তারপর একটি না kubectl rolling-updateবা Pods পুনরায় আরম্ভ করা অনুরূপ (অরুপ সহজে ভাঙ্গা হ্যাক!)
  • অস্থায়ীভাবে পরিবর্তন করুন imagePullPolicy, একটি করুন kubectl apply, পোড পুনরায় চালু করুন (উদাহরণস্বরূপ kubectl rolling-update), ফিরে যান imagePullPolicy, আবার করুন kubectl apply(কুরুচিপূর্ণ!)
  • some-public-image:latestআপনার ব্যক্তিগত সংগ্রহস্থলটিকে টানুন এবং চাপ দিন এবং একটি kubectl rolling-update(ভারী!) করুন

অন-ডিমান্ড টানার কোনও ভাল সমাধান নেই। যদি এটি পরিবর্তন হয়, দয়া করে মন্তব্য করুন; আমি এই উত্তর আপডেট করব।


আপনি বলছেন যে কুবারনেটগুলি ব্যবহারের সময় পড তৈরির বিষয়টি টানবে :latest- patchআইএনজি সম্পর্কে কী ? এটি কি সর্বদা নতুন / সর্বশেষ চিত্রটি টানতে পারে? মনে হচ্ছে আমার পক্ষে কাজ করবে না :(
পিকেইক

এটি নির্ভর করে যদি আপনার প্যাচ পডকে পুনরায় তৈরি করতে বাধ্য করে বা না। সম্ভবত না, তাহলে এটি আর টানবে না। আপনি পডটিকে ম্যানুয়ালি মেরে ফেলতে পারেন, বা কোনও অনন্যের সাথে ট্যাগ করতে পারেন এবং সেই আপডেট হওয়া ট্যাগটির সাথে প্যাচ করতে পারেন।
ওয়ার্নাইট

এটি একটি ভিন্ন প্রশ্নের উত্তর is আমি জিজ্ঞাস করছিলাম অত্যাচার পুনরায় টান।
টর্স্টেন ব্রোঞ্জার

এটি আমাকে জিসিআর থেকে নতুন করে টানতে বাধ্য করেছে। আমার কাছে একটি :latestট্যাগ ছিল যা একটি নতুন চিত্রকে নির্দেশ করেছিল এবং kubectl rolling-updateশুঁটি আপডেট করার জন্য কাজ করেছিল।
র‌্যান্ডি এল

ধন্যবাদ। পুল এবং পুশ পদ্ধতির জন্য গিয়েছিলেন। বাশ স্ক্রিপ্টগুলির সাথে এটি যথাসম্ভব স্বয়ংক্রিয়ভাবে তৈরি হয়েছে তবে সম্মত হয়েছে, এটি ভারী :)
আর্সেল্ডন

76

একটিকে নির্দিষ্ট imagePullPolicyতথ্যের পরিবর্তে ধারক ডেটার ভিতরে গ্রুপ করতে হবে to যাইহোক, আমি এটি সম্পর্কে একটি সমস্যা দায়ের করেছি কারণ আমি এটির কাছে বিজোড় মনে করি। এছাড়াও, কোনও ত্রুটির বার্তা নেই।

সুতরাং, এই স্পিপ স্নিপেট কাজ করে:

spec:
  containers:
  - name: myapp
    image: myregistry.com/myapp:5c3dda6b
    ports:
    - containerPort: 80
    imagePullPolicy: Always
  imagePullSecrets:
    - name: myregistry.com-registry-key

3
imagePullPolicy(বা ট্যাগিং :latest) ভাল যদি আপনি সর্বদা টানতে চান তবে এটি ডিমান্ডে টানার প্রশ্নটি সমাধান করে না।
ওয়ার্নাইট

1
হ্যাঁ, আমি সবসময় টানতে চাই, যেমন প্রশ্নের মধ্যে বলা হয়েছে।
টর্স্টেন ব্রোনার

1
ব্যবহার imagePullPolicy: Alwaysধারক সংজ্ঞা ভিতরে থাকবে kubernetesদিয়ে ট্যাগ ইমেজ আনা :latestযখনই তাদের এর নতুন সংস্করণ রেজিস্ট্রি পর্যন্ত পিছিয়ে দেয় হয়?
প্যাকারমল

1
@ পিকারামল নং imagePullPolicy: Alwaysকেবল কুবেরনেটকে সর্বদা রেজিস্ট্রি থেকে চিত্র টানতে বলে। এটি কী ইমেজটি imageঅ্যাট্রিবিউট দ্বারা কনফিগার করেছে । আপনি যদি এটিতে কনফিগার করেন image: your-image:latestতবে তা সর্বদা ট্যাগ your-imageসহ ছবিটি latestটানবে।
গাজুস

25

বিকাশের সময় আমার হ্যাকটি সর্বশেষতম ট্যাগ যুক্ত করার জন্য আমার স্থাপনার ম্যানিফেস্টে পরিবর্তন করা এবং সর্বদা এর মতো টানতে হয়

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

তারপরে আমি নিজেই পোড মুছে ফেলছি

kubectl delete pod my-app-3498980157-2zxhd

এটি একটি স্থাপনা হওয়ায় কুবারনেটস স্বয়ংক্রিয়ভাবে শুঁটি পুনরায় তৈরি করবে এবং সর্বশেষ চিত্রটি টানবে।


আমি "মোতায়েন" অবজেক্টের "কাঙ্ক্ষিত রাষ্ট্র" প্রাঙ্গনে সুবিধা গ্রহণ করতে চাই ... পরামর্শের জন্য ধন্যবাদ!
মার্সেলো ডি বিক্রয়

2
এটি লক্ষণীয় যে পরিষেবার ক্ষেত্রে ব্যর্থতা এবং ডাউনটাইম সহনীয় হলেই কৌশলটি কার্যকর। উন্নয়নের জন্য এটি যুক্তিসঙ্গত বলে মনে হয়, তবে কোনও উত্পাদন স্থাপনের জন্য আমি এই কৌশলটি কখনই বহন করব না।
ডিজিটালড্রেমার

এভারেটের পরামর্শ অনুসারে স্থাপনার সম্পাদনা করুন, চিত্রপুলি পলিসিকে সর্বদা পরিবর্তন করা এবং পোড মুছে ফেলা আমার পক্ষে যথেষ্ট ছিল। এটি যদিও উন্নয়নের পরিবেশ। kubernetes.io/docs/concepts/containers/images
জোস রবার্তো আলমারাজ

17

একটি জনপ্রিয় কাজটি হ'ল ডামি টিকা (বা লেবেল) সহ মোতায়েনের প্যাচ করা:

kubectl patch deployment <name> -p \
  "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"

আপনার মোতায়েন এই প্রয়োজনীয়তাগুলি পূরণ করে , এটি K8 গুলি কোনও নতুন চিত্র টানবে এবং পুনরায় চালিত করবে।


2
হ্যাঁ, আমি এটির জন্য একটি টীকা ব্যবহার করি।
টর্স্টেন ব্রোঞ্জার

কি টিকা?
জেরিল কুক

1
আর একটি পরিশীলিত সমাধান উভয় অর্থাত্ একটি সংমিশ্রণ হবে। একটি টীকা যুক্ত করা এবং সর্বদাImagePullPolicy হিসাবে সেটিং করা । টীকা পছন্দ এবং বেশ সহায়ক এবং অপরিবর্তনীয় স্থাপনার দিকে মাথা হতে পারে। deployment.kubernetes.io/revision: "v-someversion"kubernetes.io/change-cause: the reason
চন্দন

15

সরাসরি এটি করার জন্য একটি নতুন কোমন্ড থাকবে:

একটি নতুন kubectl rollout restartকমান্ড তৈরি করুন যা কোনও স্থাপনার রোলিং পুনরায় চালু করতে পারে।

খিঁচ অনুরোধ পেয়েছেন মার্জ হয়েছে। এটি সংস্করণ 1.15( চেঞ্জলগ ) এর অংশ হবে


হ্যাঁ ইস্যুর অংশ: github.com/kubernetes/kubernetes/issues/13488
টিলো

হ্যাঁ, নতুন কুবেরনেটস 1.15 এর ভারিয়নে আপডেট ট্রিগার করার এটি সর্বোত্তম উপায়।
ডলফিন

7

আপাতদৃষ্টিতে এখন যখন আপনি যুক্ত ধারকটি --imageবিদ্যমান ধারক ইমেজের সমতুল্য রোলিং-আপডেট পরিচালনা করেন , আপনাকে অবশ্যই একটি নির্দিষ্ট করতে হবে --image-pull-policy। নিম্নলিখিত কমান্ডটি যখন ধারক চিত্রের মতো হয় তখন চিত্রটির একটি টানতে বাধ্য করা উচিত:

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


6
# Linux

kubectl patch deployment <name> -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"`date +'%s'`\"}}}}}"

# windows

kubectl patch deployment <name> -p (-join("{\""spec\"":{\""template\"":{\""metadata\"":{\""annotations\"":{\""date\"":\""" , $(Get-Date -Format o).replace(':','-').replace('+','_') , "\""}}}}}"))

3

এখন, kubectl rollout restart deploy YOUR-DEPLOYMENTএকটি imagePullPolicy: Alwaysনীতিমালার সাথে মিলিত কমান্ডটি আপনাকে আপনার চিত্রের সর্বশেষ সংস্করণ সহ সমস্ত শুঁটি পুনরায় আরম্ভ করার অনুমতি দেবে।


3

রোলিং আপডেট কমান্ড, যখন একটি চিত্র আর্গুমেন্ট দেওয়া হয় তখন ধরে নেওয়া হয় যে চিত্রটি বর্তমানে প্রতিলিপি নিয়ামকটিতে বিদ্যমান তার চেয়ে আলাদা


এর অর্থ কি চিত্র ট্যাগ (ওরফে নাম) আলাদা থাকতে হবে?
টর্স্টেন ব্রোঞ্জার

হ্যাঁ, আপনি --imageপতাকাটি পাস করলে ছবির নাম অবশ্যই আলাদা হতে হবে ।
রবার্ট বেইলি

1
যেমন আমার নিজের উত্তরটি বলেছে, চিত্রটির নাম একই থাকলে এটিও কাজ করে। এটি কেবলমাত্র ছিল যে পুলপোলসি চিত্রটি ভুল জায়গায় ছিল। আমার প্রতিরক্ষার পক্ষে, k8s 1.0 ডক্স এই দিকটিতে ভুল।
টর্স্টেন ব্রোঞ্জার 21

যখন ডকস আচরণের সাথে সিঙ্কের বাইরে চলে যায় তখন ভালোবাসি। : /
রবার্ট বেইলি

1
সেই ইউআরএলটিও পুরানো।
ড্যান টেনেনবুম


0

চিত্রের টান নীতিটি সর্বদা প্রতিবার নতুন পোড তৈরি হওয়ার সময় চিত্রটি টানতে সহায়তা করবে (এটি কোনও ক্ষেত্রেই প্রতিরূপের স্কেলিংয়ের মতো হতে পারে, বা পোড মারা যায় এবং নতুন পোড তৈরি হয়)

তবে আপনি যদি চলমান পডের চিত্র আপডেট করতে চান তবে স্থাপনা হ'ল সেরা উপায়। এটি কোনও সমস্যা ছাড়াই আপনাকে ত্রুটিবিহীন আপডেট ছেড়ে দেয় (মূলত যখন আপনি পডের সাথে অবিচ্ছিন্ন ভলিউম সংযুক্ত থাকে) :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.