前言:
现在我们对“mysql模板”可能比较看重,我们都想要了解一些“mysql模板”的相关文章。那么小编也在网络上搜集了一些有关“mysql模板””的相关知识,希望咱们能喜欢,兄弟们快快来了解一下吧!每天一点K8s知识!
在我之前的文章中,我向您展示了如何动态使用 AWS EFS 作为您的应用程序持久存储,“ K8s — 使用 AWS EFS 作为持久卷”。在本文中,让我们实际部署一个常见的有状态应用程序并模拟节点故障。
此MySQL应用程序部署演示了如何为MySQL数据库提供持久存储。步骤是:
为. PersistentVolumeClaim_MySQL部署MySQL(部署和服务)。将数据添加到MySQL.模拟一个节点故障,K8s 自动迁移MySQL到其他节点。验证数据一致性。先决条件安装了 AWS EFS CSI 驱动程序的 K8s 集群即用型 AWS EFS 文件系统
您可以按照我在此处的说明了解如何配置 AWS EFS CSI 驱动程序。
创建存储类
要动态创建持久卷,您需要先定义一个StorageClass。在示例 YAML 文件下方:
# storage_class.yml种类:StorageClass apiVersion:storage.k8s.io/v1元数据: 名称:efs-sc provisioner:efs.csi.aws.com参数: provisioningMode:efs-ap fileSystemId:fs-09dabf86bedf2b332 directoryPerms:“700” gidRangeStart : "1000" # 可选 gidRangeEnd: "2000" # 可选 basePath: "/dynamic_provisioning" # 可选
创建上述StorageClass
$ kubectl 创建 -f storage_class.yml$ kubectl get storageclass kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEPANSION AGE efs-sc efs.csi.aws.com Delete Immediate false 40m gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 91m为 MySQL 创建 PVC
MySQLYAML 文件的 PVC如下所示:
# mysql-pvc.ymlapiVersion:v1种类:PersistentVolumeClaim元数据: 名称:mysql-pvc规范: accessModes:-ReadWriteMany storageClassName : efs-sc 资源: 请求: 存储:5Gi
创建 PVC:
$ kubectl create -f mysql-pvc.yml persistentvolumeclaim/mysql-pvc created$ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mysql-pvc Bound pvc-8f91e720-0a5a-436e-98cd-4471b0e7e099 5Gi RWX efs-sc 3s部署 MySQL 应用
现在,让我们部署MySQL应用程序,YAML 定义如下:
# mysql-deployment.ymlapiVersion:apps/v1种类:部署元数据: 名称:mysql规格: 副本:1 选择器: matchLabels: app:mysql 模板: 元数据: 标签: app:mysql 规格: 容器: -名称:mysql 图像:mysql:5.7 securityContext: runAsUser :1000 allowPrivilegeEscalation:false env: -名称:MYSQL_ROOT_PASSWORD 值:密码 端口: -containerPort :3306 名称:mysql volumeMounts: -名称:mysql-persistent-storage mountPath:/var/lib/mysql 卷: -名称:mysql-persistent-storage persistentVolumeClaim: claimName:mysql-pvc
部署它:
$ kubectl create -f mysql-deployment.yml deployment.apps/mysql created$ kubectl get po NAME READY STATUS RESTARTS AGE mysql-5c4c8b7c65-fbx22 1/1 Running 0 7s$ kubectl 记录 mysql-5c4c8b7c65-fbx222022-05-22 20:54:51+00:00 [注意] [入口点]: MySQL 服务器 5.7.38-1debian10 的入口点脚本已启动。2022-05-22 20:54:51+00:00 [Note] [Entrypoint]:初始化数据库文件... 2022-05-22T20:55:07.862958Z 0 [Note] 事件调度程序:加载 0 个事件2022-05 -22T20:55:07.863250Z 0 [注意] mysqld:准备连接。版本:'5.7.38' 套接字:'/var/run/mysqld/mysqld.sock' 端口:3306 MySQL 社区服务器(GPL)
请注意,如果遇到chown: changing ownership of ‘/var/lib/mysql/’: Operation not permitted问题,您需要securityContext为您的容器配置:
安全上下文: runAsUser:1000 allowPrivilegeEscalation:假
ID来自runAsUserEFS 配置,您可以从 AWS EFS 控制台获取它:
部署 MySQL 服务
该mysql-service.yml文件如下所示:
apiVersion:v1种类:服务元数据: 名称:mysql规格: 端口: - 端口:3306 选择器: 应用程序:mysql
并部署它:
$ kubectl create -f mysql-service.yml服务/mysql 创建模拟节点故障
现在MySQL部署到节点ip-192–168–79–130.us-east-2.compute.internal,我们可以MySQL通过客户端访问服务mysql:
$ kubectl run -it --rm --image=mysql:5.7 --restart=Never mysql-client -- mysql -h mysql -ppassword如果您没有看到命令提示符,请尝试按 Enter。mysql>
让我们更新数据库并添加一些数据:
mysql> 使用 mysql读取表信息以补全表名和列名可以使用 -A 关闭此功能以获得更快的启动数据库更改mysql> create table my_id( id int(4) ); 查询正常,0 行受影响(0.09 秒)mysql> 插入 my_id 值(111);查询正常,1 行受影响(0.01 秒)mysql> select * from my_id -> ; +--------+ | 编号 | +--------+ | 111 | +-----+ 1 行(0.00 秒)mysql>退出;再见pod “mysql-client” 已删除
现在让我们关闭 node ip-192–168–79–130.us-east-2.compute.internal,您可以看到 K8s 自动MySQL在另一个节点上启动了一个新 pod 并将数据迁移到新实例:
$ kubectl get po -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mysql-5c4c8b7c65-fbx22 1/1 Terminating 0 4m53s 192.168.85.201 ip-192-168-79-130.us-east-2.compute.internal <none> <none> mysql-5c4c8b7c65-rrchb 1/1 Running 0 32s 192.168.53.130 ip-192-168-51-116.us-east-2.compute.internal <none> <none> mysql-client 0/ 1 终止 0 49s <none> ip-192-168-79-130.us-east-2.compute.internal <none> <none>
几秒钟后,新MySQLPod 启动并在新节点上运行ip-192–168–51–116.us-east-2.compute.internal:
$ kubectl get po -owide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES mysql-5c4c8b7c65-rrchb 1/1 Running 0 4m54s 192.168.53.130 ip-192-168-51-116.us-east-2.compute.internal <无> <无>
让我们验证数据,连接到MySQL服务器:
$ kubectl run -it --rm --image=mysql:5.7 --restart=从不 mysql-client -- mysql -h mysql -ppassword
并运行select * from my_id;SQL 命令:
可以看到数据是一致的。至此,MySQL服务从节点故障中成功恢复。
标签: #mysql模板