কুবেরনেটস ডিপ্লোয়মেন্ট স্পকে এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করা


18

আমি বর্তমানে Deployment.yamlএকটি পরিষেবা মোতায়েনের জন্য একটি কুবেরনেটস বিশেষ ব্যবহার করি । বৈশিষ্টটিতে একটি নির্দিষ্ট আইপি ঠিকানায় একটি ভারব্যাটিম রেফারেন্স অন্তর্ভুক্ত রয়েছে ( <static-ip-address>নীচে হিসাবে চিহ্নিত ):

spec:
  type: LoadBalancer
  loadBalancerIP: <static-ip-address>

আমি পাসওয়ার্ড বা আইপি অ্যাড্রেসগুলির মতো তথ্য দূরবর্তী গিট সংগ্রহস্থলগুলিতে ঠেলা সম্পর্কে উদ্বিগ্ন। পরিবেশগত পরিবর্তনশীল, উদাহরণস্বরূপ একটি স্থাপনা নির্দিষ্টকরণ এবং প্রকৃত স্থাপনার সাথে মোটামুটি নীচে ব্যবহার করে আমি কি এড়াতে পারি:

spec:
   type: LoadBalancer
   loadBalancerIP: ${SERVICE_ADDRESS}

এবং

export SERVICE_ADDRESS=<static-ip-address>
kubectl create -f Deployment.yaml

স্পষ্টতই এই নির্দিষ্ট সিনট্যাক্সটি এখনও কাজ করে না। তবে কি এরকম কিছু সম্ভব এবং যদি হয় তবে কীভাবে?

আমি পৃথক বিধানের সরঞ্জামের উপর নির্ভর না করা পছন্দ করি । গোপনীয়ConfigMapগুলি প্রতিশ্রুতিবদ্ধ বলে মনে হয় তবে দৃশ্যত এগুলি সেভাবে গ্রাস করা যায় না যা এই উদ্দেশ্যে উপযুক্ত। আমি যদি সরাসরি কোনও স্থির আইপি ঠিকানাটি উল্লেখ করতে পারি যা তার সাথে সংজ্ঞায়িত gcloud compute addresses create service-addressকরা সেরা হবে।

উত্তর:


27

অনেক সহজ / ক্লিনার সমাধান: envsubst

মোতায়েন.আইএমএল:

LoadbalancerIP: $LBIP

তারপরে কেবল আপনার এনভির ভার তৈরি করুন এবং কুবেটেল এর মতো চালান:

export LBIP="1.2.3.4"
envsubst < deploy.yml | kubectl apply -f -

আপনি কেবল যে কোনও ফাইলটি ব্যবহার করতে চান তা নিয়মিত বাশ ভেরিয়েবলগুলি রেখেছেন, এক্ষেত্রে ওয়াইএএমএল ম্যানিফেস্টে এই ফাইলটি পড়তে হবে। এটি env vars এর সাথে তাদের মান দ্বারা প্রতিস্থাপন করবে। আপনি এটির মতো নতুন ফাইল তৈরি করতে এটি ব্যবহার করতে পারেন:

envsubst < input.yml > output.yml

envsubstযেমন উবুন্টু / ডেবিয়ান gettextপ্যাকেজ উপলব্ধ।


2
জন্য +1 envsubst। এখনও অবধি এই সম্পর্কে জানতেন না
user1129682

1
এটি সহজ / পরিচ্ছন্ন নয়, কারণ এটির জন্য একটি পৃথক সরঞ্জাম প্রয়োজন, যা ডিফল্টরূপে সমস্ত সিস্টেমে ইনস্টল করা হয় না (যেমন ম্যাক)
ইভান

@ ইভান তাঁর প্রশ্নটি ছিল "তবে কি এমন কিছু সম্ভব এবং যদি হয় তবে কীভাবে?", এবং এটিই তাঁর প্রশ্নের উত্তর the প্রশ্নটি ছিল না "ডিফল্টরূপে প্রতিটি OS এ উপলব্ধ সরঞ্জামগুলির সাহায্যে আমি এটি কীভাবে করব?" এবং হ্যাঁ, এটি ব্যবহারের চেয়ে 1) সহজ এবং 2) ক্লিনার sed। আপনার সংজ্ঞা অনুসারে, প্রস্তাবিত সমাধানটি উইন্ডোজ মেশিনে ডিফল্টরূপে ইনস্টলড sedনা থাকায় সহজে / ক্লিনারও সহজ হবে না sed
জান গ্রিও

