k8s是一个高效的容器编排工具,现在最新版本是k8s1.10。其中,运行mysql数据库也是k8s的一个重要应用场景之一。下面我们来介绍如何在k8s1.10上运行mysql。
首先,我们需要在k8s上创建一个pv(Persistent Volume)和一个pvc(Persistent Volume Claim)。这一步的目的是为了让mysql的数据可以持久化保存,即使docker容器被删除了,数据也不会丢失。以下是创建pv和pvc的yaml文件:
kind: PersistentVolume apiVersion: v1 metadata: name: mysql-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain hostPath: path: /mnt/data/mysql kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
在这个yaml文件中,我们指定了pv的存储大小为10GB,数据访问模式为ReadWriteOnce(即只能在一个pod中读写数据),以及存储路径为/mnt/data/mysql。同样的,我们也创建了一个pvc,大小和路径与pv保持一致。
接下来,我们需要定义mysql的deployment和service。以下是它们的yaml文件:
apiVersion: apps/v1 kind: Deployment metadata: name: mysql labels: app: mysql spec: replicas: 1 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-pv mountPath: /var/lib/mysql --- apiVersion: v1 kind: Service metadata: name: mysql spec: selector: app: mysql ports: - port: 3306 targetPort: 3306 protocol: TCP
在这个yaml文件中,我们指定了mysql的deployment和service名称,并且定义了容器镜像、环境变量、端口和持久化挂载路径。我们还为mysql定义了一个service,把容器中的3306端口暴露出来,以便其他应用可以访问。
最后,我们需要使用kubectl命令行工具部署mysql:
kubectl apply -f pv.yaml kubectl apply -f deployment.yaml kubectl apply -f service.yaml
当我们部署完成后,可以通过以下命令来检查mysql的状态:
kubectl get deployment,pvc,pv,service
如果mysql的pod状态为Running,且service有一个ClusterIP,那么我们就成功地在k8s1.10上运行了mysql数据库!