Kubernetes 雲平臺部署 WordPress流程
阿新 • • 發佈:2021-11-21
參考文件:
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、
(未解決)