集群情况:
k8s环境是1.25.3,操作系统为ubuntu20.04版本
主节点 | k8s-master01 | 10.0.0.12 | ubuntu20.04 |
工作节点1 | k8s-node01 | 10.0.0.13 | ubuntu20.04 |
工作节点2 | k8s-node02 | 10.0.0.14 | ubuntu20.04 |
工作节点3 | k8s-node03 | 10.0.0.15 | ubuntu20.04 |
nfs服务器 | nfs-server | 10.0.0.22 | ubuntu20.04 |
1.安装nfs-server、nfs依赖包
#安装nfs服务
root@nfs-server:~# apt update
root@nfs-server:~# apt install nfs-server -y
#master01节点安装nfs依赖包
root@master-k8s:~# apt update
root@master-k8s:~# apt install nfs-common -y
#node01节点安装nfs依赖包
root@node1-k8s:~# apt update
root@node1-k8s:~# apt install nfs-common -y
#node02节点安装nfs依赖包
root@node2-k8s:~# apt update
root@node2-k8s:~# apt install nfs-common -y
#node03节点安装nfs依赖包
root@node3-k8s:~# apt update
root@node3-k8s:~# apt install nfs-common -y
2.配置nfs-server
root@nfs-server:~# mkdir -p /data/mysql #创建挂载目录
root@nfs-server:~# vim /etc/exports
/data/mysql 10.0.0.0/24(rw,no_root_squash)
root@nfs-server:~# systemctl restart nfs-server
#测试创建目录
root@master-k8s:~# mount -t nfs 10.0.0.22:/data/mysql /mnt
root@master-k8s:~# cd /mnt/
root@master-k8s:/mnt# echo "123" > test.txt
root@master-k8s:/mnt# ls
test.txt
#每个节点挂载目录
root@node01-k8s:~# mount -t nfs 10.0.0.22:/data/mysql /mnt
root@node02-k8s:~# mount -t nfs 10.0.0.22:/data/mysql /mnt
root@node03-k8s:~# mount -t nfs 10.0.0.22:/data/mysql /mnt
3.创建wordpress pod以及svc
root@k8s-master01:~/wp# cat wordpress.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: wp
name: wp
spec:
replicas: 1
selector:
matchLabels:
app: wp
template:
metadata:
creationTimestamp: null
labels:
app: wp
spec:
containers:
- image: wordpress:5.8.2-apache
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: "db"
- name: WORDPRESS_DB_USER
value: "wpadmin"
- name: WORDPRESS_DB_PASSWORD
value: "wpP@ss"
- name: WORDPRESS_DB_NAME
value: "wpdb"
---
apiVersion: v1
kind: Service
metadata:
labels:
app: wp
name: wp
spec:
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
nodePort: 30009 #指定暴露的端口
selector:
app: wp
type: NodePort
root@k8s-master01:~/wp# kubectl apply -f wordpress.yaml
这里我选择的svc是NodePort类型
4.查看创建pod、svc
root@k8s-master01:~/wp# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22d
wp NodePort 10.102.143.52 <none> 80:30009/TCP 6s
root@k8s-master01:~/wp# kubectl get pod
NAME READY STATUS RESTARTS AGE
wp-6c696687b-k85hj 1/1 Running 0 93s
5.创建pv、pvc
root@k8s-master01:~/wp# cat mysql_pv.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-mysql
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-mysql
spec:
capacity:
storage: 3Gi #定义pv大小
accessModes:
- ReadWriteMany #定义权限
nfs: #这里定义了nfs存储
path: /data/mysql
server: 10.0.0.22
root@k8s-master01:~/wp# kubectl apply -f mysql_pv.yaml
6.查看创建pv、pvc情况
root@k8s-master01:~/wp# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-mysql 3Gi RWX Retain Bound default/pvc-mysql 18s
root@k8s-master01:~/wp# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-mysql Bound pv-mysql 3Gi RWX 21s
7.创建mysql pod、svc
root@k8s-master01:~/wp# cat mysql1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: db
name: db
spec:
replicas: 1
selector:
matchLabels:
app: db
template:
metadata:
labels:
app: db
spec:
volumes:
- name: wordpress-mysql
persistentVolumeClaim:
claimName: pvc-mysql
containers:
- image: mysql:8.0
name: mysql
volumeMounts:
- name: wordpress-mysql
mountPath: "/var/lib/mysql"
env: #定义环境变量
- name: MYSQL_RANDOM_ROOT_PASSWORD
value: "true"
- name: MYSQL_USER
value: "wpadmin"
- name: MYSQL_PASSWORD
value: "wpP@ss"
- name: MYSQL_DATABASE
value: "wpdb"
---
apiVersion: v1
kind: Service
metadata:
labels:
app: db
name: db
spec:
ports:
- name: 3306-3306
port: 3306
protocol: TCP
targetPort: 3306
selector:
app: db
type: ClusterIP
root@k8s-master01:~/wp# kubectl apply -f mysql1.yaml
这里的svc我定义的是clusterip类型
8.查看创建效果
root@k8s-master01:~/wp# kubectl get pod
NAME READY STATUS RESTARTS AGE
db-85b7794c99-nxxbw 1/1 Running 0 55s
root@k8s-master01:~/wp# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db ClusterIP 10.99.207.229 <none> 3306/TCP 76s
#查看nfs-server
root@nfs-server:~# ls /data/mysql/
'#ib_16384_0.dblwr' auto.cnf ca-key.pem ib_buffer_pool mysql.ibd public_key.pem undo_001
'#ib_16384_1.dblwr' binlog.000001 ca.pem ibdata1 mysql.sock server-cert.pem undo_002
'#innodb_redo' binlog.000002 client-cert.pem ibtmp1 performance_schema server-key.pem wpdb
'#innodb_temp' binlog.index client-key.pem mysql private_key.pem sys
9.测试访问
root@k8s-master01:~/wp# kubectl get svc
wp NodePort 10.102.143.52 <none> 80:30009/TCP 7m20s
集群ip+端口
填写一下信息
实现效果