আপনি "সেড" বিকল্পের সাথে তুলনা করছিলেন তা মোটেও পরিষ্কার নয়।
ইভান

2

অন্য pleasantly, সহজ সমাধান ছিল: আমি একটি Google কম্পিউট ঠিকানা my-addressসংজ্ঞায়িত, এবং আমি দৃশ্যত তাই মত সেবা বৈশিষ্ট এটা ব্যবহার করতে পারেন: loadBalancerIP: my-address

আইপি অ্যাড্রেসগুলির জন্য এটি "বাহ্যিক" উত্স এবং পাসওয়ার্ডগুলির গোপনীয়তার জন্য আমার সাধারণ ব্যবহারের ক্ষেত্রে (একটি জি.কে.ই. পরিবেশের মধ্যে) প্রভিশন সরঞ্জাম (বা টেমপ্লেট) দরকার নেই।

এখনই অসমাপ্ত: আমি সর্বোপরি "বিল্ট-ইন" নামক ধরণের প্রভিশন সরঞ্জাম ব্যবহার করার সিদ্ধান্ত নিয়েছি sed

আমার Deployment.yamlএখন একটি "টেম্পলেট ভেরিয়েবল" উদাহরণস্বরূপ রয়েছে

loadBalancerIP: $$EXTERNAL_IP

এবং আমি এই পরিষেবাটি বাহ্যিক আইপি ঠিকানা হিসাবে 1.2.3.4 হিসাবে বলি

cat Deployment.yaml | sed s/\$\$EXTERNAL_IP/1.2.3.4/ | kubectl create -f -

1
জান গ্রিওর পদ্ধতির আরও জেনেরিক যে কোনও সংখ্যক ভেরিয়েবলের ক্ষেত্রে প্রয়োগ করা যেতে পারে। আমি কম জেনেরিক এবং আপনার অতিরিক্ত ভেরিয়েবলের জন্য সামঞ্জস্য করা উচিত আপনার নিজের গ্রহণ করার পরিবর্তে তার উত্তরটি গ্রহণ করার পরামর্শ দেব।
টেকটিমি

0

আপনি আপনার ইয়ামল ফাইলগুলিতে পরিবর্তনশীল প্রতিস্থাপনের জন্য একটি সাধারণ প্রাক-প্রসেসর লিখতে পারেন (বা আপনি জসননেট কনফিগারেশন ফাইলগুলিতে একই জিনিসটি সম্পাদন করতে ব্যবহার করতে পারেন )।

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


হ্যাঁ, তবে প্রশ্নে উল্লিখিত হিসাবে জসননেট একটি বিধান সরঞ্জাম।
ড্রাক্স

1
আপনি যদি অন্তর্নির্মিত কোনও বিষয় সন্ধান করছেন, তবে আমি যে সমস্যার সাথে লিঙ্ক করেছি তা অনুসরণ করা এই মুহুর্তে আপনার সেরা বাজি।
রবার্ট বেইলি

0

টেমপ্লেটগুলি উপলভ্য না হওয়া পর্যন্ত এটি করার সহজতম উপায় হ'ল একটি চাকরী চালানো যা পরিষেবা আপডেট করার জন্য কুবারনেটস এপিআই ব্যবহার করে । একটি আলপাইন ভিত্তিক চিত্রের একটি শর্ট শেল স্ক্রিপ্ট, একটি গোপন (আইপি ঠিকানা সম্বলিত) এবং একটি কনফিগারেশন (টেমপ্লেটযুক্ত) সহ একত্রে যথেষ্ট সহজ হওয়া উচিত। কঠিন বিটটি সঠিকভাবে এপিএসবারের প্রমাণীকরণ এবং অনুমোদন বৈশিষ্ট্যগুলি ব্যবহার করছে।

/programming/30690186/how-do-i-access-the-kubernetes-api-from-within-a-pod-container API এ অ্যাক্সেস করার একটি উদাহরণ দেয়। স্পষ্টতই, আপনি উদাহরণটিতে জিইটির পরিবর্তে / এপিআই / ভি 1 / নেমস্পেস / ডিফল্ট / পরিষেবাগুলিতে পোস্ট করতে চান ।


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