​Nginx K8s + Docker 部署 ,虚拟机部署教程。

Nginx K8s + Docker 部署 ,虚拟机部署教程!

Linux 虚拟机 部署

1、下载nginx:

http://nginx.org/download/

2、选择一个版本进行下载:

wget http://nginx.org/download/nginx-1.14.0.tar.gz

3、解压:

tar -xvf nginx-1.14.0.tar.gz

4、安装依赖包:

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel

5、编译、安装

cd $NGINX_HOME


./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_realip_module


make
make install

6、修改nginx.conf

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    upstream admin-server {
        server 10.68.60.100:18060    max_fails=2  fail_timeout=30;
        server 10.68.60.101:18060    max_fails=2  fail_timeout=30;
        server 10.68.60.110:18060    max_fails=2  fail_timeout=30;
    }
  
    upstream api-server {
        server 10.68.60.100:18082    max_fails=2  fail_timeout=30;
        server 10.68.60.101:18082    max_fails=2  fail_timeout=30;
        server 10.68.60.110:18082    max_fails=2  fail_timeout=30;
    }


    server {
                listen                  8080;
                server_name             api-server;
                keepalive_timeout       30;
                location / {
                        proxy_pass http://api-server;
                        proxy_set_header X-Forwarded-Host $host;
                        proxy_set_header X-Forwarded-Server $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $host:$server_port;




                }
    }


    server {
                listen                  8081;
                server_name             admin-server;
                keepalive_timeout       30;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Server $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host:$server_port;
                location / {
                        proxy_pass http://admin-server;
                        proxy_set_header X-Forwarded-Host $host;
                        proxy_set_header X-Forwarded-Server $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $host:$server_port;
                }
    }
}


7、启动nginx:

$NGINX_HOMT/sbin/nginx

8、重启nginx:

$NGINX_HOMT/sbin/nginx -s stop
$NGINX_HOMT/sbin/nginx

9、热更新:

$NGINX_HOMT/sbin/nginx -s reload

Docker + k8s 部署

前提:假定你已经安装并集成好docker和k8s基础环境!

1、创建docker构建目录:

mkdir -p /opt/docker/build/nginx

2、下载nginx:

cd /opt/docker/build/nginx
wget http://nginx.org/download/nginx-1.14.0.tar.gz

3、编写Dockerfile,内容如下:

FROM ansible/centos7-ansible


ADD nginx-1.14.0.tar.gz /


RUN mkdir -p /opt/soft &&\
  mkdir -p /opt/tarball &&\
  mkdir -p /opt/src &&\
  touch /opt/daemon.log &&\
  mv /nginx-1.14.0 /opt/src &&\
  yum -y install gcc pcre-devel zlib-devel openssl openssl-devel &&\
  cd /opt/src/nginx-1.14.0 &&\
  ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_realip_module &&\
  make &&\
  make install &&\
  cp -R /usr/share/zoneinfo/Asia/Shanghai /etc/localtime




ENTRYPOINT [ "sh", "-c", "/usr/local/nginx/sbin/nginx && tail -f /opt/daemon.log" ]

4、构建docker 镜像:

cd /opt/docker/build/nginx


docker build --network host -t 10.68.60.103:5000/nginx:1.14.0 -f Dockerfile .

注意:10.68.60.103:5000需要根据你自己的docker私服地址修改。

5、推送镜像到私服:

docker push 10.68.60.103:5000/nginx:1.14.0

6、编写k8s nginx-deployment.yaml文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: my-namespace
  labels:
    app: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      nodeSelector:
        deploy.nginx: "true"
      restartPolicy: Always
      containers:
      - name: nginx-container
        image: "10.68.60.103:5000/nginx:1.14.0"
        ports:
#        - containerPort: 80
        volumeMounts:
        - mountPath: "/usr/local/nginx/conf/nginx.conf"
          name: "nginx-volume-conf"
        - mountPath: "/usr/local/nginx/logs"
          name: "nginx-volume-log"
      imagePullSecrets:
      - name: regcred
      volumes:
      - name: "nginx-volume-conf"
        hostPath:
          path: "/opt/apps-mgr/nginx/conf/nginx.conf"
          type: File
      - name: "nginx-volume-log"
        hostPath:
          path: "/opt/apps-mgr/nginx/logs"
          type: DirectoryOrCreate

注意:/opt/apps-mgr/nginx/conf/nginx.conf文件需要提前配置好,笔者这里配置文件如下:

#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    upstream admin-server {
        server 10.68.60.100:18060    max_fails=2  fail_timeout=30;
        server 10.68.60.101:18060    max_fails=2  fail_timeout=30;
        server 10.68.60.110:18060    max_fails=2  fail_timeout=30;
    }
  
    upstream api-server {
        server 10.68.60.100:18082    max_fails=2  fail_timeout=30;
        server 10.68.60.101:18082    max_fails=2  fail_timeout=30;
        server 10.68.60.110:18082    max_fails=2  fail_timeout=30;
    }


    server {
                listen                  8080;
                server_name             api-server;
                keepalive_timeout       30;
                location / {
                        proxy_pass http://api-server;
                        proxy_set_header X-Forwarded-Host $host;
                        proxy_set_header X-Forwarded-Server $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $host:$server_port;




                }
    }


    server {
                listen                  8081;
                server_name             admin-server;
                keepalive_timeout       30;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Server $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host:$server_port;
                location / {
                        proxy_pass http://admin-server;
                        proxy_set_header X-Forwarded-Host $host;
                        proxy_set_header X-Forwarded-Server $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $host:$server_port;
                }
    }
}


初步可以先用默认的配置,等启动成功后再修改,修改后需要进入Pod重启Nginx,进入命令如下:

kubectl get pods -A | grep nginx
kubectl exec -it -n my-namespace nginx-deployment-5dcf489c44-f9c4r
/usr/local/nginx/sbin/nginx -s stop && /usr/local/nginx/sbin/nginx

另外nodeSelector部分作用是指定nginx运行在某个节点上。需要提前通过下面命令给指定节点打上标签,例如指定允许在node2时:

kubectl label nodes node2 deploy.nginx=true

7、执行deployment:

kubectl apply -f nginx-deployment.yaml
kubectl get pods -A
kubectl -n my-namespace describe pod xxxxx
kubectl -n my-namespace get events

8、编写k8s nginx-service.yaml文件,内容如下:

apiVersion: v1
kind: Service
metadata:
  namespace: my-namespace
  name: nginx-api-server-service
spec:
  type: NodePort
  selector:
    app: nginx-pod
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      nodePort: 8080


---


apiVersion: v1
kind: Service
metadata:
  namespace: my-namespace
  name: nginx-admin-server-service
spec:
  type: NodePort
  selector:
    app: nginx-pod
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
      nodePort: 8081

9、执行service:

kubectl apply -f nginx-service.yaml
kubectl get service -A
kubectl -n my-namespace describe service xxxxx
kubectl -n my-namespace get events

---------- 正文结束 ----------

长按扫码关注微信公众号

Java软件编程之家

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值