Azure Disk tips for Kubernetes
When I need a Persistent Volume Claim, I always use AzureDisk. However, it was complicated.
Before creating a persistent volume claim, I needed to create Storage Account and upload VHD on it.
But there is a good way to create a persistent volume using AzureDisk without creating Storage Account in Advance. Until Now, there is not mentioned on the official website. The document is for v1. I share it on this blog post.
1. Create a Storage Class
Let's create a storage class. Please use storage.k8s.io/v1beta1. You can see the spec in here
https://github.com/kubernetes/kubernetes/blob/master/docs/api-reference/storage.k8s.io/v1beta1/definitions.html
Also, you need to use the same location as your k8s cluster.
kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
name: slow
provisioner: kubernetes.io/azure-disk
parameters:
skuName: Standard_LRS
location: japaneast
2. Persistent volume claim
You need to add the annotation to the Persistent Volume Claim definition. You don't need to specify storageClassName on spec. I guess this notation might be changed after releasing k8s 1.6 on Azure.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
annotations:
volume.beta.kubernetes.io/storage-class: slow
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
3. Create a pod
Now we have no secret for creating a pod using the Azure disk. Enjoy.
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: mysql
labels:
app: wordpress
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
tier: mysql
spec:
containers:
- name: mysql
image: mysql:5.6
ports:
- containerPort: 3306
protocol: TCP
name: mysql
volumeMounts:
- mountPath: /var/lib/mysql
name: mysqlvolume
env:
- name: "MYSQL_ROOT_PASSWORD"
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
- name: "MYSQL_DATABASE"
value: "sample"
- name: "MYSQL_USER"
value: "mysql"
- name: "MYSQL_PASSWORD"
valueFrom:
secretKeyRef:
name: mysql-pass
key: password
volumes:
- name: mysqlvolume
persistentVolumeClaim:
claimName: mysql-pv