Issue with persistent storage in Azure Kubernetes Service using Azure Disk - azure

Not able to set up persistent volume using Azure disk
We are trying to deploy an application on AKS and the application is to use persistent volume. If we use Azure disk, we have noticed if the node having the pod running the application container is stopped / not working , another pod from another node is spinned up but it is no longer accessing the persistent volume.
As per documentation ,azure disk is mapped to a particular node and file share is shared across nodes. What is the way to ensure that a application running on AKS using persistent volume is not lost if a pod/node does not work ?
We are looking for a solution with regard to persistent storage so that an application with 3 pods as a replica set can use an Azure disk persistent volume in AKS.

The Azure disk to work as the persistent storage volume in AKS, it should associates to the actual node, so it cannot share the files between multiple pods. So if you want to share files and persist files between pods whenever the pods in any node, the Azure File Share is a good way for you.
Finally, all of all, if you have multiple nodes and the deployment has 3 replicas. Then the best way to share and persist data between pods is using the Azure File Share or the NFS.

Related

How to attach a disk in Kubernetes cluster in azure (AKS)

I have deployed my running application in AKS. I want to add new disk (Harddisk of 30GB) but I don't know how to do it.
I want to attach 3 disks.
Here is details of AKS:
Node size: Standard_DS2_v2
Node pools: 1 node pool
Storage is:
default (default) kubernetes.io/azure-disk Delete WaitForFirstConsumer true
Please, tell me how to add it.
Based on Kubernetes documentation:
A PersistentVolume (PV) is a piece of storage in the cluster that has been provisioned by an administrator or dynamically provisioned using Storage Classes.
It is a resource in the cluster just like a node is a cluster resource. PVs are volume plugins like Volumes, but have a lifecycle independent of any individual Pod that uses the PV.
In the Azure documentation one can find clear guides how to:
create a static volume using Azure Disks
create a static volume using Azure Files
create a dynamic volume using Azure Disks
create a dynamic volume using Azure Files
NOTE:
Before you begin you should have existing AKS cluster and Azure CLI version 2.0.59 or later installed and configured. To check your version run:
az --version
See also this documentation.
A persistent volume represents a piece of storage that has been provisioned for use with Kubernetes pods. A persistent volume can be used by one or many pods, and can be dynamically or statically provisioned.
This article shows you how to dynamically create persistent volumes with Azure disks for use by a single pod in an Azure Kubernetes Service (AKS) cluster.
But if your requirement is to share the persistent volume across the multiple nodes use Azure FileShare
This article shows you how to dynamically create an Azure Files share for use by multiple pods in an Azure Kubernetes Service (AKS) cluster.

How to transfer docker volumes to kubernetes volumes in azure?

I'm trying to apply kubernetes on one of my applications, and my app is using docker volumes and saves data in there.
When I'm applying the kubernetes on that app it won't save any data from the docker volumes obviously and it just needs kubernetes volumes, thing is, I have my data inside the docker volumes and I need to transfer it to a kubernetes volume, and all that is running in azure and since kubernetes interfaces with azure I figured there should be a way to automate this only I couldn't find how to do that.
If someone can help with this ill be very thankful.
To transfer the data in the docker volume to Azure Kubernetes volumes, the way I can think of is that transfer the data in the docker volumes to Azure file share, and then mount the file share to the Kubernetes volumes.
The best way is that mount the Azure file share to the machine where the docker server in at the beginning, and then create the volumes in the mount path and use the volumes for your application in the docker. When you deploy the application in Azure Kubernetes, mount the file share to its volumes.
I do not think there are the interfaces in Azure Kubernetes to automate transfer the data from docker volumes to AKS volumes.
When I'm applying the kubernetes on that app it won't save any data
from the docker volumes obviously and it just needs kubernetes volumes.
This is not fully true, as #Charles Xu mentioned, as long as your Docker containers use 'Azure File Storage' backed Volumes, you can seamlessly mount the same data volumes (Azure File Storage) as a Persistence Volumes in Azure Kubernetes Service (one of two types of data storage supported by AKS).
Taking into account you are running currently your Docker containers on-premise environment, use can use Docker Volume Driver for Azure File Storage to start pushing your data to Azure (check demo here), or for Swarm Cluster in Azure use Cloudstor.
According to the kubernetes documentation:
https://kubernetes.io/docs/concepts/storage/volumes/
Docker volumes and Kubernetes volumes are different and work differently.
When you create your PVC or it is dynamically created for you, mount it into your pod and copy the data into it using:
kubectl cp
Your app will automatically start storing data in the volume.
Docker volumes are just directories on disk and you can't simply map them to the Kubernetes volume

Azure disk replication across VMs

In Azure, is it possible to have master VM that writes to a disk which has read-only slave replicas on other VMs?
Our app needs to download ~100GB of files when scaling to a new VM. This is loaded slowly from an external provider but we want to make it available quickly when we scale out more VMs.
I don't think you can do streaming replication (which I think is what you're asking for), or read only slave through the Azure service without implementing this yourself over network or through a relational database management system.
As of this writing, one disk cannot be connected to multiple Azure VMs (See FAQ for Managed Disks. One option would be to create a snapshot of the disk, and create a new disk from the snapshot. You could automate this via the Azure Managed Disk Service API (eg: an Azure Powershell script), and it would have to happen on a VM that isn't running.
If your data is same and doesn't change per new VM created then you can have it stored on the Azure File Storage Standard/ Premium. Then have Azure File storage attached to every new VM whenever it is created. snapshot disk will make it pretty complex. Azure Files Storage is good choice in this scenario.

Maintaining replicated database in kubernetes

I have replicated cassandra database and would like to know the best way to maintain its data.
Currently im using kubernetes emptyDir for cassandra container volume.
Can i use google's Persistent disks for replicated cassandra db pods?
If i have 3 cassandra nodes and one of them fails / destroyed what happens to the google's Persistent disks data?
If all 3 nodes fail, will i still be able to populate db data from google's persistant disks to new pods that spins up?
How to backup db's data which is in google's persistent disks?
I will answer your questions in the same order:
1: You can use Google's persistent disks for the master Cassandra node and then all the other cassandra replicas will just use their local emptyDir.
2: When deploying to the cloud, the expectation is that instances are ephemeral and might die at any time. Cassandra is built to replicate data across the cluster to facilitate data redundancy, so that in the case that an instance dies, the data stored on the instance does not, and the cluster can react by re-replicating the data to other running nodes. You can use DaemonSet to place a single pod on each node in the Kubernetes cluster which will give u data redundancy.
Is it possible to provide more information here? how the new pods will spin up?
Taking a snapshot of the disk, or use epmtyDir with a sidecar container in order to periodically snapshot the directory and upload it to Google Cloud Storage.

Attaching external disk on kubernetes pod in azure

I want to attach an external disk to kubernetes pod in azure environment. According to documentation here https://github.com/kubernetes/kubernetes/tree/release-1.2/examples/azure_file it uses azure file system.
What if I want to use the OS disks (external disks) like we have in gcloud environment ?
The Azure volumes piece was merged: https://github.com/kubernetes/kubernetes/blob/release-1.2/examples/azure_file/README.md

Resources