K8S
Kubernetes 就不多说了,之前也说过很多次了,作为目前大家都在谈论的东西,肯定是极好的。接下来直接上正文部署吧,接下来的几篇部署文档都很简单,直接上配置。
MySQL 部署
部署 MySQL 的前提是有 K8s 集群,之前有一篇已经详细写过如何测试部署 K8s 集群了,这里就不再多说。
NFS 服务创建
这里不说了,大家可以自行搜索一下创建 NFS 存储服务,这里依赖的持久化就是 NFS 服务。
MySQL PV/PVC 创建
Persistent Volume 和 Persistent Volume Claim,主要是管理服务持久化的存储资源 Volume。这里我们先创建 PV,再创建 PVC,将两者绑定。
首先是 mysql-pv.yaml
kind:PersistentVolumeapiVersion:v1metadata:name:mysql-pvnamespace:databasespec:accessModes:- ReadWriteOncecapacity:storage:1GipersistentVolumeReclaimPolicy:RetainstorageClassName:nfsnfs:path:/data/nfs/mysqlserver:nfs服务IP
配置中包含命名空间,模式 ReadWriteOnce,资源分配,名称对应,nfs 路径等等等。。
执行
kubectl apply -f mysql-pv.yaml
接下来是 mysql-pvc.yaml
kind:PersistentVolumeClaimapiVersion:v1metadata:name:mysql-pvcnamespace:databasespec:accessModes:- ReadWriteOnceresources:requests:storage:1GistorageClassName:nfs
这里其他配置与 PV 保持一致,同一命名空间 database 下,同一个 storageClassName
执行
kubectl apply -f mysql-pvc.yaml
创建好后我们来看一下状态。
kubectl get pv -n database
正常的 PV 状态如下
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysql-pv 1Gi RWO Retain Bound database/mysql-pvc nfs 4d3h
STATUS 是 BOUND 状态
接下来看一下 pvc
kubectl get pvc -n database
正常状态如下
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pvc Bound mysql-pv 1Gi RWO nfs 4d3h
STATUS 依旧是 BOUND,我们的 PV/PVC 持久化搭建完毕
MySQL Deploy 创建
这里是我们服务的本体,关于 Deploy 就不多说了
这里我们创建 mysql-deploy.yaml
apiVersion:apps/v1kind:Deploymentmetadata:name:mysqlnamespace:databasespec:selector:matchLabels:app:mysqltemplate:metadata:labels:app:mysqlspec:containers:- name:mysqlimage:mysql:5.7env:- name:MYSQL_ROOT_PASSWORDvalue:"password"ports:- containerPort:3306volumeMounts:- name:mysql-persistent-storagemountPath:/var/lib/mysqlvolumes:- name:mysql-persistent-storagepersistentVolumeClaim:claimName:mysql-pvc
这里我们配置的是 MySQL 服务相关信息,包括镜像的拉取,内部存储的映射。没有什么大问题等待服务部署成功就好了。
kubectl apply -f mysql-deploy.yaml
MySQL Service 创建
Deploy 部署我们服务的本体,接下来创建访问服务的通道。
创建 mysql-service.yaml
apiVersion:v1kind:Servicemetadata:name:mysqlnamespace:databasespec:type:NodePortports:- port:3306targetPort:3306nodePort:31111selector:app:mysqlselector:app:mysql
这里我选择 NodePort 类型,是因为用 31111 端口将服务暴露出来,不过用于我们同一个命名空间下的服务,可以直接通过服务名字进行访问。
kubectl apply -f mysql-service.yaml
可以根据我们的 MySQL 所在 Node+31111 的形式进行访问了。nfs 服务器上已经创建了相关 MySQL 持久化文件。