转:http://www.showerlee.com/archives/2336

这部分我们结合之前的k8s知识点给大家展示如何使用kubernetes部署wordpress+MySQL, 并利用NFS去保存我们容器的源代码以及DB数据.

安装环境

System: CentOS 7.4

Kubernetes: Kubernetes1.9

Docker: 17.03.2-ce

kube-master 10.110.16.10

kube-node-1 10.110.16.11

一. NFS配置:

1. NFS依赖包安装

在Master与Node分别安装NFS组件

# yum install nfs-utils -y

Tip: 这里需保证nfs-utils安装到所有master和node中, 否则容器挂载NFS时会报错.

2. 为Master下mysql data和wordpress源码配置NFS共享目录

# systemctl enable nfs-server && systemctl start nfs-server

# mkdir -p /kube/mysql-db

# mkdir -p /kube/wordpress

# chown nfsnobody:nfsnobody /kube/mysql-db

# chown nfsnobody:nfsnobody /kube/wordpress

# chmod 755 /kube/mysql-db

# chmod 755 /kube/wordpress

# echo -e "/kube/mysql-db    kube-*(rw,sync,no_subtree_check,no_root_squash)" > /etc/exports

# echo -e "/kube/wordpress    kube-*(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports

Tip: 这里kube-*限制只有kube相关的server才能连接Master下NFS共享目录, no_root_squash参数保证wordpress-mysql pod在初始化mysql配置的时候向在其下挂载的/var/lib/mysql目录有写入权限

3.应用配置

# exportfs -a

二. Persistent volume配置

1.为mysql data与wordpress源码存储创建Persistent volume
# kubectl create -f mysql-pv.yaml

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: mysql-pv
  5. labels:
  6. app: mysql
  7. spec:
  8. capacity:
  9. storage: 5Gi
  10. accessModes:
  11. - ReadWriteOnce
  12. persistentVolumeReclaimPolicy: Recycle
  13. nfs:
  14. path: /kube/mysql-db
  15. server: kube-master

# kubectl create -f wordpress-pv.yaml

  1. apiVersion: v1
  2. kind: PersistentVolume
  3. metadata:
  4. name: wp-pv
  5. labels:
  6. app: wordpress
  7. spec:
  8. capacity:
  9. storage: 5Gi
  10. accessModes:
  11. - ReadWriteOnce
  12. persistentVolumeReclaimPolicy: Recycle
  13. nfs:
  14. path: /kube/wordpress
  15. server: kube-master

2.创建存放mysql data的PVC

# kubectl create -f mysql-pvc.yaml

  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4. name: mysql-pv-claim
  5. labels:
  6. app: mysql
  7. spec:
  8. accessModes:
  9. - ReadWriteOnce
  10. resources:
  11. requests:
  12. storage: 2Gi

3.创建存放wordpress源码的PVC
# kubectl create -f wordpress-pvc.yaml

  1. kind: PersistentVolumeClaim
  2. apiVersion: v1
  3. metadata:
  4. name: wp-pv-claim
  5. labels:
  6. app: wordpress
  7. spec:
  8. accessModes:
  9. - ReadWriteOnce
  10. resources:
  11. requests:
  12. storage: 2Gi

查看绑定

# kubectl get pvc

  1. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
  2. mysql-pv-claim Bound mysql-pv 5Gi RWO 3m
  3. wp-pv-claim Bound wp-pv 5Gi RWO 6s

三. Secret配置

1.创建mysql root password

# kubectl create secret generic mysql-pass --from-literal='password=countonme'

四. Deployment配置

1.部署mysql deployment with PVC
# kubectl create -f mysql-deployment.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: wordpress-mysql
  5. labels:
  6. app: wordpress
  7. spec:
  8. selector:
  9. matchLabels:
  10. app: wordpress
  11. tier: mysql
  12. strategy:
  13. type: Recreate
  14. template:
  15. metadata:
  16. labels:
  17. app: wordpress
  18. tier: mysql
  19. spec:
  20. containers:
  21. - image: mysql:5.6
  22. name: mysql
  23. env:
  24. - name: MYSQL_ROOT_PASSWORD
  25. valueFrom:
  26. secretKeyRef:
  27. name: mysql-pass
  28. key: password
  29. ports:
  30. - containerPort: 3306
  31. name: mysql
  32. volumeMounts:
  33. - name: mysql-persistent-storage
  34. mountPath: /var/lib/mysql
  35. volumes:
  36. - name: mysql-persistent-storage
  37. persistentVolumeClaim:
  38. claimName: mysql-pv-claim

2.部署wordpress deployment with PVC

# kubectl create -f wordpress-deployment.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: wordpress
  5. labels:
  6. app: wordpress
  7. spec:
  8. selector:
  9. matchLabels:
  10. app: wordpress
  11. tier: frontend
  12. strategy:
  13. type: Recreate
  14. template:
  15. metadata:
  16. labels:
  17. app: wordpress
  18. tier: frontend
  19. spec:
  20. containers:
  21. - image: wordpress:4.8-apache
  22. name: wordpress
  23. env:
  24. - name: WORDPRESS_DB_HOST
  25. value: wordpress-mysql
  26. - name: WORDPRESS_DB_PASSWORD
  27. valueFrom:
  28. secretKeyRef:
  29. name: mysql-pass
  30. key: password
  31. ports:
  32. - containerPort: 80
  33. name: wordpress
  34. volumeMounts:
  35. - name: wordpress-persistent-storage
  36. mountPath: /var/www/html
  37. volumes:
  38. - name: wordpress-persistent-storage
  39. persistentVolumeClaim:
  40. claimName: wp-pv-claim

3.Service配置

Tip: 这里我们开启了node IP的80端口的外部访问权限, 可以方便我们直接利用主机去访问虚拟机任意Node地址从而登录我们的Wordpress网站.

# kubectl create -f wp-svc.yaml

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4.   name: wordpress-mysql
  5.   labels:
  6.     app: wordpress
  7. spec:
  8.   ports:
  9.     - port: 3306
  10.   selector:
  11.     app: wordpress
  12.     tier: mysql
  13.   clusterIP: None
  14. ---
  15. apiVersion: v1
  16. kind: Service
  17. metadata:
  18.   name: wordpress
  19.   labels:
  20.     app: wordpress
  21. spec:
  22.   ports:
  23.     - port: 80
  24.       nodePort: 80
  25.   selector:
  26.     app: wordpress
  27.     tier: frontend
  28.   type: NodePort

Tip: 这里service定义的name: wordpress-mysql保证我们wordpress-deployment.yaml定义的如下环境变量可以作为有效的域名成功去访问我们的mysql容器, 保证网站服务器与数据库服务器的通讯.

  1. env:
  2. - name: WORDPRESS_DB_HOST
  3. value: wordpress-mysql

五. 验证结果

1.访问wordpress主页

这里我们可以直接在浏览器访问任意node的IP地址从而进入wordpress主页

添加相关信息并初始化安装WordPress

完成安装

后台

主页

2.查看NFS主机对在容器里的mysql data与wordpress root dir的目录挂载.

有兴趣的小伙伴可以直接访问如下代码仓库去下载本文相关代码:

https://git.showerlee.com/showerlee/kube-deploy/tree/master/wordpress-mysql

Finished...

后记:

如果我们使用helm包管理去部署wordpress, 将大大简化我们的工作量.

这里我的代码仓库提供了wordpress chart部署脚本, 以下是详细的部署步骤:

Prerequisite:

Kubernetes cluster setup

http://www.showerlee.com/archives/2200

Helm setup

http://www.showerlee.com/archives/2455

Helm deployment:

# git clone git@git.showerlee.com:showerlee/kube-deploy.git

# cd kube-deploy

# kubectl create secret generic mysql-pass --from-literal='password=countonme'

# helm install --name wordpress-mysql ./wordpress-helm-chart --set service.type=NodePort

  1. NAME: wordpress-mysql
  2. LAST DEPLOYED: Sat Apr 14 03:09:46 2018
  3. NAMESPACE: default
  4. STATUS: DEPLOYED
  5.  
  6. RESOURCES:
  7. ==> v1/PersistentVolume
  8. NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
  9. mysql-pv 5Gi RWO Recycle Bound default/mysql-pv-claim 1s
  10. wp-pv 5Gi RWO Recycle Bound default/wp-pv-claim 1s
  11.  
  12. ==> v1/PersistentVolumeClaim
  13. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
  14. mysql-pv-claim Bound mysql-pv 5Gi RWO 1s
  15. wp-pv-claim Bound wp-pv 5Gi RWO 1s
  16.  
  17. ==> v1/Service
  18. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  19. wordpress-mysql ClusterIP None <none> 3306/TCP 1s
  20. wordpress NodePort 10.110.14.233 <none> 80:80/TCP 1s
  21.  
  22. ==> v1/Deployment
  23. NAME AGE
  24. wordpress-mysql 1s
  25. wordpress 1s
  26.  
  27. NOTES:
  28. 1. Get the application URL by running these commands:
  29. export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services wordpress-mysql-wordpress-helm-chart)
  30. export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
  31. echo http://$NODE_IP:$NODE_PORT

(转)Kubernetes部署WordPress+MySQL的更多相关文章

  1. Kubernetes中部署wordpress+mysql(六)

    经过前面的内容其实对k8s已经有了服务迁移的能力了,下面这篇文章主要是用来搭建一些后面要用的组件 一.创建wordpress命名空间 kubectl create namespace wordpres ...

  2. 【docker-compose】使用docker-compose部署运行spring boot+mysql 【处理容器的时区问题】【详解】【福利:使用docker-compose构建 wordpress+mysql】

    ==================================================================================================== ...

  3. EKS助力小白实践云原生——通过k8s部署wordpress应用

    目前云原生在大厂已经有了充分的实践,也逐渐向小厂以及非互联网公司推广.适逢12月20日,腾讯云原生[燎原社]精心打造了云原生在线技术工坊,让零基础的同学也能快速入门和实践 Docker 和 Kuber ...

  4. Centos7.4下用Docker-Compose部署WordPress(续)-服务器端用Nginx作为反向代理并添加SSL证书(阿里云免费DV证书)

    前言 在我写完Centos7.4下用Docker-Compose部署WordPress这篇文章后,我的个人博客已经正式的开始运作.但考虑到网站访问的安全性以及今后可能会重复利用服务器来部署其他网站的可 ...

  5. Centos7.4下用Docker-Compose部署WordPress

    前言 最近在学习Docker相关知识,通过阅读第一本Docker书后,正想着手实战用一下这个技术,但又不太敢直接在项目环境下动手.考虑足足三秒钟之后决定买个阿里云ECS搭建一个属于自己的基于Docke ...

  6. Docker swarm 实战-部署wordpress

    Docker swarm 实战-部署wordpress 创建一个overlay的网络 docker network create -d overlay demo 6imq8da3vcwvj2n499k ...

  7. CentOS7下搭建基本LNMP环境,部署WordPress

    系统环境:CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64 软件版本:nginx-1.12.2.tar.gz php 7.1.11 ...

  8. Docker Swarm应用--lnmp部署WordPress

    一.简介 目的:使用Docker Swarm 搭建lnmp来部署WordPress 使用Dockerfile构建nginx.php镜像 将构建的镜像上传docker私有仓库 使用volume做work ...

  9. 一键部署WordPress开源内容管理系统

    https://market.azure.cn/Vhd/Show?vhdId=9857&version=10889 产品详情 产品介绍WordPress是一款个人博客系统,并逐步演化成一款内容 ...

随机推荐

  1. PCB布线设计-模拟和数字布线的异同(转)

    工程领域中的数字设计人员和数字电路板设计专家在不断增加,这反映了行业的发展趋势.尽管对数字设计的重视带来了电子产品的重大发展,但仍然存在,而且还会一直存在一部分与模拟或现实环境接口的电路设计.模拟和数 ...

  2. Bootstrap 学习笔记 项目实战 响应式轮播图

    左右两个箭头可以随浏览器缩放进行移动 保持在图片中间 Html代码: <!DOCTYPE html> <html lang="zh-cn"> <hea ...

  3. js中ajax请求返回的数据处理成数组后,局部变量赋值给全局变量后,为空

    第二步是想把ss的值扔给res_r,两个数组直接相等即可,可谁想到,取出来的值是空. 如图取出来的值是空. 我一脸懵逼,调试了些许时间,最后把ss遍历一下,在重新push进res_r 再来看效果,已经 ...

  4. JavaSE编码试题强化练习5

    1.不使用函数实现字符串的翻转 /** * 1.不使用函数实现字符串的翻转 */ public class TestStringReverse { public static void main(St ...

  5. JAVA总结--JDK版本区别

    jdk1.5的新特性:  1.泛型  2.自动拆箱装箱  3.foreach   4.静态导入(Static import) 此外,枚举.元数据(Metadata).线程池.Java Generics ...

  6. 移动端1像素解决方法,根据媒体查询transform缩放

    .borderOnePx{ position: relative; } .borderOnePx::after { content: ''; height:1px; background:#000; ...

  7. Python2中range 和xrange的区别??

    两者用法相同,不同的是range返回的结果是一个列表,而xrange的结果是一个生成器, 前者是直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间, 所以当列表很长时,使用 ...

  8. 5105 pa1 MapReduce

    Programming Assignment 1: A simple MapReduce-like compute framework Yuanli Wang  wang8662            ...

  9. 简述vue中v-if和v-show的区别

    vue中的 v-if 和 v-show 二者都可以动态的控制元素的隐藏和显示,但是他们控制的原理是不同的 v-if v-if 控制元素显示或隐藏是把dom元素整个的渲染或者删除,如果删除,也就是页面中 ...

  10. 一gradle创建SSM项目——依赖包

    build.gradle compile:编译时必须. runtime:运行时必须,包括编译时. testCompile:测试编译时必须. testRuntime:测试运行时必须,包括编译时. 注:此 ...