OOAAOWOOAAOW
LinuxGitNetworkingKubernetesHelmPythonDocker
YouTube
কোর্সসমূহ
আমার লাইব্রেরি
LinuxGitNetworkingKubernetesHelmPythonDocker
YouTube
OOAAOW YouTube Channel
Sponsor OOAAOW

DevOps Lab — Bangladeshi learner-দের জন্য তৈরি

সাবস্ক্রিপশনসাবস্ক্রিপশন নীতি

হোম/python/Practical Python for Real DevOps/পর্ব ৬
০৬

পর্ব ৬ — Python দিয়ে Kubernetes অটোমেশন

kubectl যা করে, Python দিয়েও করা যায় — আর তার পর লুপ, শর্ত, retry আর রিপোর্ট যোগ করা যায়। kubeconfig, দুই ধরনের connect, CoreV1 বনাম AppsV1, pod দেখা, deployment বানানো, scale করা, মুছে ফেলা, আর YAML-এর সাথে তুলনা।

kuberneteskubeconfigminikubeautomationdeploymentscaleapi⏱ ~৫০ মিনিট
💡 ধারণা

kubectl তো আছেই — তাহলে Python কেন

প্রশ্নটা ন্যায্য, আর সাক্ষাৎকারেও আসে। kubectl দিয়ে সব হয়, তাহলে Python কেন?

উত্তরটা এক বাক্যে: kubectl একটা কমান্ড চালায়, Python একটা সিদ্ধান্ত নেয়।

একটু খুলে বলি। ধরো তোমার ৪০টা namespace, আর তুমি চাও যেসব pod পনেরো মিনিটের বেশি CrashLoopBackOff-এ আছে সেগুলো মুছে দিতে আর কোন কোনটা ছিল সেটা Slack-এ জানাতে।

kubectl দিয়ে এটা করতে হবে shell-এ — kubectl get pods --all-namespaces -o json | jq ... দিয়ে, তারপর loop, তারপর তারিখের হিসাব shell-এ। লেখা যায়, কিন্তু ছয় মাস পরে ওই লাইনটা কেউ পড়তে পারবে না।

Python-এ এটা পঁচিশ লাইনের একটা ফাইল যার প্রতিটা অংশের নাম আছে।

তাহলে সীমারেখাটা কোথায়? এভাবে ভাবো:

কাজকী দিয়ে
একবার কিছু দেখা বা বদলানোkubectl
একই জিনিস বারবার, হাতেএকটা shell alias বা script
শর্ত, লুপ, তারিখের হিসাব, retryPython
API কল করা (Slack, Jira, PagerDuty)Python
CI/CD-র ভেতরে চালানোPython

শেষ দুটো গুরুত্বপূর্ণ। shell থেকে একটা HTTP POST করা যায় ঠিকই, কিন্তু উত্তরের JSON পড়া, ব্যর্থ হলে আবার চেষ্টা করা, আর ভুলটা মানুষের ভাষায় জানানো — এসব shell-এ কষ্টকর, Python-এ স্বাভাবিক।

আর একটা কথা যেটা কেউ বলে না: Python-এর কোড পরীক্ষা করা যায়। একটা ফাংশন আলাদা করে ডেকে দেখা যায় সে ঠিক তালিকা ফেরত দেয় কি না। shell-এর একটা লম্বা pipe দিয়ে সেটা করা যায় না।

💡 ধারণা

Python কীভাবে ক্লাস্টারের সাথে কথা বলে

একটা ভুল ধারণা আগে সরিয়ে নিই: Python client kubectl-কে ডাকে না। সে নিজেই Kubernetes API server-এর সাথে কথা বলে — যেভাবে kubectl বলে, ঠিক সেভাবে।

তাহলে সে server-এর ঠিকানা কোথায় পায়? kubeconfig থেকে।

~/.kube/config ফাইলটায় তিনটে জিনিস থাকে:

• cluster — API server-এর ঠিকানা আর তার certificate

• user — তুমি কে, সেটা প্রমাণ করার certificate বা token

• context — কোন cluster + কোন user + কোন namespace, একসাথে বাঁধা

current-context ঠিক করে দেয় কোনটা এখন ব্যবহার হচ্ছে। এজন্যই kubectl config current-context একটা জরুরি কমান্ড: তুমি কোন ক্লাস্টারে আছো সেটা জানার একমাত্র উপায়।

আর এটাই সেই জায়গা যেখানে সবচেয়ে ভয়ংকর ভুলটা হয়। একটা স্ক্রিপ্ট যা development-এ ঠিক কাজ করে, context না বদলে production-এ চালালে সেই একই কাজ production-এ করবে। স্ক্রিপ্ট জানে না সে কোথায় আছে — kubeconfig যেখানে দেখায়, সে সেখানেই কাজ করে।

তাই একটা অভ্যাস: যেকোনো ক্লাস্টার-বদলানো স্ক্রিপ্ট চালানোর আগে kubectl config current-context দেখে নাও। এক সেকেন্ডের কাজ, আর একদিন এটা তোমাকে বাঁচাবে।

বাঁ দিকে Python স্ক্রিপ্ট থেকে kubernetes client, তার নিচে kubeconfig বা ServiceAccount, তারপর API server; ডান দিকে kubectl একই API server-এ যাচ্ছে — দুটোই সমান্তরাল পথ
Python client kubectl-কে ডাকে না, সে নিজেই API server-এ যায়। দুজনেই একই kubeconfig পড়ে, তাই দুজনে সবসময় একই ক্লাস্টার দেখে।
▶ ডেমো

শুরু করার আগে — চারটে যাচাই

হাত দেওয়ার আগে চারটে জিনিস দেখে নেওয়া দরকার, আর প্রতিটার কারণ আছে।

এক, Python আছে কি। python3 --version। তুচ্ছ শোনায়, কিন্তু অনেক server-এ python বলতে এখনো পুরনো একটা জিনিস বোঝায়।

🔒

বাকি অংশটা সাবস্ক্রাইবারদের জন্য

১১৬টি অংশের ২৪টি দেখানো হয়েছে, ৯২টি বাকি

←

আগের module

পর্ব ৫ — প্রজেক্ট: রাতে EC2 বন্ধ, সকালে চালু

পরের module

পর্ব ৭ — CI/CD: Jenkins-এর ভেতরে Python

→