1. 程式人生 > 其它 >Kubernetes 雲平臺部署 WordPress流程

Kubernetes 雲平臺部署 WordPress流程

參考文件:

Kubernetes 部署metrics-server - 簡書 (jianshu.com)

kubernetes(k8s)部署wordpress示例① - 簡書 (jianshu.com)

僅提供參考,非權威內容。

如有問題請點選頁尾(聯絡博主)發聵

一、需求分析

目的:本次實驗是使用kubernets平臺部署WordPress部落格系統,最終可對外提供訪問。

需求:1、可提供持久化儲存的MySQL;2、配置探針檢測應用是否存活;3、 配置 HPA,讓應用能夠自動應對流量高峰期。4、增加滾動更新策略,這樣可以保證在更新應用的時候,服務不會被中斷。5、把部署的應用整合到一個 YAML 檔案 wordpress-all.yaml 中;6、埠對映,外部可訪問。

注意:使用pv儲存要事先搭建好NFS服務,本文不涉及NFS搭建。

二、平臺規劃

主機 IP
Master 192.168.30.30
Node1 192.168.30.31

三、部署流程

1、建立PV和PVC

1.1、進入master節點的終端,先建立一個用於WordPress服務的namespace

kubectl create namespace blog					//建立一個名稱空間,名稱為blog

1.2、建立PV和PVC用於為MySQL提供持續儲存

新建一個WordPress資料夾,用於存放相關yaml檔案

mkdir /root/wordpress

編寫PVyaml檔案

#####master#####
mkdir -p /nfs/pv1
vim /root/wordpress/pv1.yaml
#####pv的yaml檔案(注意修改)
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mypv
  namespace: blog
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /nfs/pv1
    server: 192.168.30.30	
    
//namespace使用建立的blog
//ReadWriteOnce			可讀寫但只能被一個節點掛載
//path:	/nfs/pv			掛載到本機/nfs/pv目錄,需要事先建立好此目錄
//server: 192.168.30.30	NFS伺服器的地址,根據自己實際情況填寫
kubectl apply -f /root/wordpress/pv1.yaml


1.3、建立PVC

vim /root/wordpress/pvc1.yaml
#pvc的yaml檔案
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
  namespace: blog
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: mypv
  resources:
    requests:
      storage: 1Gi
      
kubectl apply -f /root/wordpress/pvc1.yaml

1.4、建立MySQL的Deployment物件

#####master#####
vim /root/wordpress/mysql-db.yaml
#mysql的deploymnet的檔案
//注:
//namespace使用上一步自己建立的名稱空間
//建立wordpress時,mysql相關引數需與此處建立mysql時儲存一致
        
          
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deploy
  namespace: blog
  labels:
    apps: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.6
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
          name: dbport
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: rootPassWord
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          value: wordpress
        - name: MYSQL_PASSWORD
          value: wordpress
        volumeMounts:
        - name: db-pv
          mountPath: /var/lib/mysql
      volumes:
      - name: db-pv
        persistentVolumeClaim:
          claimName: mypvc
kubectl apply -f mysql-db.yaml

1.5、建立MySQL的service

#建立mysql的service.yaml檔案
vim /root/wordpress/mysql-service.yaml


apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: blog
spec:
  selector:
    app: mysql
  ports:
  - name: mysqlport
    protocol: TCP
    port: 3306
    targetPort: 3306
    
kubectl apply -f /root/wordpress/mysql-service.yaml

1.6建立 Wordpress 的 Deployment 物件,新增滾動更新策略,配置資源限額

編輯wordpress的yaml檔案

#####master#####
vim /root/wordpress/wordpressdeploy.yaml
#wordpress的deploymnet的檔案
//注:
//namespace使用上一步自己建立的名稱空間
//密碼都要與MySQL密碼相匹配
//host填MySQL的虛擬IP
//resources裡定義資源的上限和下限
        
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-deploy
  namespace: blog
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: wordpress
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: wdport
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql:3306
        - name: WORDPRESS_DB_USER
          value: wordpress
        - name: WORDPRESS_DB_PASSWORD
          value: wordpress resources:
        resources:  
          requests:
            cpu: 100m
            memory: 10Mi
          limits:
            cpu: 100m
            memory: 50Mi
        

          
          
