Kubernetes基于StatefulSet部署MySQL
Kubernetes基于StatefulSet部署MySQL1 说明1.1 环境说明2 部署MySQL单节点服务2.1 创建部署文件2.2 部署文件说明2.3 执行部署文件2.4 访问MySQL服务1 说明1.1 环境说明集群说明:本文所使用的k8s集群使用Harbor私有镜像仓库,并使用NFS持久化数据,Harbor镜像仓库的搭建过程请参考Kubernetes使用Harbor私有镜像仓库,NFS
·
Kubernetes基于StatefulSet部署MySQL
1 说明
1.1 环境说明
- 集群说明:本文所使用的k8s集群使用Harbor私有镜像仓库,并使用NFS持久化数据,Harbor镜像仓库的搭建过程请参考Kubernetes使用Harbor私有镜像仓库,NFS服务搭建的过程请参考Kubernetes基于Volume存储数据。
2 部署MySQL单节点服务
2.1 创建部署文件
- 部署文件:在K8S集群的Master节点中创建一个名称为mysql.yaml的部署文件,该文件的内容如下所示。
# mysql配置 apiVersion: v1 kind: ConfigMap metadata: name: mysql-config-map data: MYSQL_ROOT_PASSWORD: '123456' --- # 数据存储卷 apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv-data-mysql spec: capacity: storage: 1Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow nfs: server: nfs.k8s.com path: /mnt/nfs/data/mysql --- # mysql容器 apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: replicas: 1 serviceName: mysql-service selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: registry.k8s.com/k8s/mysql:5.7 imagePullPolicy: IfNotPresent ports: - name: mysql containerPort: 3306 protocol: TCP envFrom: - configMapRef: name: mysql-config-map resources: requests: cpu: 1 memory: 512Mi limits: cpu: 1 memory: 512Mi volumeMounts: - name: mysql-data mountPath: /var/lib/mysql imagePullSecrets: - name: k8s-auth volumeClaimTemplates: - metadata: name: mysql-data spec: accessModes: ["ReadWriteOnce"] volumeMode: Filesystem resources: requests: storage: 1Gi storageClassName: slow --- # 内部访问的无头服务 apiVersion: v1 kind: Service metadata: name: mysql-service spec: selector: app: mysql ports: - name: mysql port: 3306 clusterIP: None --- # 外部访问的服务 apiVersion: v1 kind: Service metadata: name: mysql-external-service spec: selector: app: mysql ports: - name: mysql protocol: TCP port: 3306 targetPort: 3306 nodePort: 30001 type: NodePort
2.2 部署文件说明
- 配置:创建的名称为mysql-config-map的ConfigMap中仅仅指定了MySQL的登录密码为123456,MySQL的登录名称默认为root。
- 存储卷:创建的名称为nfs-pv-data-mysql的PersistentVolume中申明了一个容量为1G,且访问权限为ReadWriteOnce的存储卷,该存储卷对应的目录是域名为nfs.k8s.com这个NFS服务器中的/mnt/nfs/data/mysql目录。
- 容器:MySQL服务是有状态的,所以需要创建StatefulSet类型的MySQL服务,创建的名称为mysql的容器,把名称为mysql-config-map的配置中的所有配置项都作为环境变量,并把名称为nfs-pv-data-mysql存储卷挂载到容器内部的/var/lib/mysql目录。
- 服务:创建的名称为mysql-service的Service是一个无头服务,K8S集群内部的其它容器需要通过无头服务才能访问到MySQL服务;创建的名称为mysql-external-service的Service是一个普通服务,该服务把节点的30001端口映射到容器的3306端口,在K8S集群外部访问节点的30001端口即可访问MySQL服务,如果不需要从K8S集群外部访问MySQL服务,则不需要创建该服务。
2.3 执行部署文件
-
执行部署:在K8S集群的Master节点中,执行以下命令即可使用上述部署文件部署MySQL单节点服务并查看部署的结果,执行结果如下图所示,从部署结果可看,创建的MySQL服务是在K8S集群中的k8s-worker-2节点上。
# 执行部署 kubectl apply -f mysql.yaml # 查看结果 kubectl get pods -o wide
2.4 访问MySQL服务
- 访问服务:由于部署的MySQL服务是在K8S集群中的k8s-worker-2节点上,而该节点的IP地址为192.168.14.105,所以可以在集群外部使用MySQL客户端工具通过IP地址192.168.14.105、端口号30001,用户名root,密码123456来访问,本文中使用的是MySQL官方客户端工具MySQL Workbench来访问,结果如下图所示,可知部署的MySQL服务是正常可访问的。
更多推荐
已为社区贡献1条内容
所有评论(0)