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 验证数据

相关推荐
LRL_1 小时前
深入浅出 Kubernetes 控制器:Deployment 与 StatefulSet 核心区别全景图
云原生·容器·kubernetes
起名真的太难了2 小时前
Docker 项目部署
docker·容器·eureka
MrSYJ2 小时前
Network Namespace 到底是个啥,别人再问你告诉他
docker·云原生·kubernetes
彬冷的心5 小时前
K8s 部署若依项目 + Harbor 私有仓库(双节点版)
云原生·容器·kubernetes
convee_ai5 小时前
Agent 执行为什么需要独立 Sandbox:拆解 Hullwork 的 gVisor 隔离
架构·kubernetes
想要成为老金高手5 小时前
Kubernetes Service 深度实践:从 ClusterIP 到 Ingress 七层代理
云原生·容器·kubernetes
IT大白鼠6 小时前
Kubernetes 持久化存储:PV、PVC、StorageClass 存储体系
云原生·容器·kubernetes
青禾8376 小时前
Docker 从入门到实践:镜像、容器、数据卷与 Docker Compose
运维·docker·容器
GGG7667 小时前
K8s1.28 全栈落地|Jenkins+GitLab+Harbor DevOps 流水线封神实战
kubernetes·gitlab·jenkins
wdfk_prog7 小时前
Docker 开发环境到底要交付什么:镜像、源码与运行脚本
运维·docker·容器