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

Kubernetes 云平台部署 WordPress流程

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


Kubernetes 云平台部署 WordPress流程

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

Kubernetes 云平台部署 WordPress流程

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

Kubernetes 云平台部署 WordPress流程

 

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

 Kubernetes 云平台部署 WordPress流程

Kubernetes 云平台部署 WordPress流程

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

Kubernetes 云平台部署 WordPress流程

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

Kubernetes 云平台部署 WordPress流程

Kubernetes 云平台部署 WordPress流程

1.8主机浏览器尝试访问,http://IP:端口

http://192.168.30.30:端口/

 Kubernetes 云平台部署 WordPress流程

                   已经可以访问

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

Kubernetes 云平台部署 WordPress流程

 

四、(补充)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

Kubernetes 云平台部署 WordPress流程

 

 

五、遇到的问题:

1、

(未解决)

Kubernetes 云平台部署 WordPress流程

2、

(未解决)

Kubernetes 云平台部署 WordPress流程

上一篇:XML和YAML文件的输入和输出


下一篇:【UEFI实战】SlimBootloader定制化