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

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

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

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

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

2 将下载到的镜像push到harbor

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

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

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

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

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代理(目的是对外映射端口)

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3866149/blog/3056437

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