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

कसे वापरावे:

  1. वर दिलेले YAML एका फाईलमध्ये (mongodb-deployment.yaml) सेव्ह करा.
  2. 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