微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

16--k8s之部署discuz项目

1.准备Nginx文件,构建为镜像

1、创建目录
[root@docter ~]# mkdir /blog/{PHP,Nginx,MysqL}
[root@docter ~]# cd /blog/Nginx/

2、编写Nginx的dockerfile文件
[root@docter Nginx]# cat Dockerfile 
FROM Nginx
ADD Nginx.conf /etc/Nginx/Nginx.conf
ADD default.conf /etc/Nginx/conf.d/default.conf
RUN groupadd www -g 666 && \
    useradd www -u 666 -g 666 -M -r -s /sbin/nologin
ADD discuz /usr/share/Nginx/html
RUN chown -R www.www /usr/share/Nginx/html
workdir  /usr/shar/Nginx/html
EXPOSE 80 443
CMD Nginx -g "daemon off;"

3、编写Nginx的default.conf 文件
[root@docter Nginx]# cat default.conf 
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;
    root   /usr/share/Nginx/html;
    
    location / {
        index  index.PHP index.html index.htm;
    }

    location ~ \.PHP$ {
        root           /usr/share/Nginx/html;
        fastcgi_pass   PHP:9000;
        fastcgi_index  index.PHP;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

3、编辑Nginx配置文件
[root@docker1 Nginx]# vim Nginx.conf 
user  www;
worker_processes  auto;

error_log  /var/log/Nginx/error.log notice;
pid        /var/run/Nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/Nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/Nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

keepalive_timeout  65;

gzip  on;

include /etc/Nginx/conf.d/*.conf;

4.上传discuz包
#上传,解压,只留upload,改名为discuz
[root@k8s-m-01 Nginx]# ll
total 16
-rw-r--r--  1 root root  449 Aug 14 14:38 default.conf
-rw-r--r--  1 root root  325 Aug 14 14:38 Dockerfile
-rw-r--r--  1 root root  607 Aug 14 14:39 Nginx.conf
drwxr-xr-x 13 root root 4096 Mar 22 19:44 upload

5、构建镜像
#在阿里云上面,先创建一个命名空间,再拉取镜像
[root@k8s-m-01 Nginx]# docker build -t registry.cn-shanghai.aliyuncs.com/cdank8s/web:discuz-Nginx-v1 .

#登录阿里云的本地仓库
[root@k8s-m-01 Nginx]# docker login registry.cn-hangzhou.aliyuncs.com
Username: danlleee
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

#把镜像上传到阿里云
[root@k8s-m-01 Nginx]# docker push registry.cn-hangzhou.aliyuncs.com/cdan-web/discuz:Nginx-v1
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/cdan-web/discuz]
c87af564398a: Pushed 
34ef6b102470: Pushed 
9300c38069e5: Pushed 
733dccb30fd7: Pushed 
314140127be1: Pushed 
fea76014ff25: Pushed 
e3135447ca3e: Pushed 
b85734705991: Pushed 
988d9a3509bb: Pushed 
59b01b87c9e7: Pushed 
7c0b223167b9: Pushed 
814bff734324: Pushed 
Nginx-v1: digest: sha256:c3fbc64e02bbde6dFeed60316db15f0614b603c56637f3e2dbce6a2e8c83525c size: 2823


#测试启动
[root@k8s-m-01 Nginx]# docker run -d --name Nginx registry.cn-hangzhou.aliyuncs.com/cdan-web/discuz:Nginx-v1

[root@k8s-m-01 Nginx]# docker ps -a | grep Nginx
11b38bc51294   registry.cn-shanghai.aliyuncs.com/cdank8s/web:discuz-v1   "/docker-entrypoint.…"   27 seconds ago   Exited (1) 27 seconds ago             Nginx
[root@k8s-m-01 Nginx]# docker exec -it 11b38bc51294 bash
Error response from daemon: Container 11b38bc51294484e5c1f86110e2b01c68a36db683e4cbb3c6190c5392269d9bd is not running
[root@k8s-m-01 Nginx]# ls
default.conf  discuz  Dockerfile  Nginx.conf


2.构建PHP镜像

#上传PHP包
[root@k8s-m-01 PHP]# ll
total 19436
drwxr-xr-x 13 root root     4096 Mar 22 19:44 discuz
-rw-r--r--  1 root root      327 Aug 14 16:47 Dockerfile
-rw-r--r--  1 root root 19889622 Apr 28 10:39 PHP.tar.gz
-rw-r--r--  1 root root      463 Aug 14 16:39 www.conf

2、上传PHP.tar.gz
[rook8s-m-01 PHP]# wget http://www.mmin.xyz:81/package/lnmp/PHP.tar.gz

#编辑PHP Dockerfile
[root@docker PHP]# vim Dockerfile
FROM centos:7
RUN groupadd www -g 666 && \
    useradd www -u 666 -g 666 -M -r -s /sbin/nologin
ADD PHP.tar.gz /tmp
RUN yum -y localinstall /tmp/*.rpm
ADD www.conf /etc/PHP-fpm.d/
EXPOSE 9000
workdir /usr/share/Nginx/html
ADD discuz /usr/share/Nginx/html
RUN chown -R www.www /usr/share/Nginx/html
CMD PHP-fpm -F

 
 #discuze复制过来
[root@k8s-m-01 PHP]# cp ../Nginx/discuz/ .

#创建PHP.repo
[root@k8s-m-01 PHP]# cat www.conf 
[www]
user = www
group = www
listen = 9000
request_terminate_timeout = 0
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/PHP-fpm/www-slow.log
PHP_admin_value[error_log] = /var/log/PHP-fpm/www-error.log
PHP_admin_flag[log_errors] = on
PHP_value[session.save_handler] = files
PHP_value[session.save_path]    = /var/lib/PHP/session
PHP_value[soap.wsdl_cache_dir]  = /var/lib/PHP/wsdlcache

#创建镜像
[root@k8s-m-01 PHP]# docker build -t registry.cn-hangzhou.aliyuncs.com/cdan-web/discuz:PHP-v1 .

#上传到本地
[root@k8s-m-01 PHP]# docker push registry.cn-hangzhou.aliyuncs.com/cdan-web/discuz:PHP-v1


3.创建yaml配置文件

# 1、编写MysqL.yaml
[root@k8s-m-01 discuz]# vim MysqL.yaml 
kind: Namespace
apiVersion: v1
Metadata:
  name: MysqL
---
kind: Deployment
apiVersion: apps/v1
Metadata:
  name: MysqL
  namespace: MysqL
spec:
  selector:
    matchLabels:
      app: MysqL
  template:
    Metadata:
      labels:
        app: MysqL
    spec:
      containers:
        - name: MysqL
          image: MysqL:5.7
          env:
            - name: MysqL_ROOT_PASSWORD
              value: "123"
            - name: MysqL_DATABASE
              value: discuz
          livenessProbe:
            exec:
              command:
                - "/bin/sh"
                - "-c"
                - "cat /etc/MysqL/my.cnf"
            initialDelaySeconds: 0
            periodSeconds: 3
            timeoutSeconds: 1
            successthreshold: 1
            failureThreshold: 3
          readinessProbe:
            tcpsocket:
              port: 3306
            initialDelaySeconds: 30
            periodSeconds: 1
            timeoutSeconds: 1
            successthreshold: 3
            failureThreshold: 1
---
kind: Service
apiVersion: v1
Metadata:
  name: MysqL
  namespace: MysqL
spec:
  ports:
    - port: 3306
      targetPort: 3306
      protocol: TCP
      name: MysqL
  selector:
    app: MysqL
    
    
    
# 2、编写web.yaml
[root@k8s-m-01 discuz]# vim web.yaml 
kind: Namespace
apiVersion: v1
Metadata:
  name: web
---
apiVersion: apps/v1
kind: Deployment
Metadata:
  name: web
  namespace: web
spec:
  selector:
    matchLabels:
      app: web
  template:
    Metadata:
      labels:
        app: web
    spec:
      containers:
        - name: PHP
          image: registry.cn-shanghai.aliyuncs.com/aliyun_mm/discuz:PHP-v2
          imagePullPolicy: Always
          livenessProbe:
            exec:
              command:
                - "/bin/sh"
                - "-c"
                - "cat /etc/PHP-fpm.d/www.conf"
            initialDelaySeconds: 0
            periodSeconds: 3
            timeoutSeconds: 1
            successthreshold: 1
            failureThreshold: 3
          readinessProbe:
            tcpsocket:
              port: 9000
            initialDelaySeconds: 10
            periodSeconds: 1
            timeoutSeconds: 1
            successthreshold: 3
            failureThreshold: 1
        - name: Nginx
          image: registry.cn-shanghai.aliyuncs.com/aliyun_mm/discuz:Nginx-v2
          imagePullPolicy: Always
          livenessProbe:
            exec:
              command:
                - "/bin/sh"
                - "-c"
                - "cat /etc/Nginx/Nginx.conf"
            initialDelaySeconds: 0
            periodSeconds: 3
            timeoutSeconds: 1
            successthreshold: 1
            failureThreshold: 3
          readinessProbe:
            tcpsocket:
              port: 80
            initialDelaySeconds: 30
            periodSeconds: 1
            timeoutSeconds: 1
            successthreshold: 3
            failureThreshold: 1
---
kind: Service
apiVersion: v1
Metadata:
  name: web
  namespace: web
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: http
  selector:
    app: web
  type: NodePort


4.生成yaml文件

# 1、生成yaml文件
[root@k8s-m-01 blog]# kubectl apply -f web.yaml 
namespace/web created
deployment.apps/web created
service/web created

[root@k8s-m-01 blog]# kubectl apply -f MysqL.yaml 
namespace/MysqL created
deployment.apps/MysqL created
service/MysqL created

# 2、查看
[root@k8s-m-01 blog]# kubectl get pod -n web
NAME                   READY   STATUS    RESTARTS   AGE
web-7f897d448c-v5vbg   2/2     Running   0          69s
[root@k8s-m-01 blog]# kubectl get pod -n MysqL
NAME                     READY   STATUS    RESTARTS   AGE
MysqL-6f9b947c9f-25rrx   1/1     Running   0          5m54s

[root@k8s-m-01 blog]# kubectl get svc -n web 
NAME   TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
web    NodePort   10.96.59.89   <none>        80:31558/TCP   2m13s

# 3、IP访问
192.168.15.11:31558

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