AKS使用Azure Disk实现动态持久化存储(下)

Posted changruijun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AKS使用Azure Disk实现动态持久化存储(下)相关的知识,希望对你有一定的参考价值。

上一篇文章我们初步体验了AKS pod挂载Azure Disk的流程,这篇文章我们来正式部署一个mysql的服务来看下。

首先准备一个PVC,命名为mysql-pvc.yaml,内容如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-premium
  resources:
    requests:
      storage: 32Gi

 编辑后执行:

kubectl apply -f mysql-pvc.yaml

完了部署mysql, 创建mysql.yml如下:

kind: Service
apiVersion: v1
metadata:
  name: mysql
spec:
  selector:
    app: mysql
  ports:
  - port: 3306
  
---
kind: Deployment
apiVersion: apps/v1beta1
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
	  app: mysql
  template:
    metadata:
	  labels:
	    app: mysql
	spec:
      containers:
      - name: mysql
        image: mysql:5.6
        env:
	    - name: MYSQL_ROOT_PASSWORD
	      value: password
	    ports:
	    - containerPort: 3306
	      name: mysql
        volumeMounts:
        - mountPath: /var/lib/mysql
          name: volumeformysql
      volumes:
      - name: volumeformysql
        persistentVolumeClaim:
          claimName: mysql  

执行kubectl apply -f mysql.yml 后看到这个pod在node aks-agentpool-37075081-0上启动了,此时可以去portal上MC_开头的资源组里找到相应的azure 磁盘,概述中发现它是属于aks-agentpool-37075081-0这台VM。

技术图片

 然后我们创建一个mysql-client的pod,进入该pod中简单创建一个数据库,命名为test,插入一条数据:

技术图片

技术图片

 接下来我们进入portal看下这个磁盘的监控情况:

技术图片

 然后我们在MC_开头的资源组找到aks-agentpool-37075081-0这台VM,手动关机,观察pod的状态,立即查看发现之前aks-agentpool-37075081-0上的两个pod的unknow了:

技术图片

与此同时另一个pod mysql-87585fdf4-r4zkj正在创建,这就是K8S集群的特点,能监控节点的运行状况,保证服务可用。(这里之所以mysql-client没有重新创建是因为创建的时候给它的属性就是挂掉了直接删除该pod),过几分钟后我们重新查看,看到这个新的pod已经迁移到aks-agentpool-37075081-2上了:

技术图片

 执行kubectl describe pod mysql-87585fdf4-r4zkj:

技术图片

 

再回到portal上查看磁盘,看到磁盘的所属VM已经更新为aks-agentpool-37075081-2:

技术图片

 

然后去数据库里检查之前的数据是否完整:

技术图片

至此一个AKS上搭建Mysql,利用Azure Disk做持久化存储的实践就完成了。

 

以上是关于AKS使用Azure Disk实现动态持久化存储(下)的主要内容,如果未能解决你的问题,请参考以下文章

将 Azure 磁盘附加到 AKS pod 时出现权限错误

从 AKS 访问 Azure Blob 存储

AKS(Azure Kubernetes 服务)和 SQL

我们可以自动和动态地剥离一个 Kubernetes cronjob 吗?我们如何在基于队列或通知的 AWS EKS、Azure AKS 中做到这一点?

模拟 AKS 中的应用程序和 Azure 中的 PostgreSQL 服务器之间的网络延迟

azure api 网关与 AKS 502 集成 - Web 服务器在充当网关或代理服务器时收到无效响应