K8S部署wordpress(整合多个k8s技术点)

1.部署NFS-SERVER

 [root@nfs-server k8s]# hostnamectl set-hostname NFS-Server
 [root@nfs-server k8s]# setenforce 0
 [root@nfs-server k8s]# systemctl stop firewalld
 [root@nfs-server k8s]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
 [root@nfs-server k8s]# yum -y install nfs-utils rpcbind
 [root@nfs-server k8s]# mkdir -p /data/k8s
 [root@nfs-server k8s]# chmod -R 755 /data/k8s/
 [root@nfs-server k8s]# cat /etc/exports
 /data/k8s  *(rw,sync,no_root_squash)
 [root@nfs-server k8s]# systemctl start rpcbind.service
 [root@nfs-server k8s]# systemctl enable rpcbind

2.部署StorageClass

2-1.部署NFS-Client

[root@master storageclass]# cat nfs-client.yaml 
 kind: Deployment
 apiVersion: apps/v1
 metadata:
   name: nfs-client-provisioner
 spec:
   replicas: 1
   strategy:
     type: Recreate
   selector:
     matchLabels:
       app: nfs-client-provisioner
   template:
     metadata:
       labels:
         app: nfs-client-provisioner
     spec:
       serviceAccountName: nfs-client-provisioner
       containers:
         - name: nfs-client-provisioner
           image: quay.io/external_storage/nfs-client-provisioner:latest
           volumeMounts:
             - name: nfs-client-root
               mountPath: /persistentvolumes
           env:
             - name: PROVISIONER_NAME
               value: fuseim.pri/ifs
             - name: NFS_SERVER
               value: 192.168.1.239
             - name: NFS_PATH
               value: /data/k8s
       volumes:
         - name: nfs-client-root
           nfs:
             server: 192.168.1.239
             path: /data/k8s

2-2.定义为storageclass

[root@master storageclass]# cat nfs-client-class.yaml 
 apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: course-nfs-storage
 provisioner: fuseim.pri/ifs

2-3.设置role规则

[root@master storageclass]# cat nfs-client-class.yaml 
 apiVersion: storage.k8s.io/v1
 kind: StorageClass
 metadata:
   name: course-nfs-storage
 provisioner: fuseim.pri/ifs
 [root@master storageclass]# cat nfs-client-sa.yaml 
 apiVersion: v1
 kind: ServiceAccount
 metadata:
   name: nfs-client-provisioner
 
 kind: ClusterRole
 apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: nfs-client-provisioner-runner
 rules:
 apiGroups: [""]
 resources: ["persistentvolumes"]
 verbs: ["get", "list", "watch", "create", "delete"]
 apiGroups: [""]
 resources: ["persistentvolumeclaims"]
 verbs: ["get", "list", "watch", "update"]
 apiGroups: ["storage.k8s.io"]
 resources: ["storageclasses"]
 verbs: ["get", "list", "watch"]
 apiGroups: [""]
 resources: ["events"]
 verbs: ["list", "watch", "create", "update", "patch"]
 apiGroups: [""]
 resources: ["endpoints"]
 verbs: ["create", "delete", "get", "list", "watch", "patch", "update"] 
 
 kind: ClusterRoleBinding
 apiVersion: rbac.authorization.k8s.io/v1
 metadata:
   name: run-nfs-client-provisioner
 subjects:
 kind: ServiceAccount
 name: nfs-client-provisioner
 namespace: default
 roleRef:
 kind: ClusterRole
 name: nfs-client-provisioner-runner
 apiGroup: rbac.authorization.k8s.io 

2-4.检查pod是否正常

[root@master storageclass]# kubectl get pod 
 NAME                                       READY   STATUS             RESTARTS   AGE
 ……..
 nfs-client-provisioner-57f77648dc-v5d7r    1/1     Running            8          12d

3.部署NGINX前端

