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

相关推荐
枫子有风几秒前
Docker的安装【下载安装、报错、镜像配置、常用命令】
运维·docker·容器
leo825...1 分钟前
Docker常见命令(总结)
运维·docker·容器
LucidX1 分钟前
Kubernetes 1.20 集群部署完整教程
云原生·容器·kubernetes
火龙果研究院1 小时前
利用docker和docker-compose部署单机kafka
docker·容器·kafka
java_logo1 小时前
基于 Docker 的 MongoDB 部署与使用指南
mongodb·docker·容器·mongodb部署·mongodb部署文档·mongodb部署方案·docker部署mongodb
叽里咕噜怪1 小时前
Kubernetes 操作与项目生命周期管理(初学者详解版)
云原生·容器·kubernetes
企鹅郁金香1 小时前
使用Docker部署Gitlab和Gerrit (一)
docker·容器·gitlab·gerrit部署
可爱又迷人的反派角色“yang”2 小时前
k8s(三)
linux·运维·网络·docker·容器·kubernetes
三块钱07942 小时前
nas-群晖docker查询注册表失败解决办法
运维·docker·容器
zhaotiannuo_199810 小时前
渗透测试之docker
运维·docker·容器