在Kubernetes上部署数据库时,需要使用持久性存储卷为Pod提供存储。
首先创建pv和pvc,然后再将两者绑定,Persistent Volume 和 Persistent Volume Claim,主要是管理服务持久化的存储资源 Volume
创建持久卷mysql_pv.yaml
apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv labels: type: local spec: storageClassName: localhdd capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/data/mysql"
这将创建一个持久卷,我们将使用它来附加到容器,以确保Pod重启时的数据安全。该持久卷具有ReadWriteOne访问模式,拥有20GB的存储空间,存放路径是/data/mysql,我们所有的数据都将保存在该路径中
执行创建命令创建资源
kubectl create -f mysql_pv.yaml
创建持久卷声明mysql_pvc.yaml
kind: PersistentVolumeClaim metadata: name: mysql-pvc spec: storageClassName: localhdd accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
执行创建命令创建资源
kubectl create -f mysql_pvc.yaml
然后我们在k8s集群上部署这个有状态服务mysql_service.yaml
apiVersion: v1 kind: Service metadata: name: mysql spec: type: NodePort ports: - port: 3306 targetPort: 3306 nodePort: 13306 selector: app: mysql selector: app: mysql
首先,我们在端口3306上为MySQL数据库部署服务,所有Pod均具有标签键app: mysql
接下来,创建以下资源
kubectl create -f mysql_service.yaml
然后创建mysql deployment资源mysql_deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: "password" ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pvc
kubectl create -f mysql_deploy.yaml