Kubernates notes 4 Types of YAML files in k8s

1. Deployment YAML

Deployment ka kaam hota hai ki pods create kare aur unka management kare (replica, rolling updates, etc.).

Example:

apiVersion: apps/v1       # Resource ka version
kind: Deployment          # Resource ka type
metadata:                 # Metadata section
  name: myapp-deployment  # Deployment ka naam
  labels:                 # Labels help karte hain resources ko group karne me
    app: myapp
spec:                     # Specification section
  replicas: 3             # Kitne pods chalane hain
  selector:               # Define karte hain ki kaunsa pod is deployment ka part hai
    matchLabels:
      app: myapp
  template:               # Pods ka template define hota hai
    metadata:
      labels:             # Har pod ka label
        app: myapp
    spec:
      containers:         # Container ka definition
      - name: myapp       # Container ka naam
        image: myapp:v1   # Kaunsa Docker image use hoga
        ports:
        - containerPort: 3000  # App ka port

Key Points:

  1. replicas: Kitne pods deploy karne hain.
  2. template: Pods ka template define karta hai.
  3. selector: Ensure karta hai ki ye deployment kaunsa pod manage karega.

2. Service YAML

Service ka kaam hota hai ki pods ke upar network traffic ko manage kare.

Example:

apiVersion: v1           # Service ka version
kind: Service            # Resource ka type
metadata:
  name: myapp-service    # Service ka naam
spec:
  selector:              # Kaunse pods is service ka part hain
    app: myapp
  ports:                 # Service ke ports define karte hain
  - protocol: TCP
    port: 80             # Service ka port (external)
    targetPort: 3000     # Pod ke andar ka port
  type: LoadBalancer     # Service ka type

Key Points:

  1. selector: Ye service kaunse pods ko target karegi.
  2. type:
    • ClusterIP (default): Sirf cluster ke andar access milega.
    • NodePort: External traffic ke liye specific port open karega.
    • LoadBalancer: Public-facing service ke liye.

3. ConfigMap YAML

ConfigMap ka kaam hota hai ki non-sensitive configuration ko store kare (e.g., environment variables).

Example:

apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config     # ConfigMap ka naam
data:                    # Configurations store hoti hain yaha
  DATABASE_URL: mysql://db-user@db-host/mydb
  APP_MODE: production

Use in Deployment:

containers:
- name: myapp
  image: myapp:v1
  env:
  - name: DATABASE_URL
    valueFrom:
      configMapKeyRef:
        name: myapp-config
        key: DATABASE_URL

Key Points:

  • ConfigMap ko data section me store karte hain.
  • Deployment ke env section me isse use karte hain.

4. Secret YAML

Secret ka kaam hota hai ki sensitive data (e.g., passwords, tokens) ko securely store kare.

Example:

apiVersion: v1
kind: Secret
metadata:
  name: myapp-secret     # Secret ka naam
type: Opaque             # Default type
data:                    # Base64 encoded data
  DB_PASSWORD: bXlwYXNzd29yZA==   # "mypassword" ka Base64

Use in Deployment:

containers:
- name: myapp
  image: myapp:v1
  env:
  - name: DB_PASSWORD
    valueFrom:
      secretKeyRef:
        name: myapp-secret
        key: DB_PASSWORD

Key Points:

  • Secret ko Base64 me encode karte hain.
    Encode karne ka command:

    echo -n "mypassword" | base64
    

5. Ingress YAML

Ingress ka kaam hota hai ki external HTTP/HTTPS traffic ko route karna.

Example:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

Key Points:

  1. host: Define karta hai ki kaunsa domain is ingress ko target karega.
  2. backend: Service ka naam aur port jaha traffic route hoga.
  3. Ingress ke liye external ingress controller chahiye hota hai (e.g., NGINX Ingress Controller).

6. Persistent Volume (PV) & Persistent Volume Claim (PVC) YAML

PV aur PVC ka kaam hota hai ki storage allocate karna.

Persistent Volume (PV) Example:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: myapp-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  hostPath:
    path: /data/myapp

Persistent Volume Claim (PVC) Example:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myapp-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Use in Deployment:

containers:
- name: myapp
  image: myapp:v1
  volumeMounts:
  - mountPath: /app/data
    name: myapp-storage
volumes:
- name: myapp-storage
  persistentVolumeClaim:
    claimName: myapp-pvc

Key Points:

  1. PV defines the actual storage.
  2. PVC requests storage from PV.

7. Horizontal Pod Autoscaler (HPA) YAML

HPA ka kaam hota hai ki pods ka auto-scaling manage karna.

Example:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

Key Points:

  1. scaleTargetRef: Kaunsa deployment scale karna hai.
  2. minReplicas aur maxReplicas: Minimum aur maximum pods.
  3. Metrics ke basis pe scaling hoti hai (e.g., CPU usage).

Summary

YAML file types and their purpose:

  1. Deployment YAML: Pods create aur manage karne ke liye.
  2. Service YAML: Pods ke upar network traffic route karne ke liye.
  3. ConfigMap YAML: Non-sensitive configuration store karne ke liye.
  4. Secret YAML: Sensitive data securely store karne ke liye.
  5. Ingress YAML: External HTTP/HTTPS traffic route karne ke liye.
  6. PV & PVC YAML: Persistent storage allocate karne ke liye.
  7. HPA YAML: Pods ka auto-scaling manage karne ke liye.

Aur bhai, agar koi YAML samajhne me dikkat ho rahi hai, to bata!