WordPress部署新玩法:利用NFS存储在Kubernetes中实现数据持久化

1 编写资源清单

sh 复制代码
[root@k8s-node01 /data/manifests/rc]# cat wordpress-nfs.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: wp-blog
spec: {}
status: {}
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: wp-mysql
  namespace: wp-blog
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      volumes:
      - name: wp-mysql
        nfs:
          server: 11.0.1.8
          path: /data/nfs-server/wp-mysql
      containers:
      - name: mysql
        image: mysql:8.0
        imagePullPolicy: IfNotPresent
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
        - name: MYSQL_USER
          value: "wpuser"
        - name: MYSQL_PASSWORD
          value: "wppass"
        - name: MYSQL_DATABASE
          value: "wordpress"
        volumeMounts:
        - mountPath: "/var/lib/mysql"
          name: wp-mysql
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  namespace: wp-blog
spec:
  #clusterIP: 10.99.100.100
  ports:
  - name: 3306-3306
    port: 3306
    protocol: TCP
    targetPort: 3306
  selector:
    app: mysql
  type: ClusterIP
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: wordpress
  namespace: wp-blog
  labels:
    app: wordpress
spec:
  replicas: 3
  selector:
    app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      volumes:
      - name: wp-data
        nfs:
          server: 11.0.1.8
          path: /data/nfs-server/wp-data
      containers:
      - name: wordpress
        image: wordpress:latest
        imagePullPolicy: IfNotPresent
        env:
        - name: WORDPRESS_DB_HOST
          #value: 10.99.100.100
          value: mysql-svc
        - name: WORDPRESS_DB_NAME
          value: wordpress
        - name: WORDPRESS_DB_USER
          value: wpuser
        - name: WORDPRESS_DB_PASSWORD
          value: wppass
        volumeMounts:
        - name: wp-data
          mountPath: /var/www/html
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: wp-svc
  namespace: wp-blog
spec:
  ports:
  - name: 80-80
    port: 80
    targetPort: 80
    nodePort: 30090
  selector:
    app: wordpress
  type: NodePort

2 创建资源并上传数据

2.1 创建资源并验证

sh 复制代码
[root@k8s-node01 /data/manifests/rc]# kubectl apply -f wordpress-nfs.yaml 
namespace/wp-blog created
replicationcontroller/wp-mysql created
service/mysql-svc created
replicationcontroller/wordpress created
service/wp-svc created
[root@k8s-node01 /data/manifests/rc]# kubectl -n wp-blog get pods,svc -owide --show-labels 
NAME                  READY   STATUS    RESTARTS   AGE   IP             NODE                     NOMINATED NODE   READINESS GATES   LABELS
pod/wordpress-hkd64   1/1     Running   0          64s   10.244.1.170   k8s-node01.dinginx.org   <none>           <none>            app=wordpress
pod/wordpress-wmdl5   1/1     Running   0          64s   10.244.2.230   k8s-node02.dinginx.org   <none>           <none>            app=wordpress
pod/wordpress-x4x5n   1/1     Running   0          64s   10.244.2.229   k8s-node02.dinginx.org   <none>           <none>            app=wordpress
pod/wp-mysql-l67t5    1/1     Running   0          64s   10.244.2.228   k8s-node02.dinginx.org   <none>           <none>            app=mysql

NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE   SELECTOR        LABELS
service/mysql-svc   ClusterIP   10.103.169.68   <none>        3306/TCP       64s   app=mysql       <none>
service/wp-svc      NodePort    10.108.68.58    <none>        80:30090/TCP   64s   app=wordpress   <none>

2.2 访问测试

2.3 上传数据

3 验证删除Pod数据不丢失

3.1 删除所有资源并再次创建

sh 复制代码
#删除所有资源
[root@k8s-node01 /data/manifests/rc]# kubectl delete -f .
namespace "wp-blog" deleted
replicationcontroller "wp-mysql" deleted from wp-blog namespace
service "mysql-svc" deleted from wp-blog namespace
replicationcontroller "wordpress" deleted from wp-blog namespace
service "wp-svc" deleted from wp-blog namespace
[root@k8s-node01 /data/manifests/rc]# 

#再次创建验证数据
[root@k8s-node01 /data/manifests/rc]# kubectl apply -f  .
namespace/wp-blog created
replicationcontroller/wp-mysql created
service/mysql-svc created
replicationcontroller/wordpress created
service/wp-svc created

#查看资源及对外访问端口
[root@k8s-node01 /data/manifests/rc]# kubectl -n wp-blog get pods,svc -owide --show-labels 
NAME                  READY   STATUS    RESTARTS   AGE   IP             NODE                     NOMINATED NODE   READINESS GATES   LABELS
pod/wordpress-7gdg9   1/1     Running   0          3s    10.244.2.217   k8s-node02.dinginx.org   <none>           <none>            app=wordpress
pod/wordpress-tnp44   1/1     Running   0          3s    10.244.2.218   k8s-node02.dinginx.org   <none>           <none>            app=wordpress
pod/wordpress-wkzv4   1/1     Running   0          3s    10.244.1.166   k8s-node01.dinginx.org   <none>           <none>            app=wordpress
pod/wp-mysql-7dkrw    1/1     Running   0          3s    10.244.2.216   k8s-node02.dinginx.org   <none>           <none>            app=mysql

NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE   SELECTOR        LABELS
service/mysql-svc   ClusterIP   10.99.100.100   <none>        3306/TCP       3s    app=mysql       <none>
service/wp-svc      NodePort    10.99.135.202   <none>        80:30090/TCP   3s    app=wordpress   <none>

3.2 验证数据

相关推荐
heimeiyingwang4 小时前
【架构实战】Kubernetes存储实战:从EmptyDir到Ceph CSI的持久化存储选型指南
ceph·架构·kubernetes
QX_hao4 小时前
【Kubernetes】 的三个Probe
容器·kubernetes
猫吃了源码9 小时前
k9s简介和安装
linux·docker·kubernetes
云原生指北10 小时前
Docker Sandboxes 上手:从安装到第一次跑 Agent
运维·docker·容器
heimeiyingwang13 小时前
【架构实战】Kubernetes故障排查全景图:从Pod异常到集群雪崩的诊断手册
容器·架构·kubernetes
骇客野人13 小时前
Docker Compose 部署多个独立 Jar 服务完整实操步骤
docker·容器·jar
AAA@峥13 小时前
K8s 资源管控:ResourceQuota 与 LimitRange 机制详解与实战
云原生·容器·kubernetes
daoihfoaf14 小时前
太原助听器品质甄选
容器
秦渝兴15 小时前
Ansible 自动化部署 K8s 三节点集群(完整教程)
kubernetes·自动化·ansible
云川之下15 小时前
【k8s】Docker inspect 命令
docker·容器·kubernetes