3.4、部署博客系统

1)配置NFS服务

master节点安装NFS与RPC服务:

# yum install -y nfs-utils rpcbind

node节点安装NFS客户端:

# yum install -y nfs-utils

启动RPC服务:

# systemctl start rpcbind

# systemctl enable rpcbind

查看NFS服务项RPC服务器注册的端口列表:

# rpcinfo -p localhost

启动NFS服务:

# systemctl start nfs

# systemctl enable nfs

启动NFS服务后RPC服务已经启用了对NFS的端口映射列表

# rpcinfo -p localhost

在服务器端创建2个共享目录并设置权限:

# mkdir -p /home/pvdata/mysql

# mkdir -p /home/pvdata/wordpress

# chmod 777 /home/pvdata/mysql 

# chmod 777 /home/pvdata/wordpress

修改NFS配置文件/etc/exports

# vim /etc/exports

/home/pvdata/mysql *(rw,sync,insecure,no_subtree_check,no_root_squash)

/home/pvdata/wordpress *(rw,sync,insecure,no_subtree_check,no_root_squash)

NFS配置文件生效

# exportfs -r

# exportfs

2)配置NFS PV持久化存储

创建mysql pv卷

# cat mysql-persistent-storage.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mysql-persistent-storage

spec:

    capacity:

      storage: 20Gi

    accessModes:

              - ReadWriteOnce

    persistentVolumeReclaimPolicy: Recycle

    storageClassName: nfs

    nfs:

       path: /home/pvdata/mysql/

       server: 10.18.4.10

# kubectl apply -f mysql-persistent-storage.yaml

创建wordpress pv卷:

# cat wordpress-persistent-storage.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

  name: wordpress-persistent-storage

spec:

    capacity:

      storage: 20Gi

    accessModes:

              - ReadWriteOnce

    persistentVolumeReclaimPolicy: Recycle

    storageClassName: nfs

    nfs:

       path: /home/pvdata/wordpress/

       server: 10.18.4.10

# kubectl apply -f wordpress-persistent-storage.yaml

3)部署应用

通过以下命令在kustomization.yaml中添加一个Secret生成器:

# cat <<EOF >./kustomization.yaml

secretGenerator:

- name: mysql-pass

  literals:

  - password=123456ok

EOF

MySQL容器将PersistentVolume挂载在/var/lib/mysql。MYSQL_ROOT_PASSWORD环境变量设置来自Secret的数据库密码:

# cat mysql-deployment.yaml

apiVersion: v1

kind: Service

metadata:

  name: wordpress-mysql

  labels:

    app: wordpress

spec:

  ports:

    - port: 3306

  selector:

    app: wordpress

    tier: mysql

  clusterIP: None

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mysql-pv-claim

  labels:

    app: wordpress

spec:

  accessModes:

    - ReadWriteOnce

  resources:

    requests:

      storage: 20Gi

---

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2

kind: Deployment

metadata:

  name: wordpress-mysql

  labels:

    app: wordpress

spec:

  selector:

    matchLabels:

      app: wordpress

      tier: mysql

  strategy:

    type: Recreate

  template:

    metadata:

      labels:

        app: wordpress

        tier: mysql

    spec:

      containers:

      - image: 10.18.4.10/library/mysql:5.6

        name: mysql

        env:

        - name: MYSQL_ROOT_PASSWORD

          valueFrom:

            secretKeyRef:

              name: mysql-pass

              key: password

        ports:

        - containerPort: 3306

          name: mysql

        volumeMounts:

        - name: mysql-persistent-storage

          mountPath: /var/lib/mysql

      volumes:

      - name: mysql-persistent-storage

        persistentVolumeClaim:

          claimName: mysql-pv-claim

WordPress容器将网站数据文件位于/var/www/html的PersistentVolume。WORDPRESS_DB_HOST环境变量集上面定义的MySQLService的名称,WordPress将通过Service访问数据库。WORDPRESS_DB_PASSWORD环境变量设置从Secretkustomize生成的数据库密码。

# cat wordpress-deployment.yaml

apiVersion: v1

kind: Service

metadata:

  name: wordpress

  labels:

    app: wordpress

spec:

  ports:

    - port: 80

  selector:

    app: wordpress

    tier: frontend

  type: LoadBalancer

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: wp-pv-claim

  labels:

    app: wordpress

spec:

  accessModes:

    - ReadWriteOnce

  resources:

    requests:

      storage: 20Gi

---

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2

kind: Deployment

metadata:

  name: wordpress

  labels:

    app: wordpress

spec:

  selector:

    matchLabels:

      app: wordpress

      tier: frontend

  strategy:

    type: Recreate

  template:

    metadata:

      labels:

        app: wordpress

        tier: frontend

    spec:

      containers:

      - image: 10.18.4.10/library/wordpress:4.8-apache

        name: wordpress

        env:

        - name: WORDPRESS_DB_HOST

          value: wordpress-mysql

        - name: WORDPRESS_DB_PASSWORD

          valueFrom:

            secretKeyRef:

              name: mysql-pass

              key: password

        ports:

        - containerPort: 80

          name: wordpress

        volumeMounts:

        - name: wordpress-persistent-storage

          mountPath: /var/www/html

      volumes:

      - name: wordpress-persistent-storage

        persistentVolumeClaim:

          claimName: wp-pv-claim

将以上两个文件补充到kustomization.yaml文件中:

# cat <<EOF >>./kustomization.yaml

resources:

  - mysql-deployment.yaml

  - wordpress-deployment.yaml

EOF

kustomization.yaml包含用于部署 WordPress 网站的所有资源以及 MySQL 数据库。通过以下方式部署应用:

# kubectl apply -k ./

secret/mysql-pass-ccht6ddg2m created

service/wordpress-mysql created

service/wordpress created

deployment.apps/wordpress-mysql created

deployment.apps/wordpress created

persistentvolumeclaim/mysql-pv-claim created

persistentvolumeclaim/wp-pv-claim created

4)验证应用

通过运行以下命令验证Secret是否存在:

# kubectl get secrets

NAME                TYPE                           DATA   AGE

mysql-pass-ccht6ddg2m   Opaque                         1        39s

验证是否已动态配置PersistentVolume,设置和绑定PV可能要花费几分钟:

# kubectl get pvc

NAME       STATUS  VOLUME                   CAPACITY  ACCESS MODES  STORAGECLASS  AGE

mysql-pv-claim  Bound  pvc-1f300520-7d33-4a2e-acdc-d09ef27f794a  20Gi    RWO      local-path   10m

wp-pv-claim   Bound  pvc-b13dddbd-0f1c-4b04-b6c0-677a1f50587b  20Gi    RWO      local-path   10m

通过运行以下命令来验证Service是否正在运行:

# kubectl get services wordpress

NAME    TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE

wordpress  LoadBalancer  10.109.26.194   <pending>     80:31355/TCP   10m

5)访问应用

通过http://10.18.4.10:31355访问wordpress,如图所示:

 

wordpress初始化界面

创建用户并登录wordpress,如图所示:

 

 wordpress首页

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

离陌殇殃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值