[root@master configmap]# cat nginx-nfs.yaml 
 apiVersion: apps/v1
 kind: StatefulSet
 metadata:
   name: nfs-blog-2
 spec:
   serviceName: "nginx"
   replicas: 1
   selector:
     matchLabels:
       app: nfs-blog-2
   template:
     metadata:
       labels:
         app: nfs-blog-2
     spec:
       terminationGracePeriodSeconds: 10
       containers:
       - name: nginx
         image: nginx:1.7.9
         ports:
         - containerPort: 443
           name: web
         volumeMounts:
         - name: www
           mountPath: /usr/share/nginx/html
         - name: conf
           mountPath: /etc/nginx/conf.d/wordpress.conf
           subPath: wordpress.conf
       volumes:
        - name: www
          persistentVolumeClaim:
             claimName: www-nfs-blog-0
        - name: conf
          configMap:
                name: nginx-configmap
                items:
                   - key: blog_conf
                     path: wordpress.conf
 apiVersion: v1
 kind: Service
 metadata:
   name: blog2
   labels:
     name: blog2
 spec:
   ports:
 port: 443
 targetPort: 443
 nodePort: 30004
 type: NodePort
 selector:
 app: nfs-blog-2 

3-1. 创建configmap

[root@master configmap]# cat nginx-configmap.yaml 
 apiVersion: v1
 kind: ConfigMap
 metadata:
   name: nginx-configmap
 data:
   blog_conf: |-
     server {
     listen       443 ssl;
     server_name   localhost;
     ssl_certificate       /usr/share/nginx/html/cert/blog.pem;
     ssl_certificate_key   /usr/share/nginx/html/cert/blog.key;
     ssl_session_timeout     5m;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
     ssl_prefer_server_ciphers on;
     root   /usr/share/nginx/html;
     if (!-e $request_filename){  
             rewrite ^/(.*) /index.php last;  
     }  
 location / {     index  index.php index.html index.htm; } error_page   500 502 503 504  /50x.html; location = /50x.html {     root   /usr/share/nginx/html; } location ~* \.php$ {    fastcgi_index   index.php;    fastcgi_pass    php:9000;    include           fastcgi_params;    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;      }    }

3-2 创建PHP服务

[root@master lnmp]# cat php-nfs.yaml
 apiVersion: apps/v1
 kind: StatefulSet
 metadata:
   name: nfs-php
 spec:
   serviceName: "php"
   replicas: 1
   selector:
     matchLabels:
       app: nfs-php
   template:
     metadata:
       labels:
         app: nfs-php
     spec:
       terminationGracePeriodSeconds: 10
       containers:
       - name: php
         image: 192.168.1.154/library/php7-fpm:latest
         ports:
         - containerPort: 9000
           name: php
         volumeMounts:
         - name: www
           mountPath: /usr/share/nginx/html
       volumes:
       - name: www
         persistentVolumeClaim:
           claimName: www-nfs-blog-0
 apiVersion: v1
 kind: Service
 metadata:
   name: php
   labels:
     name: php
 spec:
   ports:
 port: 9000
 targetPort: 9000
 selector:
 app: nfs-php 

4.部署MYSQL

[root@master lnmp]# cat mysql-nfs.yaml 
 apiVersion: apps/v1
 kind: StatefulSet
 metadata:
   name: nfs-db
 spec:
   serviceName: "mysql"
   replicas: 1
   selector:
     matchLabels:
       app: nfs-db
   template:
     metadata:
       labels:
         app: nfs-db
     spec:
       terminationGracePeriodSeconds: 10
       containers:
       - name: mysql
         image: mysql:5.6
         env:
         - name: MYSQL_ROOT_PASSWORD
           valueFrom:
             secretKeyRef:
               name: mysql-pass
               key: password
         ports:
         - containerPort: 3306
           name: db
         volumeMounts:
         - name: mysql
           mountPath: /var/lib/mysql
   volumeClaimTemplates:
 metadata:
   name: mysql
   annotations:
     volume.beta.kubernetes.io/storage-class: course-nfs-storage
 spec:
   accessModes: [ "ReadWriteOnce" ]
   resources:
     requests: 
           storage: 2Gi
 apiVersion: v1
 kind: Service
 metadata:
   name: db
   labels:
     name: db
 spec:
   ports:
 port: 33306
 targetPort: 3306
 nodePort: 30003
 type: NodePort
 selector:
 app: nfs-db 

