K8S 部署 MySQL
1. 创建命名空间
$ vim mysql-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: mysql
labels:
name: mysql
$ kubectl create -f mysql-ns.yaml
- 验证
$ kubectl get namespace
NAME STATUS AGE
mysql Active 2m6s
2. 安装 NFS 文件共享
$ mkdir -p /data/Deployment/mysql/data
$ yum install -y nfs-utils rpcbind
$ vi /etc/exports
/data/Deployment/mysql/data *(rw,sync,no_subtree_check,no_root_squash)
$ systemctl start nfs-server.service
$ systemctl enable nfs-server.service
- 验证
$ showmount -e 127.0.0.1
Export list for 127.0.0.1:
/data/Deployment/mysql/data *
3. 创建 PV
$ vim mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
# pv是没有namespace属性的,它是一种跨namespace的共享资源
name: mysql-pv-10gi
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
# 存储类,具有相同存储类名称的pv和pvc才能进行绑定
storageClassName: nfs
nfs:
path: /data/Deployment/mysql/data
server: 10.201.10.201
$ kubectl create -f mysql-pv.yaml
- 验证
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysql-pv-10gi 10Gi RWX Retain Available nfs 8s
4. 创建 PVC
$ vim mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc-10gi
namespace: mysql
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
# 存储类,具有相同存储类名称的pv和pvc才能进行绑定
storageClassName: nfs
$ kubectl create -f mysql-pvc.yaml
- 验证
$ kubectl get pvc -n mysql
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pvc-10gi Bound mysql-pv-10gi 10Gi RWX nfs 34s
5. 创建 Secret 对象用来保存 mysql 的 root 用户密码
$ kubectl create secret generic mysql-root-password --from-literal=password=admin@123456 -n mysql
- 验证
$ kubectl get secret -n mysql
NAME TYPE DATA AGE
mysql-root-password Opaque 1 20s
6. 创建 Deployment
$ vim mysql-deploy.yaml
# 定义mysql的Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mysql
name: mysql
namespace: mysql
spec:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:8.0
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
# 指定secret
valueFrom:
secretKeyRef:
name: mysql-root-password
key: password
# 也可直接指定mysql密码,使用secret来存储密码更为安全
#value: "admin@123456"
ports:
# 指定容器服务端口
- containerPort: 3306
volumeMounts:
# 指定pvc容器挂载路径
- name: mysqlvolume
mountPath: /var/lib/mysql
volumes:
- name: mysqlvolume
persistentVolumeClaim:
# 指定pvc
claimName: mysql-pvc-10gi
$ kubectl create -f mysql-deploy.yaml
- 验证
$ kubectl get deploy -n mysql
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1/1 1 1 46s
7. 创建 Service
vim mysql-svc.yaml
#定义mysql的Service对外提供服务
apiVersion: v1
kind: Service
metadata:
labels:
app: mysql-svc
name: mysql-svc
namespace: mysql
spec:
selector:
app: mysql
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
nodePort: 31106
$ kubectl create -f mysql-svc.yaml
- 验证
$ kubectl get svc -n mysql
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql-svc NodePort 10.102.46.15 <none> 3306:31106/TCP 13s
8. 连接测试
./mysql -h127.0.0.1 -P31106 -uroot -padmin@123456
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
运维小记!
喜欢就支持一下吧
打赏
微信
支付宝