কুবারনেটিস (K8s)
কুবারনেটিস (Kubernetes, সংক্ষেপে K8s) হলো একটি ওপেন-সোর্স প্ল্যাটফর্ম যা কনটেইনারাইজড অ্যাপ্লিকেশনের স্বয়ংক্রিয় ডিপ্লয়মেন্ট, স্কেলিং এবং ম্যানেজমেন্টের জন্য ব্যবহৃত হয়। এই চিটশিটে K8s-এর সব মৌলিক থেকে উন্নত ধারণা, কমান্ড, এবং ব্যবহারিক উদাহরণ বিস্তারিতভাবে কভার করা হয়েছে।
১. কুবারনেটিস পরিচিতি
১.১ মৌলিক ধারণা
- কনটেইনার: অ্যাপ্লিকেশন এবং এর ডিপেন্ডেন্সি প্যাকেজ।
- পড: K8s-এর ক্ষুদ্রতম ইউনিট, এক বা একাধিক কনটেইনার।
- ক্লাস্টার: মাস্টার এবং ওয়ার্কার নোডের সমষ্টি।
- কন্ট্রোল প্লেন: ক্লাস্টার পরিচালনার জন্য মাস্টার নোড।
- কুবেক্টল (kubectl): K8s কমান্ড-লাইন টুল।
১.২ ইনস্টলেশন ও সেটআপ
- Minikube (লোকাল টেস্টিং):
- kubectl:
- চেক করুন:
২. কুবারনেটিস কম্পোনেন্ট
২.১ মাস্টার নোড (কন্ট্রোল প্লেন)
কম্পোনেন্ট | বর্ণনা |
---|---|
API Server | K8s-এর ফ্রন্ট-এন্ড, সব কমান্ড এখানে যায়। |
etcd | ক্লাস্টারের ডেটা স্টোর (key-value)। |
Scheduler | পডগুলোকে নোডে বরাদ্দ করে। |
Controller Manager | ক্লাস্টারের অবস্থা নিয়ন্ত্রণ করে। |
২.২ ওয়ার্কার নোড
কম্পোনেন্ট | বর্ণনা |
---|---|
Kubelet | নোডে পড চালায় এবং মনিটর করে। |
Kube-Proxy | নেটওয়ার্ক প্রক্সি, সার্ভিস রাউটিং করে। |
Container Runtime | কনটেইনার চালানোর জন্য (Docker, containerd)। |
৩. মৌলিক কমান্ড (kubectl)
৩.১ ক্লাস্টার তথ্য
কমান্ড | বর্ণনা | উদাহরণ |
---|---|---|
kubectl cluster-info | ক্লাস্টারের তথ্য। | kubectl cluster-info |
kubectl get nodes | নোডের তালিকা। | kubectl get nodes -o wide |
kubectl version | K8s সংস্করণ। | kubectl version |
৩.২ পড ম্যানেজমেন্ট
কমান্ড | বর্ণনা | উদাহরণ |
---|---|---|
kubectl get pods | পডের তালিকা। | kubectl get pods -n my-ns |
kubectl create | পড তৈরি। | kubectl create pod mypod --image=nginx |
kubectl describe pod | পডের বিস্তারিত। | kubectl describe pod mypod |
kubectl delete pod | পড মুছে ফেলা। | kubectl delete pod mypod |
kubectl logs | পডের লগ। | kubectl logs mypod |
kubectl exec | পডে কমান্ড চালানো। | kubectl exec -it mypod -- bash |
উদাহরণ:
৩.৩ ডিপ্লয়মেন্ট
কমান্ড | বর্ণনা | উদাহরণ |
---|---|---|
kubectl get deployments | ডিপ্লয়মেন্ট তালিকা। | kubectl get deployments |
kubectl create deployment | ডিপ্লয়মেন্ট তৈরি। | kubectl create deployment myapp --image=nginx |
kubectl scale | পড সংখ্যা বাড়ানো/কমানো। | kubectl scale deployment myapp --replicas=3 |
kubectl rollout | রোলআউট স্ট্যাটাস/আপডেট। | kubectl rollout status deployment/myapp |
৩.৪ সার্ভিস
কমান্ড | বর্ণনা | উদাহরণ |
---|---|---|
kubectl get services | সার্ভিস তালিকা। | kubectl get svc |
kubectl expose | সার্ভিস তৈরি। | kubectl expose deployment myapp --port=80 --type=LoadBalancer |
kubectl delete service | সার্ভিস মুছে ফেলা। | kubectl delete svc myapp |
৪. YAML ফাইল (ম্যানিফেস্ট)
৪.১ পড YAML
pod.yaml
:
- প্রয়োগ:
৪.২ ডিপ্লয়মেন্ট YAML
deployment.yaml
:
- প্রয়োগ:
৪.৩ সার্ভিস YAML
service.yaml
:
- প্রয়োগ:
৫. নেমস্পেস
কমান্ড | বর্ণনা | উদাহরণ |
---|---|---|
kubectl get namespaces | নেমস্পেস তালিকা। | kubectl get ns |
kubectl create namespace | নতুন নেমস্পেস। | kubectl create ns my-ns |
kubectl config set-context | নেমস্পেস সেট। | kubectl config set-context --current --namespace=my-ns |
উদাহরণ:
৬. স্টোরেজ
৬.১ পার্সিস্টেন্ট ভলিউম (PV)
pv.yaml
:
৬.২ পার্সিস্টেন্ট ভলিউম ক্লেইম (PVC)
pvc.yaml
:
৬.৩ পডে PVC ব্যবহার
pod-with-pvc.yaml
:
- প্রয়োগ:
৭. নেটওয়ার্কিং
৭.১ সার্ভিস টাইপ
টাইপ | বর্ণনা |
---|---|
ClusterIP | ডিফল্ট, ক্লাস্টার-অভ্যন্তরীণ অ্যাক্সেস। |
NodePort | নোডের পোর্টে অ্যাক্সেস। |
LoadBalancer | ক্লাউডে এক্সটার্নাল IP। |
ExternalName | বাইরের সার্ভিসের ম্যাপিং। |
৭.২ ইনগ্রেস
ingress.yaml
:
- প্রয়োগ:
৮. কনফিগারেশন এবং সিক্রেট
৮.১ ConfigMap
configmap.yaml
:
- পডে ব্যবহার:
৮.২ Secret
secret.yaml
:
- পডে ব্যবহার:
- তৈরি:
৯. রিসোর্স ম্যানেজমেন্ট
৯.১ রিসোর্স লিমিট এবং রিকোয়েস্ট
resource.yaml
:
৯.২ Horizontal Pod Autoscaler (HPA)
hpa.yaml
:
- প্রয়োগ:
১০. মনিটরিং এবং লগিং
১০.১ মেট্রিক্স
- Metrics Server:
১০.২ লগিং
১১. সিকিউরিটি
১১.১ Role-Based Access Control (RBAC)
role.yaml
:
rolebinding.yaml
:
- প্রয়োগ:
১১.২ Network Policy
network-policy.yaml
:
১২. ক্লাস্টার ম্যানেজমেন্ট
১২.১ নোড ম্যানেজমেন্ট
কমান্ড | বর্ণনা | উদাহরণ |
---|---|---|
kubectl cordon | নোডে নতুন পড বরাদ্দ বন্ধ। | kubectl cordon node1 |
kubectl uncordon | নোডে পড বরাদ্দ চালু। | kubectl uncordon node1 |
kubectl drain | নোড থেকে পড সরানো। | kubectl drain node1 --ignore-daemonsets |
১২.২ ক্লাস্টার আপগ্রেড
১৩. CI/CD ইন্টিগ্রেশন
১৩.১ GitHub Actions
.github/workflows/deploy.yaml
:
১৪. উদাহরণ: একটি সম্পূর্ণ অ্যাপ্লিকেশন
১৪.১ ডিপ্লয়মেন্ট
app-deployment.yaml
:
১৪.২ সার্ভিস
app-service.yaml
:
১৪.৩ ইনগ্রেস
app-ingress.yaml
:
১৪.৪ প্রয়োগ
১৫. টিপস এবং সেরা অভ্যাস
- লেবেল ব্যবহার: সব রিসোর্সে লেবেল যোগ করুন।
- নেমস্পেস: প্রজেক্ট আলাদা করতে নেমস্পেস ব্যবহার করুন।
- রিসোর্স লিমিট: ওভারলোডিং প্রতিরোধে লিমিট সেট করুন।
- লগিং/মনিটরিং: Prometheus এবং Grafana ইন্টিগ্রেট করুন।