5.设置secret选项

[root@master mysqlsecret]# cat kustomization.yaml 
 secretGenerator:
 name: mysql-pass
 literals:
 password=XXXXXXXXX
 resources:
 mysql-nfs.yaml 

6.创建前端服务

[root@master configmap]# ls
 nginx-configmap.yaml  nginx-nfs.yaml  php-nfs.yaml
 [root@master configmap]# kubectl create -f ./

7.创建MYSQL服务

[root@master mysqlsecret]# ls
 kustomization.yaml  mysql-nfs.yaml
 [root@master mysqlsecret]# kubectl create -k ./

8.上传前端代码到nfs服务器

[root@nfs-server k8s]# ls
 default-mysql-nfs-db-0-pvc-d341c981-7c5a-49d4-b544-d61d8d829fd2 # MYSQL的存储路径
 default-www-nfs-blog-0-pvc-dad5db2d-c726-4311-ab45-0585f5ea4908 # 前端的存放路径
 [root@nfs-server default-www-nfs-blog-0-pvc-dad5db2d-c726-4311-ab45-0585f5ea4908]# ls
 cert         readme.html      wp-admin              wp-config-sample.php  wp-links-opml.php  wp-settings.php
 index.php    readme.txt       wp-blog-header.php    wp-content            wp-load.php        wp-signup.php
 jwplayer.js  wordpress.conf   wp-comments-post.php  wp-cron.php           wp-login.php       wp-trackback.php
 license.txt  wp-activate.php  wp-config.php         wp-includes           wp-mail.php        xmlrpc.php
 [root@nfs-server default-www-nfs-blog-0-pvc-dad5db2d-c726-4311-ab45-0585f5ea4908]# cat wp-config.php
 ……..
 // ** MySQL settings - You can get this info from your web host ** //
 /** The name of the database for WordPress */
 define( 'DB_NAME', 'wordpress');
 /** MySQL database username */
 define( 'DB_USER', 'wp');
 /** MySQL database password */
 define( 'DB_PASSWORD', 'XXXXXXXXX');
 /** MySQL hostname */
 define( 'DB_HOST', 'db.default.svc.cluster.local:33306');  #此处是数据库的Services地址
 ……

9.设置数据库

[root@master mysqlsecret]# kubectl exec -it nfs-db-0 /bin/bash
 root@nfs-db-0:/# mysql -u root -p
 mysql> create database wordpress;
 mysql> grant all privileges on wordpress.* to "wp"@"%" Identified by "XXXXXXXXX";
 mysql> flush privilegs;
 10-1.导入准备好的备份数据库
 [root@docker temp]# mysql -h 192.168.1.150 -P 30003 -u wp -p wordpress < wordpress_20210126.sql #我这边设置了DB可以所有网段登陆,通过mysql-cilent登陆导入数据库库即可

10.检查POD状态

[root@master database]# kubectl get pod
 NAME                                       READY   STATUS             RESTARTS   AGE
 hpa-nginx-deploy-64b889f7dc-krpvm          1/1     Running            8          39d
 jenkins-demo-5469c947c8-p8dnm              0/1     ImagePullBackOff   0          7d
 nfs-blog-0                                 1/1     Running            10         12d
 nfs-blog-2-0                               1/1     Running            4          10d
 nfs-client-provisioner-57f77648dc-v5d7r    1/1     Running            8          12d
 nfs-client-provisioner2-7996f87b55-9swdr   1/1     Running            1          5d3h
 nfs-db-0                                   1/1     Running            6          12d
 nfs-php-0                                  1/1     Running            3          10d

11.登陆页面效果

K8S部署wordpress(整合多个k8s技术点)

原创文章,作者:admin,如若转载,请注明出处:https://www.starz.top/2021/01/26/k8s%e9%83%a8%e7%bd%b2wordpress%e6%95%b4%e5%90%88%e5%a4%9a%e4%b8%aak8s%e6%8a%80%e6%9c%af%e7%82%b9/

发表评论

邮箱地址不会被公开。 必填项已用*标注