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

相關文章
相關標籤/搜索