以下步骤的前提是已部署好storageclass,可参考https://blog.csdn.net/u011943534/article/details/100887530
1、下载mysql
docker pull mysql:5.7
docker save -o mysql-5.7.tar mysql:5.7
2、导入镜像
将msyql-5.7.tar拷贝至K8s镜像服务器所在的节点
docker load -i mysql-5.7.tar
docker tag mysql:5.7 172.16.10.160:80/mysql:5.7
docker push 172.16.10.160:80/mysql:5.7
以下步骤的前提是已部署好storageclass
3、创建pv
mysql-pv.yaml:
kind: PersistentVolume
apiVersion: v1
metadata:
name: mysql-pv2
namespace: default
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 4Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: course-nfs-storage
nfs:
path: /data/nfsdata/22/mysql
server: 172.16.10.160
4、创建pvc
mysql-pvc.yaml:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-pvc2
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 4Gi
storageClassName: course-nfs-storage
5、创建configmap:
mysql-config.yaml:
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
namespace: default
data:
mysqld.cnf: |
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
bind-address = 0.0.0.0
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_connections=1000
default_storage_engine=innodb
skip_external_locking
lower_case_table_names=1
skip_host_cache
skip_name_resolve
character_set_server=utf8
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
6、创建deployment
mysql-deploy.yaml:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deploy
namespace: default
spec:
selector:
matchLabels:
app: mysql-deploy
template:
metadata:
labels:
app: mysql-deploy
spec:
containers:
- name: mysql-deploy
image: 172.16.10.160:80/mysql:5.7
args:
- --default_authentication_plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
env:
- name: MYSQL_ROOT_PASSWORD
value: "root"
- name: MYSQL_DATABASE
value: wordpress
- name: MYSQL_USER
value: wordpress
- name: MYSQL_PASSWORD
value: wordpress
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
- name: mysql-config
mountPath: /etc/mysql/conf.d/
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc2
- name: mysql-config
configMap:
name: mysql-config
---
apiVersion: v1
kind: Service
metadata:
name: mysql-deploy
namespace: default
spec:
type: NodePort
ports:
- port: 3306
targetPort: 3306
nodePort: 31111
selector:
app: mysql-deploy
7、按顺序应用yaml
kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-pvc.yaml
kubectl apply -f mysql-config.yaml
kubectl apply -f mysql-deploy.yaml
8、查看mysql
9、外部可以使用31111端口连接