Multi-Node installation with YAML file
खाली मी तुम्हाला Kubernetes multi-node इंस्टॉलेशन आणि YAML आधारित डिप्लॉयमेंट मराठीत समजावून सांगतो आहे. हे तुम्ही स्वतःच तयार केलेल्या Kubernetes cluster वर वापरू शकता.
मल्टी-नोड Kubernetes क्लस्टर इंस्टॉलेशन (साधारण स्वरूप)
गरज असलेली साधने (Requirements):
- १ Master Node (Control Plane)
- १ किंवा अधिक Worker Nodes
- Ubuntu 20.04 किंवा 22.04 ऑपरेटिंग सिस्टीम
- प्रत्येक मशीनवर root/sudo access
- Internet कनेक्शन
- Swap बंद केलेला असावा
सर्व Nodes वर कॉमन सेटअप
हे सर्व आदेश (commands) प्रत्येक मशीनवर चालवा (master आणि worker):
sudo apt-get update
sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add –
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
Swap बंद करा:
sudo swapoff -a
sudo sed -i ‘/ swap / s/^/#/’ /etc/fstab
Master Node प्रारंभ (Init)
sudo kubeadm init –pod-network-cidr=192.168.0.0/16
या command नंतर एक kubeadm join कमांड दिसेल — ती Worker Nodes वर वापरण्यासाठी जतन करून ठेवा.
kubectl वापरण्यासाठी:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
नेटवर्क प्लगइन इंस्टॉल करा (Flannel)
kubectl apply -f
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Worker Nodes क्लस्टरमध्ये जोडा
Master Node वरून मिळालेली कमांड Worker Nodes वर चालवा:
sudo kubeadm join <MASTER_IP>:6443 –token <TOKEN> –discovery-token-ca-cert-hash sha256:<HASH>
📄 YAML आधारित डिप्लॉयमेंट
एक उदाहरण दाखवतो: nginx डिप्लॉयमेंट
nginx-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
– name: nginx
image: nginx:latest
ports:
– containerPort: 80
ही फाइल सेव्ह करा आणि डिप्लॉय करा:
kubectl apply -f nginx-deployment.yaml
तपासा:
kubectl get deployments
kubectl get pods
kubectl get nodes
🧾 तुम्ही पुढे काय करू शकता:
- तुम्हाला जर एखादं विशिष्ट अप्लिकेशन डिप्लॉय करायचं असेल (जसे की MySQL, WordPress, MongoDB इ.), तर मी त्याचे YAML फाइल्स तयार करून देऊ शकतो.
- तुम्ही multi-node क्लस्टर तयार झाल्यानंतर त्यावर Helm charts, Ingress controller, किंवा Persistent storage यांसारखी advanced गोष्टी देखील लागू करू शकता.
1) WordPress with MySQL हे पूर्णपणे YAML द्वारे Kubernetes क्लस्टरवर डिप्लॉय करता येते.
खाली मी एक पूर्ण YAML सेट देत आहे, ज्यामध्ये:
- MySQL साठी Persistent Volume Claim, Deployment आणि Service
- WordPress साठी Persistent Volume Claim, Deployment आणि Service
Step-by-step WordPress + MySQL YAML Files
🔹 1. MySQL Deployment
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 1Gi
—
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
– name: mysql
image: mysql:5.7
env:
– name: MYSQL_ROOT_PASSWORD
value: wordpresspass
– name: MYSQL_DATABASE
value: wordpressdb
– name: MYSQL_USER
value: wpuser
– name: MYSQL_PASSWORD
value: wppass
ports:
– containerPort: 3306
volumeMounts:
– name: mysql-storage
mountPath: /var/lib/mysql
volumes:
– name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
—
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
– port: 3306
targetPort: 3306
🔹 2. WordPress Deployment
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pvc
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 1Gi
—
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
selector:
matchLabels:
app: wordpress
replicas: 1
template:
metadata:
labels:
app: wordpress
spec:
containers:
– name: wordpress
image: wordpress:6.1
env:
– name: WORDPRESS_DB_HOST
value: mysql:3306
– name: WORDPRESS_DB_NAME
value: wordpressdb
– name: WORDPRESS_DB_USER
value: wpuser
– name: WORDPRESS_DB_PASSWORD
value: wppass
ports:
– containerPort: 80
volumeMounts:
– name: wordpress-storage
mountPath: /var/www/html
volumes:
– name: wordpress-storage
persistentVolumeClaim:
claimName: wordpress-pvc
—
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
selector:
app: wordpress
ports:
– port: 80
targetPort: 80
type: NodePort
Access Information:
- WordPress हे NodePort service द्वारे expose केलं आहे.
तुम्ही खालील command वापरून NodePort पाहू शकता:
kubectl get svc wordpress
- नंतर तुम्ही तुमच्या Kubernetes node च्या IP address वर <NodeIP>:<NodePort> द्वारे browser मध्ये WordPress access करू शकता.
2)आता मी तुम्हाला MongoDB चे पूर्ण YAML उदाहरण देतो. हे YAML उदाहरण Deployment, Persistent Volume Claim (PVC) आणि Service यांचा समावेश करतो.
MongoDB Deployment with PVC (YAML उदाहरण)
# Persistent Volume Claim for MongoDB
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodb-pvc
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 1Gi
—
# MongoDB Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
– name: mongodb
image: mongo:5.0
ports:
– containerPort: 27017
env:
– name: MONGO_INITDB_ROOT_USERNAME
value: mongoadmin
– name: MONGO_INITDB_ROOT_PASSWORD
value: mongopass
volumeMounts:
– name: mongodb-storage
mountPath: /data/db
volumes:
– name: mongodb-storage
persistentVolumeClaim:
claimName: mongodb-pvc
—
# MongoDB Service (ClusterIP)
apiVersion: v1
kind: Service
metadata:
name: mongodb
spec:
selector:
app: mongodb
ports:
– protocol: TCP
port: 27017
targetPort: 27017
type: ClusterIP
कसे वापरावे:
- वर दिलेले YAML एका फाईलमध्ये (mongodb-deployment.yaml) सेव्ह करा.
- Kubernetes मध्ये apply करा:
kubectl apply -f mongodb-deployment.yaml
🔐 MongoDB Credentials:
- Username: mongoadmin
- Password: mongopass
Kubernetes मध्ये sensitive माहिती (जसं की पासवर्ड, API keys, इत्यादी) environment variables मध्ये थेट लिहिण्याऐवजी, ती Kubernetes Secret स्वरूपात configure करणं अधिक सुरक्षित पद्धत आहे.
🔐 Secret वापरून MongoDB चे credentials सुरक्षितरीत्या सेट करणे
✅ 1. Secret YAML फाईल
apiVersion: v1
kind: Secret
metadata:
name: mongodb-secret
type: Opaque
data:
mongo-root-username: bW9uZ29hZG1pbg== # base64 encoded: mongoadmin
mongo-root-password: bW9uZ29wYXNz # base64 encoded: mongopass
👉 टीप: तुम्ही तुमचा username/password base64 मध्ये encode करण्यासाठी हे वापरू शकता:
echo -n ‘mongoadmin’ | base64
echo -n ‘mongopass’ | base64
✅ 2. Deployment मध्ये Secret वापरणं
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
– name: mongodb
image: mongo:5.0
ports:
– containerPort: 27017
env:
– name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-username
– name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-password
✅ 3. MongoDB Access (सारांश):
घटक | मूल्य |
Username | mongoadmin |
Password | mongopass |
Secret Name | mongodb-secret |
Environment vars | Secret वरून inject केले जातील |
फायदे:
- Password आणि usernames Git मध्ये commit होत नाहीत.
- Secrets नंतर kubectl edit secret mongodb-secret वापरून update करता येतात.
- Role-Based Access Control (RBAC) वापरून access control करता येतो.
Topic: 2) multi-node Kubernetes क्लस्टर तयार झाल्यानंतर, तुम्ही त्यावर Helm charts, Ingress controller, आणि Persistent storage सारख्या advanced घटक सहजपणे लागू करू शकता.
खाली प्रत्येक घटकाचे थोडक्यात स्पष्टीकरण आणि त्याला लागू करण्याची मूलभूत प्रक्रिया दिली आहे:
1. Helm Charts लागू करणे
Helm हे Kubernetes साठीचे package manager आहे, जे तुम्हाला complex applications सहजपणे deploy करण्यास मदत करते.
Helm install करण्यासाठी:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
उदाहरण: nginx चा Helm chart install करणे
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install my-nginx bitnami/nginx
2. Ingress Controller सेटअप करणे
Ingress controller HTTP/HTTPS traffic ला तुमच्या services पर्यंत नेण्यासाठी वापरला जातो.
उदाहरण: NGINX Ingress Controller install करणे
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/cloud/deploy.yaml
Ingress Resource Example:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
– host: example.com
http:
paths:
– path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
3. Persistent Storage वापरणे
Persistent storage मुळे तुमचा data pod नष्ट झाल्यानंतरही टिकून राहतो.
उदाहरण: NFS किंवा Longhorn सारखे CSI Drivers वापरू शकता.
Longhorn Install करण्यासाठी:
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.5.1/deploy/longhorn.yaml
PVC आणि PV उदा.:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: longhorn