kubectl apply -f wordpressdeploy.yaml

1.7、建立 Wordpress 的 Service 物件

#建立wordpress的service.yaml檔案
vim /root/wordpress/wordpress-service.yaml
//NodePort屬性對映埠,提供外部訪問

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  namespace: blog
spec:
  type: NodePort								
  selector:
    app: wordpress
  ports:
  - name: wordpressport
    protocol: TCP
    port: 80
    targetPort: wdport
    
kubectl apply -f /root/wordpress/wordpress-service.yaml

1.8主機瀏覽器嘗試訪問,http://IP:埠

http://192.168.30.30:埠/

已經可以訪問

1.9、對 pod 增加 liveness probe 和 rediness probe 兩個探針,每 10s 檢測一次應用是否可讀,每 3s 檢測一次應用是否存活。

存活探針liveness採用tcpSocket埠探測方式,每3s一次檢測80埠是否存活;就緒探針readiness採用httpGet方式每10s一次探測wardpress主頁的http返回值是否正常。

#新增livenessProbe檢測80是否可讀
#新增readinessProbe檢測http主頁是否存活
#修改wordpress的deployment檔案為如下
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-deploy
  namespace: blog
  labels:
    app: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 0 
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: wordpress
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: wdport
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql:3306
        - name: WORDPRESS_DB_USER
          value: wordpress
        - name: WORDPRESS_DB_PASSWORD
          value: wordpress
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 3
        readinessProbe:
          httpGet:
            path: /index.php
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10
kubectl apply -f wordpressdeploy.yaml

配置 HPA,讓應用能夠自動應對流量高峰期。

kubectl autoscale deployment wordpress-deploy --memory-percent=10 --min=1 --max=10 -n blog

四、(補充)master節點metrics-server部署

在使用HPA的時候,k8s系統需要進行資源監控,才能使HPA生效,所有需要部署metrics-server用於監測node,pod等的CPU,記憶體使用情況。

1、修改apiserver檔案,新增如下配置(已有項不用加)

vim /etc/kubernetes/manifests/kube-apiserver.yaml
    ········
    - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
    - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    - --requestheader-allowed-names=aggregator
    - --requestheader-extra-headers-prefix=X-Remote-Extra-
    - --requestheader-group-headers=X-Remote-Group
    - --requestheader-username-headers=X-Remote-User
    - --runtime-config=api/all=true
    - --enable-aggregator-routing=true
    
    ······
    
    
    
#重啟
systemctl restart kubelet.service

2、下載部署檔案

cd 
wget http://139.196.207.44:8888/down/NondVZwgq0SO -O metrics-server-0.3.6.zip
unzip metrics-server-0.3.6.zip 
cd metrics-server-0.3.6/deploy/1.8+/
vim metrics-server-deployment.yaml

[root@master1 1.8+]# vim metrics-server-deployment.yaml
            ······
 30       - name: metrics-server
            ## 修改國內映象
 31         image: registry.cn-hangzhou.aliyuncs.com/ljck8s/metrics-server-amd64:v0.3.6
 32         imagePullPolicy: IfNotPresent
 33         # 新增command
            command:
 34         - /metrics-server
 35         - --metric-resolution=30s
 36         - --kubelet-insecure-tls
 37         - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
           
            ·····

3、部署

kubectl apply -f .

#檢視狀態是否為running
kubectl -n kube-system get pods -l k8s-app=metrics-server


#檢視是否有報錯
kubectl -n kube-system logs -l k8s-app=metrics-server -f


#檢視資源監控能否正常顯示
kubectl top node

五、遇到的問題:

1、

(未解決)

2、

(未解決)