বিদ্যমান8 কে মুছে না দিয়ে k8s কনফিগার ম্যাপ বা সিক্রেট আপডেট করুন


100

আমি আমাদের বৈশিষ্ট্যগুলি পরিচালনা করতে K8S কনফিগারেশন এবং গোপন ব্যবহার করে যাচ্ছি। আমার নকশাটি বেশ সহজ, এটি গিট রেপোতে বৈশিষ্ট্যগুলি ফাইল রাখে এবং বিল্ট সার্ভার যেমন থাটওয়ার্কস জিও হিসাবে তাদের আমার ক 8 এস ক্লাস্টারে কনফিগার ম্যাপস বা সিক্রেটস (পছন্দসই শর্তে) হিসাবে স্বয়ংক্রিয়ভাবে স্থাপন করতে ব্যবহার করে।

বর্তমানে, আমি দেখতে পেলাম যে এটি সত্যই কার্যকর নয় যে আমাকে সর্বদা বিদ্যমান কনফিগারেশন এবং গোপনীয়তা মুছে ফেলতে হবে এবং নীচের মত আপডেট করার জন্য নতুনটি তৈরি করতে হবে:

  1. kubectl delete configmap foo

  2. kubectl create configmap foo --from-file foo.properties

কারেন্টটি মুছে ফেলার চেয়ে এক ধাপ উপরে এবং আরও দক্ষ করার জন্য কি সুন্দর এবং সহজ উপায় আছে? সম্ভবত আমি এখন যা করছি তা পুরানো কনফিগারেশন মোছার সময় এবং নতুনটি তৈরি না হওয়ার পরে মাউন্ট করার চেষ্টা করলে এই কনফিগারেশনগুলি ব্যবহার করে এমন কনটেইনারটিকে আপস করতে পারে।


আমি কেবলমাত্র পরিবেশ মানগুলিতে কনফিগারেশন ম্যাপ করার জন্য একটি প্রকল্প তৈরি করেছি, এটি কারও পক্ষে কার্যকর হতে পারে। github.com/Aanganguven/kubernetes-configmap-update
Ahmet Can

উত্তর:


161

আপনি kubectl create configmapকমান্ড থেকে YAML পেতে এবং এটিতে পাইপ করতে পারেন kubectl replace:

kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f -

4
পাইপ কমান্ডটি যাবার উপায়, - ড্রাই-রানের কথা ভাবেন নি যা কমান্ডের মূল অংশ বলে মনে হচ্ছে!
জেমস জিয়াং

4
এর মূল্য কী, এই একই প্যাটার্নটি এখানে দেখানো কনফিগারেশন ম্যাপস ছাড়াও সিক্রেটসের জন্য কাজ করতে পারে।
রাইডার্নার

4
কুবেরনেটস ১.১০ দিয়ে চেষ্টা error: error validating "STDIN": error validating data: [apiVersion not set, kind not set]; if you choose to ignore these errors, turn validation off with --validate=false
করেও তবু

4
এটি 1.10.1 এ 1.10.1 এ সমাধান হয়েছে - github.com/kubernetes/kubernetes/issues/61780 এবং github.com/kubernetes/kubernetes/pull/61808
জর্দান লিগজিট

4
দুর্দান্ত উত্তর। kubectl applyপরিবর্তে ব্যবহার করে kubectl replace, নতুন এবং বিদ্যমান কনফিগারেশনের জন্য উভয়ই কাজ করবে
nahsh

34

ভবিষ্যতের রেফারেন্সের kubectl replaceজন্য এখন এটি অর্জনের খুব সহজ উপায়

kubectl replace -f some_spec.yaml আপনাকে একটি সম্পূর্ণ কনফিগারম্যাপ (বা অন্যান্য অবজেক্ট) আপডেট করতে দিন

ডক এবং উদাহরণগুলি এখানে সরাসরি দেখুন

সহায়তা থেকে অনুলিপি / আটকানো:

# Replace a pod using the data in pod.json.
kubectl replace -f ./pod.json

# Replace a pod based on the JSON passed into stdin.
cat pod.json | kubectl replace -f -

# Update a single-container pod's image version (tag) to v4
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -

# Force replace, delete and then re-create the resource
kubectl replace --force -f ./pod.json

4
এটি --from-fileপ্রয়োজন মিস করল । কনফিগারেশন কেবল ইয়ামল নয়, একটি স্বেচ্ছাসেবী ফাইল থেকে তৈরি করা যেতে পারে।
ডেভ হিলিয়ার

@ সাবসটিয়েন-পোর্টেবোইস ধন্যবাদ! আমি --forceবিকল্পটি জানতাম না <dry-run ConfigMap creation> | kubectl replace --force -f -, কনফিগম্যাপের অস্তিত্ব না থাকলে আমাদের প্রথমবারের মতো কীভাবে অ্যাপ্রোচ কমান্ডটি ব্যবহার করতে দেওয়া হবে ? তবে আমি নিশ্চিত না যে এটি কনফিগার ম্যাপটি মুছে ফেলা নিরাপদ কিনা কারণ পডগুলি খুঁজে না পাওয়ার কারণে এর অভাবের সময় ভেঙে যেতে পারে। সম্ভবত এটি পদ্ধতির ভাল <dry-run ConfigMap creation> | kubectl apply -f -? এই বিষয়টিকে একরকম @ কার্তিক-সি দ্বারা প্রবর্তন করা হয়েছিল, আপনি কী ভাবেন? এছাড়াও @ জর্ডান-লিগিট কি ভাবছেন?
অ্যালেক্স এমএম

19

ছোট পরিবর্তনগুলির জন্য configMap, ব্যবহার করুনedit

kubectl edit configmap <cfg-name>

এটি viসম্পাদকে কনফিগারেশন খুলবে । পরিবর্তনগুলি করুন এবং এটি সংরক্ষণ করুন।


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

5

kubectl replace একটি কনফিগারেশন ইতিমধ্যে উপস্থিত থাকলে ব্যর্থ:

$ kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f -

Error from server (NotFound): error when replacing "STDIN": configmaps "falco-config" not found

সর্বোত্তম সমাধানটি হ'ল ব্যবহার করা kubectl applyযা কোন উপস্থিতি উপস্থিত থাকলে কনফিগারেশন তৈরি করে কনফিগারেশন তৈরি করে:

$ kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl apply -f -

configmap/falco-config configured


6
আমি মনে করি আপনার মানে " kubectl replaceব্যর্থতা যদি কোনও কনফিগারেশন ইতিমধ্যে উপস্থিত না থাকে"।
ডেভিড ডুলিং

0

বিদ্যমান কনফিগারেশনের একটি অনুলিপি নিন:

kubectl get configmap foo -o yaml > foo.yaml

এবং তারপরে পরিবর্তনগুলি করুন এবং প্রয়োগ আদেশটি ব্যবহার করুন, এটি কাজ করা উচিত।

kubectl apply -f foo.yaml

দ্রষ্টব্য: যদি আপনি নীচের কোনও সমস্যা দেখতে পান তবে বিদ্যমান কনফিগারেশন মানচিত্র থেকে সর্বশেষ "রিসোর্সভার্সন" অন্তর্ভুক্ত করুন এবং আবার চেষ্টা করুন।

"কনফিগারেশন" foo "এ অপারেশন সম্পন্ন করা যায় না: বস্তুটি সংশোধন করা হয়েছে; দয়া করে আপনার পরিবর্তনগুলি সর্বশেষতম সংস্করণে প্রয়োগ করুন এবং আবার চেষ্টা করুন"

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