MySQL安装yaml文件:定义了Service、Secret、StatefulSet,使用的存储是之前创建的NFS服务器。
apiVersion: v1
kind: Service
metadata:
name: mysql-sts
labels:
app: mysql-sts
spec:
ports:
- port: 3306
selector:
app: mysql-sts
clusterIP: None
---
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: MTIzNDU2
username: cm9vdA==
#user/pass=root/123456
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql-sts
spec:
serviceName: "mysql-sts"
replicas: 1
volumeClaimTemplates:
- metadata:
name: mysql-local-storage
annotations:
volume.beta.kubernetes.io/storage-class: "nfs"
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 25Gi
selector:
matchLabels:
app: mysql-sts
template:
metadata:
labels:
app: mysql-sts
spec:
nodeSelector:
wordpress: mysql
containers:
- image: mysql:5.7.34
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
#- name: SECRET_USERNAME
# valueFrom:
# secretKeyRef:
# name: mysecret
# key: username
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-local-storage
readOnly: false
mountPath: /var/lib/mysql
initContainers:
- name: init-wordpress-mysql
image: busybox
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'rm -rf /data/*', 'until nslookup mysql-sts; do echo waiting for mysql-sts; sleep 2; done;']
volumeMounts:
- name: mysql-local-storage
readOnly: false
mountPath: /data
WordPress安装yaml文件:定义了PVC、Service、ConfigMap和Deployment,存储使用的是之前创建的NFS服务器。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-wp
spec:
storageClassName: nfs
accessModes:
- ReadWriteMany
resources:
requests:
storage: 12G
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
targetPort: 80
nodePort: 30180
selector:
app: wordpress
type: NodePort
---
apiVersion: v1
data:
db-host: mysql-sts
kind: ConfigMap
metadata:
name: mycm
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
nodeSelector:
wordpress: mysql
containers:
- image: wordpress:4.8-apache
name: wordpress
imagePullPolicy: IfNotPresent
env:
- name: WORDPRESS_DB_HOST
valueFrom:
configMapKeyRef:
name: mycm
key: db-host
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: mysecret
key: username
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
ports:
- containerPort: 80
name: wordpress
resources:
requests:
cpu: 0.5
volumeMounts:
- name: wordpress-local-storage
readOnly: false
mountPath: /var/www/html
volumes:
- name: wordpress-local-storage
persistentVolumeClaim:
claimName: pvc-wp
注意这两个yaml文件都定义了nodeSelector,只会作用在带有wordpress=mysql标签的节点上。
wordpress显示无法连接Mysql。
参考:1130, “Host ‘xxxx’ is not allowed to connect to this MySQL server”
执行以下命令:
use mysql;
使用mysql数据库。
update user set host=‘%’ where user=‘root’;
修改用户root的访问主机。
select host,user from user;
查看用户的主机访问权限。
flush privileges;
使修改权限生效,非常关键,开始我没加这个导致不生效。
访问MySQL的主机IP加端口查看是否生效:
在yaml文件配置了root账户的密码,登录MySQL的时候发现使用该密码无法登录,可以直接使用mysql -uroot登录。然后修改root账户的权限:
wordpress连接上mysql后,会自动创建一个wordpress数据库。
wordpress服务可以成功访问。
查看Volume挂载的路径
使用NodePort访问
wordpress安装好后会在wordpress数据库生成表。