About Me

My photo
I am an MCSE in Data Management and Analytics, specializing in MS SQL Server, and an MCP in Azure. With over 19+ years of experience in the IT industry, I bring expertise in data management, Azure Cloud, Data Center Migration, Infrastructure Architecture planning, as well as Virtualization and automation. I have a deep passion for driving innovation through infrastructure automation, particularly using Terraform for efficient provisioning. If you're looking for guidance on automating your infrastructure or have questions about Azure, SQL Server, or cloud migration, feel free to reach out. I often write to capture my own experiences and insights for future reference, but I hope that sharing these experiences through my blog will help others on their journey as well. Thank you for reading!

Multicontainer pod with volume of emptytype Vs one pod with multiple PVC attached.

 kushagrarakesh/multicontainers-empdir.yaml at main · kushagrarakesh/kushagrarakesh (github.com)

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: busybox
  name: multicontainer-empdir
spec:
  volumes:
  - name: var-logs
    emptyDir: {}
  containers:
  - image: busybox
    name: busybox1
    args:
    - bin/sh
    - -c
    - ls; sleep 3600
    volumeMounts:
    - name: var-logs
      mountPath: /usr/share/nginx/htm        
    resources: {}
  - image: alpine:latest
    name: alpine
    args:
    - bin/sh
    - -c
    - ls; sleep 3600
    volumeMounts:
    - name: var-logs
      mountPath: /usr/share/nginx/htm        
    resources: {}
  - image: nginx:latest
    name: nginx
    args:
    - bin/sh
    - -c
    - ls; sleep 3600
    volumeMounts:
    - name: var-logs
      mountPath: /usr/share/nginx/htm         
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}


use cases:- 


PS C:\Users\kusha\chap5> kubectl exec  -it  multicontainer-empdir -c nginx   -- sh 

W1028 11:23:05.759993    6300 azure.go:92] WARNING: the azure auth plugin is deprecated in v1.22+, unavailable in v1.26+; use https://github.com/Azure/kubelogin instead.

To learn more, consult https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins

# cd /usr/share/nginx/htm

# pwd

/usr/share/nginx/htm

#

This script is setting up a deployment for a SQL Server instance in a Kubernetes cluster with persistent storage using Azure Disk.

The script defines a StorageClass named azure-disk which will provision Azure disks for the Kubernetes cluster. Two PersistentVolumeClaims (PVCs) are defined, one for the mssql data folder and another for the mssql log folder. 

Each PVC specifies that it will use the azure-disk StorageClass and requests a specific amount of storage.

The Deployment definition includes two volume mounts, one for the mssql data folder and one for the mssql log folder. The mssqldb volume mount is mapped to the mssql-data PVC and the mssqllog volume mount is mapped to the mssql-log PVC. The SQL Server container in the deployment will have access to both of these volume mounts.

A Service is defined to expose the SQL Server deployment on port 1433 using a LoadBalancer type service. Finally, a Secret named mssql is defined that contains the SQL Server SA password encoded in base64.

---

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
     name: azure-disk
provisioner: kubernetes.io/azure-disk
parameters:
  storageaccounttype: Standard_LRS
  kind: Managed
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mssql-data
  annotations:
    volume.beta.kubernetes.io/storage-class: azure-disk
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mssql-log
  annotations:
    volume.beta.kubernetes.io/storage-class: azure-disk
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mssql-deployment
spec:
  replicas: 1
  selector:
     matchLabels:
       app: mssql
  template:
    metadata:
      labels:
        app: mssql
    spec:
      terminationGracePeriodSeconds: 30
      hostname: mssqlinst
      securityContext:
        fsGroup: 10001
      containers:
      - name: mssql
        image: mcr.microsoft.com/mssql/server:2019-latest
        resources:
          requests:
            memory: "2G"
            cpu: "2000m"
          limits:
            memory: "2G"
            cpu: "2000m"
        ports:
        - containerPort: 1433
        env:
        - name: MSSQL_PID
          value: "Developer"
        - name: ACCEPT_EULA
          value: "Y"
        - name: MSSQL_SA_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mssql
              key: MSSQL_SA_PASSWORD
        volumeMounts:
        - name: mssqldb
          mountPath: /var/opt/mssqldata
        - name: mssqllog
          mountPath: /var/opt/mssqllog          
      volumes:
      - name: mssqldb
        persistentVolumeClaim:
          claimName: mssql-data
      - name: mssqllog
        persistentVolumeClaim:
          claimName: mssql-log          

---
apiVersion: v1
kind: Service
metadata:
  name: mssql-deployment
spec:
  selector:
    app: mssql
  ports:
    - protocol: TCP
      port: 1433
      targetPort: 1433
  type: LoadBalancer
---
apiVersion: v1
data:
  MSSQL_SA_PASSWORD: TXlDMG05bCZ4UEBzc3cwcmQ=
kind: Secret
metadata:
  creationTimestamp: null
  name: mssql


Verify the services are running. Run the following command:

Use Case :- 

get the service Ip address 

kubectl get services 

C:\Users\kusha>kubectl get services

NAME                                             TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE

mssql-deployment                                 LoadBalancer   10.0.130.195   20.85.151.114   1433:30264/TCP               66m


You can use the following applications to connect to the SQL Server instance.


  • SQL Server Managed Studio (SSMS)
  • SQL Server Data Tools (SSDT)
  • Azure Data Studio
  • Connect with sqlcmd

To connect with sqlcmd, run the following command:

Windows Command Prompt

sqlcmd -S  20.85.151.114  -U sa -P "MyC0m9l&xP@ssw0rd"

Replace the following values:

<External IP Address> with the IP address for the mssql-deployment service

MyC0m9l&xP@ssw0rd with your complex password

No comments: