122.k8s中部署discuz

 

 

 

由于以前已经搭建了kubernetes集群。操做在哪一台机器上作都是能够的,他们是一个集群,不分你我。虽然角色上是划分的,可是你执行命令都是没问题的php

1 下载MySQL、PHP以及Nginx镜像 #拉取镜像是为了搞到咱们内部的harbor上去html

docker pull mysql:5.7 #咱们拉下来5.7版本的mysqlnode

docker pull richarvey/nginx-php-fpm #把nginx和php-fpm拉下来,并重建。上面的链接有步骤mysql

而后再执行重建过程,含有nginx的配置文件(按照以上连接操做,先克隆项目)linux

2 将下载到的镜像push到harbornginx

docker tag mysql:5.7 harbor.yuankeedu.com/aminglinux/mysql:5.7git

docker push harbor.yuankeedu.com/aminglinux/mysql:5.7web

docker tag aming-nginx-php harbor.yuankeedu.com/aminglinux/nginx-phpsql

docker push harbor.yuankeedu.com/aminglinux/nginx-phpdocker

3 搭建NFS服务 #把网站的目录(discuz应用的目录)经过NFS共享出来

yum install nfs-utils

vim /etc/exportfs

/data/k8s/ 172.7.5.0/24(sync,rw,no_root_squash)

systemctl start nfs

systemctl enable nfs

mkdir -p /data/k8s/discuz/{db,web} #这一步是由于k8s要供不少pod使用的,不要把所有的东西都放在k8s这个目录下,会很乱。

因此k8s目录下有个discuz目录,是放discuz相关的。而discuz目录下又有db目录是放mysql的,web目录是放nginx和php的

4 搭建MySQL服务

1)建立secret

kubectl create secret generic mysql-pass --from-literal=password=DzPasswd123 #定义mysql的root密码

2)建立pv #全部的yaml格式要复制对。根据上面的链接直接克隆下来就能够 ,他会存在相应的目录里

cd /data/k8s/discuz/db

vim mysql-pv.yaml //内容以下

apiVersion: v1

kind: PersistentVolume

metadata:

name: mysql-pv

spec:

capacity:

storage: 10Gi

accessModes:

- ReadWriteMany

nfs:

path: /data/k8s/discuz/db

server: 172.7.5.113

kubectl create -f mysql-pv.yaml

3)建立pvc

cd /data/k8s/discuz/db

vim mysql-pvc.yaml //内容以下

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mysql-claim

labels:

app: discuz

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 10Gi

kubectl create -f mysql-pvc.yaml

kubectl get pvc #能够查看一下是否自动绑定pv

4)建立deployment

vim mysql-dp.yaml //内容以下

apiVersion: apps/v1

kind: Deployment

metadata:

name: dz-mysql

labels:

app: discuz

spec:

replicas: 2

selector:

matchLabels:

app: discuz

tier: mysql

strategy:

type: Recreate

template:

metadata:

labels:

app: discuz

tier: mysql

spec:

imagePullSecrets:

- name: my-secret

containers:

- image: harbor.yuankeedu.com/aminglinux/mysql:5.7 #这个地址就是咱们harbor里的那个images,要写对

name: dz-mysql

env:

- name: MYSQL_ROOT_PASSWORD

valueFrom:

secretKeyRef:

name: mysql-pass

key: password

ports:

- containerPort: 3306

name: dz-mysql

volumeMounts:

- name: mysql-persistent-storage

mountPath: /var/lib/mysql

volumes:

- name: mysql-persistent-storage

persistentVolumeClaim:

claimName: mysql-claim

kubectl create -f mysql-dp.yaml

5)建立service

vim mysql-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: dz-mysql

labels:

app: discuz

spec:

ports:

- port: 3306

selector:

app: discuz

tier: mysql

kubectl create -f mysql-svc.yaml

mysql -uroot -pDzPasswd123 -h xxx #登陆mysql是否成功,一次验证mysql搭建是否成功。(没有mysql的话要yum安装一个。

此处的密码是4.1步骤设置的密码。-h后的ip是service的惟一指定ip(kubectl get svc可查看到)

5 搭建nginx+php-fpm服务

1)建立pv #上面拉取nginx和php项目的时候,其实这些配置都存在,可是有些ip或目录要修改一下

cd /data/k8s/discuz/nginx_php #首先进入到nginx_php目录下来

vim web-pv.yaml //内容以下

apiVersion: v1

kind: PersistentVolume

metadata:

name: web-pv

spec:

capacity:

storage: 10Gi

accessModes:

- ReadWriteMany

nfs:

path: /data/k8s/discuz/nginx_php #注意路径

server: 192.168.208.128 #ip要改

kubectl create -f web-pv.yaml

2)建立pvc

vim web-pvc.yaml //内容以下

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: web-claim

labels:

app: discuz

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 10Gi

kubectl create -f web-pvc.yaml

3)建立deployment

vim web-dp.yaml //内容以下

apiVersion: apps/v1

kind: Deployment

metadata:

name: dz-web

labels:

app: discuz

spec:

replicas: 1

selector:

matchLabels:

app: discuz

tier: nginx-php

template:

metadata:

labels:

app: discuz

tier: nginx-php

spec:

imagePullSecrets:

- name: my-secret

containers:

- image: harbor.yuankeedu.com/aminglinux/nginx-php

name: dz-web

ports:

- containerPort: 9000

- containerPort: 80

name: dz-web

volumeMounts:

- name: mysql-persistent-storage

mountPath: /var/www/html/

volumes:

- name: mysql-persistent-storage

persistentVolumeClaim:

claimName: web-claim

kubectl create -f web-dp.yaml

kubectil get pod #会看到此时正在拉镜像。显示running就没问题了。也能够用kubectl describepod dz-web-5ff4579b9d-gkqi7看一下

4)建立service

vim web-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: dz-web

labels:

app: discuz

spec:

ports:

- port: 80 #这个地方要写80.。实验中9000端口把暴露不出来,而且9000端口只监听127.0.0.0

selector:

app: discuz

tier: nginx-php

kubectl create -f web-svc.yaml

kubectl get svc #要查看一下dz-web的80端口是否暴露出来

curl 10.68.62.250 #kubectl get svc 出来的ip,curl一下,会显示403。固然能够去搞一个index.html

cd /data/k8s/web 首先登陆到master2机器上,在这台机器上定义index.html。而后再curl(可能会须要一些时间才能curl出来)。如出现问题可在这面的路径里找相应的nginx或php-fpm的配置文件

.../k8s_discuz/dz_web_dockerfile #这个目录下有nginx和php-fpm的配置文件,就是在pull下来的目录里,前面的路径可能不太同样

 

测试解析php(作个php的界面出来):

cd /data/k8s/discuz/web #需在master2上执行

vi 1.php

<?php

phpinfo();

?>

curl 10.68.62.250/1.php #ip为kubectl get svc的ip。查看是否出现php的界面

 

 

 

  • 安装Discuz
  • 下载dz代码 (到NFS服务器上)

cd /tmp/ git clone https://gitee.com/ComsenzDiscuz/DiscuzX.git #把discuz代码克隆下来 cd /data/k8s/discuz/web/ mv /tmp/DiscuzX/upload/* . #将克隆下来的这个目录下全部的文件拷贝过来,也就是discuz chown -R 100 data uc_server/data/ uc_client/data/ config/ #作权限更改

#上面的100是用户。可先去查看一下php的配置文件,他写的用户和组都是nginx,那到了pod上,咱们对应的nginx的用户和组究竟是谁呢?kubectl exec dz-web-5ff4579b9d-gkqi7 id ningx能够看到他的uid就是100

  • 设置MySQL普通用户

kubectl get svc dz-mysql //查看service的cluster-ip,个人是10.68.122.120 mysql -uroot -h10.68.122.120 -pDzPasswd1 //这里的密码是在一开始设置的mysql那个root密码 > create database dz; #建立discuz的数据库 > grant all on dz.* to 'dz'@'%' identified by 'dz-passwd-123';

  • 设置Nginx代理

注意:目前nginx服务是运行在kubernetes集群里,node节点以及master节点上是能够经过cluster-ip访问到,可是外部的客户端就不能访问了。 因此,能够在任意一台node或者master上建一个nginx反向代理便可访问到集群内的nginx。 kubectl get svc dz-web //查看cluster-ip,个人ip是10.68.190.99

nginx代理配置文件内容以下: #在k8s集群外面(或者master上,不要用集群里的nginx,另外yum一个)yum一个nginx来作一个反向代理 server { listen 80; server_name dz.yuankeedu.com; location / { proxy_pass http://10.68.190.99:80; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

  • 安装Discuz

安装discuz的时候,数据库服务器的名字不用填ip。填svc的名字:

 

 

作完Nginx代理,就能够经过node的IP来访问discuz了。

 

 

 

总结:

首先是镜像,就是拉取lnmp的镜像。而后再把nginx和php-fpm镜像重建一下,就是变成咱们须要的,主要就是改配置文件。而后把全部镜像push到harbor上

搭建NFS,为了实现数据共享,包括数据库,就是持久化的。及时咱们把pod和service删掉,这些数据还在(像dz的数据库、discuz的代码)

搭建mysql服务,建立pv、pvc、deployment、service这些核心的文件

搭建nginx+php-fpm,建立pv、pvc、deployment、service这些核心文件

安装discuz,包括数据库相关的建立,以及nginx代理(目的是对外映射端口)

相关文章
相关标签/搜索