kubernetes实现Nginx+Tomcat+NFS实现动静分离Web站点

发布时间 2023-10-08 09:25:30作者: 小糊涂90
1.#运⾏nginx:
将nginx运⾏在k8s中并可以从外部访问到nginx的web⻚⾯。

1.1.#Nginx镜像制作规划:
基于基础的centos/ubuntu/alpine镜像,制作公司内部基础镜像-Nginx基础镜像--Nginx业务镜像:

1.1.1#Centos基础镜像制作:
# cd /opt/k8s-data/ #dockerfile与yaml⽬录
# cd dockerfile/system/centos/ #系统镜像⽬录
root@k8s-master1:/opt/k8s-data/dockerfile/system/centos# tree
.
├── build-command.sh
├── Dockerfile
└── filebeat-6.8.1-x86_64.rpm
0 directories, 3 files

root@k8s-master1:/opt/k8s-data/dockerfile/system/centos# cat Dockerfile
FROM harbor.magedu.net/baseimages/centos:7.6.1810
MAINTAINER tan "123456@qq.com"
ADD filebeat-6.8.1-x86_64.rpm /tmp/
RUN yum install -y epel-release /tmp/filebeat-6.8.1-x86_64.rpm && rm -rf /tmp/filebeat-6.8.1-x86_64.rpm
RUN yum install -y vim wget tree pcre pcre-devel gcc gcc-c++ zlib zlib-devel openssl openssl-devel net-tools iotop unzip zip iproute ntpdate nfs-utils tcpdump telnet traceroute
RUN rm -rf /etc/localtime && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#基于脚本实现镜像⾃动build及上传到harbor功能
root@k8s-master1:/opt/k8s-data/dockerfile/system/centos# cat build-command.sh
#!/bin/bash
docker build -t harbor.magedu.net/baseimages/centos-base:v7.6 .
sleep 1
docker push harbor.magedu.net/baseimages/centos-base:v7.6

#执⾏构建centos 基础镜像
构建完成后⾃动上传⾄本地harbor服务器
root@k8s-master1:/opt/k8s-data/dockerfile/system/centos#bash build-command.sh

1.1.2#Nginx 基础镜像制作:
制作⼀个通⽤的Ningx镜像
# pwd
/opt/k8s-data/dockerfile/pub-images/nginx-base
# tree
.
├── build-command.sh
├── Dockerfile
└── nginx-1.14.2.tar.gz
0 directories, 3 files

# cat Dockerfile
#Nginx Base Image
FROM harbor.magedu.net/baseimages/centos-base:v7.6
MAINTAINER tan "123456@qq.com"
RUN yum install -y vim wget tree lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop
ADD nginx-1.14.2.tar.gz /usr/local/src/
RUN cd /usr/local/src/nginx-1.14.2 && ./configure  && make && make install && ln -sv /usr/local/nginx/sbin/nginx /usr/sbin/nginx &&useradd nginx -u 2001

# cat build-command.sh
#!/bin/bash
docker build -t harbor.magedu.net/pub-images/nginx-base:v1.14.2 .
sleep 1
docker push harbor.magedu.net/pub-images/nginx-base:v1.14.2

#执⾏构建Nginx基础镜像:
# bash build-command.sh

1.1.3#Nginx业务镜像制作:
基于Nginx基础镜像,制作N个不同服务的Nginx业务镜像:
#镜像⽂件列表:
# pwd
/opt/k8s-data/dockerfile/linux36/nginx
# tree
.
├── build-command.sh
├── Dockerfile
├── index.html
├── nginx.conf
└── webapp
 └── index.html
1 directory, 5 files

#Dockerfile⽂件内容:
# cat Dockerfile
#Nginx Base Image
FROM harbor.magedu.net/pub-images/nginx-base:v1.14.2
ADD nginx.conf /usr/local/nginx/conf/nginx.conf
ADD webapp/* /usr/local/nginx/html/webapp/
ADD index.html /usr/local/nginx/html/index.html
#RUN mkdir /usr/local/nginx/html/webapp/about /usr/local/nginx/html/webapp/images
EXPOSE 80 443
CMD ["nginx"]

#build-command脚本:
# cat build-command.sh
#!/bin/bash
docker build -t harbor.magedu.net/linux36/nginx-web1:v1 .
sleep 1
docker push harbor.magedu.net/linux36/nginx-web1:v1

#测试⻚⾯⽂件内容:
# cat webapp/index.html
Nginx webapp test page

#Nginx配置⽂件:
# vim nginx.conf
daemon off; #关闭后台运⾏
#upstream tomcat_webserver {
# server linux35-tomcat-app1-
spec.linux35.svc.linux35.local:80;
# server linux35-tomcat-app2-
spec.linux35.svc.linux35.local:80;
#}
 server {
..................
# location /myapp {
# proxy_pass http://tomcat_webserver;
# proxy_set_header Host $host;
# proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
# proxy_set_header X-Real-IP
$remote_addr;
# }
...................
 }
 
#执⾏构建Nginx 业务镜像:
# bash build-command.sh

#测试nginx业务镜像可以启动为容器:
# docker run -it --rm -p 8801:80 harbor.magedu.net/linux36/nginx-web1:v1

#访问测试Nginx业务web⻚⾯:
#curl 192.168.7.101:8801/webapp/
Nginx webapp test page

1.2#yaml⽂件及语法基础:
需要提前创建好yaml⽂件,并创建好好pod运⾏所需要的namespace、yaml⽂件等资源

1.2.1#创建业务namespace yaml⽂件:
# pwd
/opt/k8s-data/yaml/
# mkdir namespaces linux36
# cd namespaces
# cat linux36.yaml
apiVersion: v1 #API版本
kind: Namespace #类型为namespac
metadata: #定义元数据
  name: linux36 #namespace名称

1.2.2#创建并验证namespace:
# kubectl apply -f linux36.yaml
namespace/linux36 created
# kubectl get namespaces
NAME STATUS AGE
default Active 21d
kube-public Active 21d
kube-system Active 21d
linux36 Active 45s

#nginx业务yaml文件详解
# pwd
/opt/k8s-data/yaml/linux36
# mkdir nginx tomcat-app1 tomcat-app2
# cd nginx/
# pwd
/opt/k8s-data/yaml/linux36/nginx
# cat nginx.yaml
kind: Deployment #类型,是deployment控制器,kubectl
explain Deployment
apiVersion: extensions/v1beta1 #API版本,# kubectl
explain Deployment.apiVersion
metadata: #pod的元数据信息,kubectl explain 
Deployment.metadata
 labels: #⾃定义pod的标签,# kubectl explain 
Deployment.metadata.labels
 app: linux36-nginx-deployment-label #标签名称为app值为linux36-nginx-deployment-label,后⾯会⽤到此标签
 name: linux36-nginx-deployment #pod的名称
 namespace: linux36 #pod的namespace,默认是defaule
spec: #定义deployment中容器的详细信息,kubectl explain 
Deployment.spec
 replicas: 1 #创建出的pod的副本数,即多少个pod,默认值为1
 selector: #定义标签选择器
 matchLabels: #定义匹配的标签,必须要设置
 app: linux36-nginx-selector #匹配的⽬标标签,
  template: #定义模板,必须定义,模板是起到描述要创建的pod的作⽤
 metadata: #定义模板元数据
 labels: #定义模板label,
Deployment.spec.template.metadata.labels
 app: linux36-nginx-selector #定义标签,等于
Deployment.spec.selector.matchLabels
 spec: #定义pod信息
 containers:#定义pod中容器列表,可以多个⾄少⼀个,pod不能动态增减容器
 - name: linux36-nginx-container #容器名称
 image: harbor.magedu.net/linux36/nginx-web1:v1 #镜像地址
 #command: ["/apps/tomcat/bin/run_tomcat.sh"]
#容器启动执⾏的命令或脚本
 #imagePullPolicy: IfNotPresent
 imagePullPolicy: Always #拉取镜像策略
 ports: #定义容器端⼝列表
 - containerPort: 80 #定义⼀个端⼝
 protocol: TCP #端⼝协议
 name: http #端⼝名称
 - containerPort: 443 #定义⼀个端⼝
 protocol: TCP #端⼝协议
 name: https #端⼝名称
 env: #配置环境变量
 - name: "password" #变量名称。必须要⽤引号引起来
 value: "123456" #当前变量的值
 - name: "age" #另⼀个变量名称
 value: "18" #另⼀个变量的值
 resources: #对资源的请求设置和限制设置
 limits: #资源限制设置,上限
 cpu: 500m #cpu的限制,单位为core数,可以写0.5或者500m等CPU压缩值
 memory: 1024Mi #内存限制,单位可以为Mib/Gib,将⽤于docker run --memory参数
 requests: #资源请求的设置
 cpu: 200m #cpu请求数,容器启动的初始可⽤数量,可以写0.5或者500m等CPU压缩值
 memory: 512Mi #内存请求⼤⼩,容器启动的初始可⽤数量,⽤于调度pod时候使⽤
 
 
---
kind: Service #类型为service
apiVersion: v1 #service API版本, service.apiVersion
metadata: #定义service元数据,service.metadata
 labels: #⾃定义标签,service.metadata.labels
 app: linux36-nginx #定义service标签的内容
 name: linux36-nginx-spec #定义service的名称,此名称会被DNS解析
 namespace: linux36 #该service⾪属于的namespaces名称,即把service创建到哪个namespace⾥⾯
spec: #定义service的详细信息,service.spec
 type: NodePort #service的类型,定义服务的访问⽅式,默认为ClusterIP, service.spec.type
 ports: #定义访问端⼝, service.spec.ports
 - name: http #定义⼀个端⼝名称
 port: 80 #service 80端⼝
 protocol: TCP #协议类型
 targetPort: 80 #⽬标pod的端⼝
 nodePort: 30001 #node节点暴露的端⼝
 - name: https #SSL 端⼝
 port: 443 #service 443端⼝
 protocol: TCP #端⼝协议
 targetPort: 443 #⽬标pod端⼝
 nodePort: 30043 #node节点暴露的SSL端⼝
 selector: #service的标签选择器,定义要访问的⽬标pod
 app: linux36-nginx #将流量路到选择的pod上,须等于Deployment.spec.selector.matchLabels

1.3#k8s中创建Nginx pod:
创建Nginx pod 并测试通过node port访问
#Nginx yaml⽂件:
root@k8s-master1:/opt/k8s-data/yaml/linux36/nginx#cat nginx.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: linux36-nginx-deployment-label
  name: linux36-nginx-deployment
  namespace: linux36
spec:
  replicas: 1
  selector:
    matchLabels:
      app: linux36-nginx-selector
  template:
    metadata:
      labels:
        app: linux36-nginx-selector
    spec:
      containers:
      - name: linux36-nginx-container
        image: harbor.magedu.net/linux36/nginx-web1:v1
        #command: ["/apps/tomcat/bin/run_tomcat.sh"]
        #imagePullPolicy: IfNotPresent
        imagePullPolicy: Always
        ports:
        - containerPort: 80
          protocol: TCP
          name: http
        - containerPort: 443
          protocol: TCP
          name: https
        env:
        - name: "password"
          value: "123456"
        - name: "age"
          value: "18"
        resources:
          limits:
            cpu: 2
            memory: 2Gi
          requests:
            cpu: 500m
            memory: 1Gi
 
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: linux36-nginx-service-label
  name: linux36-nginx-service
  namespace: linux36
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30002
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
    nodePort: 30443
  selector:
    app: linux36-nginx-selector
    
 
1.3.2#创建Nginx pod: 
# kubectl apply -f nginx.yaml
deployment.extensions/linux36-nginx-deployment
created
service/linux36-nginx-spec created

1.3.3#测试访问Nginx web界⾯:
#curl 192.168.7.110:30001/webapp/
Nginx webapp test page

2#运行tomcat
基于基础的centos镜像,制作公司内部基础镜像--jdk镜像--tomcat基础镜像--tomcat业务镜像

2.1#JDK基础镜像制作:
2.1.1#JDK基础镜像⽂件列表:
# pwd
/opt/k8s-data/dockerfile/pub-images #共⽤镜像⽬录
# cd jdk-1.8.212/
# tree
.
├── build-command.sh
├── Dockerfile
├── jdk-8u212-linux-x64.tar.gz
└── profile
0 directories, 4 files

2.1.2#Dockerfile⽂件内容:
# cat Dockerfile
#JDK Base Image
FROM harbor.magedu.net/baseimages/centos-base:v7.6 
MAINTAINER tan "123456@qq.com"
ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_212/usr/local/jdk && groupadd tomcat -g 2018 &&useradd tomcat -u 2018 -g 2018
ADD profile /etc/profile
ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin

2.1.3#build-command脚本:
# cat build-command.sh
#!/bin/bash
docker build -t harbor.magedu.net/pub-images/jdk-base:v8.212 .
sleep 1
docker push harbor.magedu.net/pub-images/jdk-base:v8.212

2.1.4#执⾏构建JDK基础镜像:
#bash build-command.sh

2.1.5#验证JDK镜像启动为容器后的java环境:
# docker run -it --rm harbor.magedu.net/pub-images/jdk-base:v8.212 bash
[root@73bfac24b94e /]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10,mixed mode)

2.2#tomcat基础镜像制作:
2.2.1#基础镜像⽂件列表:
# pwd
/opt/k8s-data/dockerfile/pub-images/tomcat-base
# tree
.
├── apache-tomcat-8.5.43.tar.gz
├── build-command.sh
└── Dockerfile
0 directories, 3 files

2.2.2#Dockerfile⽂件内容:
# cat Dockerfile
#JDK Base Image
FROM harbor.magedu.net/pub-images/jdk-base:v8.212
MAINTAINER tan "123456@qq.com"
RUN mkdir /apps /data/tomcat/webapps /data/tomcat/logs -pv
ADD apache-tomcat-8.5.43.tar.gz /apps
RUN ln -sv /apps/apache-tomcat-8.5.43 /apps/tomcat && chown -R tomcat.tomcat /apps /data -R
#ADD filebeat-6.4.2-x86_64.rpm /tmp/
#RUN yum install -y /tmp/filebeat-6.4.2-x86_64.rpm&& rm -rf /tmp/filebeat-6.4.2-x86_64.rpm

2.3.3#build-command脚本:
# cat build-command.sh
#!/bin/bash
docker build -t harbor.magedu.net/pub-images/tomcat-base:v8.5.43 .
sleep 3
docker push harbor.magedu.net/pub-images/tomcat-base:v8.5.43

2.3.4#构建tomcat基础镜像:
# bash build-command.sh

2.3.5#测试访问tomcat基础镜像启动为容器:
# docker run -it --rm -p 8801:8080 harbor.magedu.net/pub-images/tomcat-base:v8.5.43
[root@7a5c2e1b67b3 /]# /apps/tomcat/bin/catalina.sh 
start
Using CATALINA_BASE: /apps/tomcat
Using CATALINA_HOME: /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME: /usr/local/jdk/jre
Using CLASSPATH: 
/apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomc
at-juli.jar
Tomcat started.
#curl 192.168.7.101:8801

2.4#tomcat业务镜像app1制作:
2.4.1#cat业务镜像⽂件列表:
# pwd
/opt/k8s-data/dockerfile/linux36/tomcat-app1
# tree
.
├── app1.tar.gz
├── build-command.sh
├── catalina.sh
├── Dockerfile
├── filebeat.yml
├── myapp
│ └── index.html
├── run_tomcat.sh
└── server.xml
1 directory, 8 files

2.4.2#Dockerfile⽂件内容:
# cat Dockerfile
#tomcat web1
FROM harbor.magedu.net/pub-images/tomcat-base:v8.5.43
ADD catalina.sh /apps/tomcat/bin/catalina.sh
ADD server.xml /apps/tomcat/conf/server.xml
#ADD myapp/* /data/tomcat/webapps/myapp/
ADD app1.tar.gz /data/tomcat/webapps/myapp/
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
#ADD filebeat.yml /etc/filebeat/filebeat.yml
RUN chown -R tomcat.tomcat /data/ /apps/
EXPOSE 8080 8443
CMD ["/apps/tomcat/bin/run_tomcat.sh"]

2.4.3#build-command脚本:
# cat build-command.sh
#!/bin/bash
TAG=$1
docker build -t harbor.magedu.net/linux36/tomcat-app1:${TAG} .
sleep 3
docker push harbor.magedu.net/linux36/tomcat-app1:${TAG}

2.4.4#执⾏构建tomcat业务镜像:
# bash build-command.sh 2019-08-02_11_02_30

2.4.5#测试tomcat业务镜像启动为容器:
# docker run -it --rm -p 8801:8080 harbor.magedu.net/linux36/tomcat-app1:2019-08-02_11_02_30
Using CATALINA_BASE: /apps/tomcat
Using CATALINA_HOME: /apps/tomcat
Using CATALINA_TMPDIR: /apps/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: 
/apps/tomcat/bin/bootstrap.jar:/apps/tomcat/bin/tomc
at-juli.jar
Tomcat started.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 9e1909ef9dce
192.168.7.248 k8s-vip.example.com

2.4.6#访问tomcat业务镜像web⻚⾯:
#curl 192.168.7.101:8801/myapp/
app1 v2

2.5#在k8s环境运⾏tomcat:
2.5.1#创建tomcat业务pod:
# pwd
/opt/k8s-data/yaml/linux36/tomcat-app1
# kubectl apply -f tomcat-app1.yaml
deployment.extensions/linux36-tomcat-app1-deployment
created
service/linux36-tomcat-app1-service created

2.5.2#验证pod启动成功:
# kubectl get pods -n linux36
NAME 
READY STATUS RESTARTS AGE
linux36-nginx-deployment-b59f56c67-4q6hw 1/1 Running 1 98m
linux36-tomcat-app1-deployment-794d7fcd6-stph2 1/1 Running 0 46s

2.5.3#测试访问tomcat业务pod的nodeport:
#curl 192.168.7.110:30003/myapp/
app1 v2

3.#k8s中nginx+tomcat实现动静分离:
#实现⼀个通⽤的nginx+tomcat动静分离web架构,即⽤户访问的静态⻚⾯和图⽚在由nginx直接响应,⽽动态请求则基于location转发⾄tomcat。
#重点:Nginx基于tomcat的service name转发⽤户请求到tomcat业务app

3.1#查看tomcat app1的server name:
#kubectl get service -n linux36
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
linux36-nginx-service NodePort 10.20.89.249 <none> 80:300002/TCP,443:30443/TCP 162m
linux36-tomcat-app1-service NodePort 10.20.204.23 <none> 80:300003/TCP 25m

3.2#nginx业务镜像配置:
3.2.1#nginx配置⽂件:
upstream tomcat_webserver {
 	server linux36-tomcat-app1-service.linux36.svc.linux36.local:80;
}

server {
 	location /myapp {
         proxy_pass http://tomcat_webserver;
		 proxy_set_header Host $host;
		 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		 proxy_set_header X-Real-IP $remote_addr;
	 }
}

3.2.3#重新构建nginx业务镜像:
#bash build-command.sh

3.2.3#镜像启动为容容器并进入容器验证配置⽂件:

3.3#重新创建业务nginx pod:
两种实现⽅式

3.3.1#删除并重新创建nginx业务镜像:
# pwd
/opt/k8s-data/yaml/linux36/nginx
# kubectl delete -f nginx.yaml
# vim nginx.yaml
image: harbor.magedu.net/linux36/nginx-web1:v1 #更新镜像地址
# kubectl apply -f nginx.yaml

3.3.2#更新nginx业务镜像版本号:
#重新构建新版本镜像,然后打⼀个新的tag号,然后通过指定镜像的⽅式对pod进⾏更新。

3.3.2.1#:准备新版本nginx业务镜像:
# docker tag harbor.magedu.net/linux36/nginx-web1:v1 harbor.magedu.net/linux36/nginx-web1:v2
# docker push harbor.magedu.net/linux36/nginx-web1:v2

3.3.2.2#获取当前deployment:
# kubectl get deployment -n linux36
NAME READY UP-TO-DATE AVAILABLE AGE
linux36-nginx-deployment 1/1 1 1 7m30s
linux36-tomcat-app1-deployment 1/1 1 1 45m

3.3.2.3#执⾏更新nginx业务镜像版本:
# kubectl set image deployment/linux36-nginx-deployment linux36-nginx-container=harbor.magedu.net/linux36/nginx-web1:v2 -n
linux36deployment.extensions/linux36-nginx-deployment image updated

3.3.3#web访问测试:
验证能否通过nginx访问到tomcat的app项⽬
#curl 192.168.7.110:30002/myapp/
app1 v2

4.#基于NFS实现动静分离:
#图⽚的上传由后端服务器tomcat完成,图⽚的读取由前端的nginx响应,就需要nginx与tomcat的数据保持⼀致性,因此需要将数据保存到k8s环境外部的存储服务器,然后再挂载到各nginx与tomcat的容器中进⾏相应的操作。
http://docs.kubernetes.org.cn/429.html #存储卷类型及使⽤

4.1#NFS 服务器环境准备:
# mkdir /data/linux36 -p #数据总⽬录
# mkdir /data/linux36/images #图⽚⽬录
# mkdir /data/linux36/static #静态⽂件⽬录
# vim /etc/exports
/data/linux36 *(rw,no_root_squash)
# systemctl restart nfs-server

4.2#NFS客户端挂载并测试写⼊⽂件:
# mount -t nfs 192.168.7.108:/data/linux36 /mnt
# cp /etc/passwd /mnt/ #必须能够写⼊数据

4.3#nginx 业务容器yaml:
# cat nginx.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: linux36-nginx-deployment-label
  name: linux36-nginx-deployment
  namespace: linux36
spec:
  replicas: 1
  selector:
    matchLabels:
      app: linux36-nginx-selector
  template:
    metadata:
      labels:
        app: linux36-nginx-selector
    spec:
      containers:
      - name: linux36-nginx-container
        image: harbor.magedu.net/linux36/nginxweb1:v1
        #command: ["/apps/tomcat/bin/run_tomcat.sh"]
        #imagePullPolicy: IfNotPresent
        imagePullPolicy: Always
        ports:
        - containerPort: 80
          protocol: TCP
          name: http
        - containerPort: 443
          protocol: TCP
          name: https
        env:
        - name: "password"
          value: "123456"
        - name: "age"
          value: "18"
        resources:
          limits:
            cpu: 2
            memory: 2Gi
          requests:
            cpu: 500m
            memory: 1Gi
        volumeMounts:
        - name: linux36-images
          mountPath:/usr/local/nginx/html/webapp/images
          readOnly: false
        - name: linux36-static
          mountPath:/usr/local/nginx/html/webapp/static
          readOnly: false
      volumes: #kubectl explain Deployment.spec.template.spec.volumes
      - name: linux36-images
        nfs:
          server: 192.168.7.108
          path: /data/linux36/images
      - name: linux36-static
        nfs:
          server: 192.168.7.108
          path: /data/linux36/static
 
 ---
kind: Service
apiVersion: v1
metadata:
  labels:
   app: linux36-nginx-service-label
  name: linux36-nginx-service
  namespace: linux36
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30002
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
    nodePort: 30443
  selector:
    app: linux36-nginx-selector
 
4.4#执⾏更新yaml⽂件:
# kubectl apply -f nginx.yaml
deployment.extensions/linux36-nginx-deployment
configured
service/linux36-nginx-service unchanged

4.5#pod中验证NFS挂载:
#kubectl get pods -n linux36
#kubectl exec -it pod-name bash -n linux36
#df -TH    #查看是否挂载成功

4.6#tomcat业务pod更新挂载:
root@k8s-master1:/opt/k8s-data/yaml/linux36/tomcat-app1# pwd
/opt/k8s-data/yaml/linux36/tomcat-app1

root@k8s-master1:/opt/k8s-data/yaml/linux36/tomcat-app1# cat tomcat-app1.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: linux36-tomcat-app1-deployment-label
  name: linux36-tomcat-app1-deployment
  namespace: linux36
spec:
  replicas: 1
  selector:
    matchLabels:
      app: linux36-tomcat-app1-selector
  template:
    metadata:
      labels:
        app: linux36-tomcat-app1-selector
    spec:
      containers:
      - name: linux36-tomcat-app1-container
        image: harbor.magedu.net/linux36/tomcat-app1:2019-08-02_11_02_30
        #command: ["/apps/tomcat/bin/run_tomcat.sh"]
        #imagePullPolicy: IfNotPresent
        imagePullPolicy: Always
        ports:
         - containerPort: 8080
           protocol: TCP
           name: http
        #env:
        #- name: "password"
        # value: "123456"
        #- name: "age"
        # value: "18"
        #resources:
        # limits:
        # cpu: 4
        # memory: 4Gi
        # requests:
        # cpu: 2
        # memory: 4Gi
        volumeMounts:
        - name: linux36-images
          mountPath: /data/tomcat/webapps/myapp/images
          readOnly: false
        - name: linux36-static
          mountPath: /data/tomcat/webapps/myapp/static
          readOnly: false
      volumes:
      - name: linux36-images
        nfs:
          server: 192.168.7.108
          path: /data/linux36/images
      - name: linux36-static
        nfs:
          server: 192.168.7.108
          path: /data/linux36/static
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: linux36-tomcat-app1-service-label
  name: linux36-tomcat-app1-service
  namespace: linux36
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
    nodePort: 30003
  selector:
    app: linux36-tomcat-app1-selector
 
 
4.7#执⾏更新tomcat app1业务容器yaml:
root@k8s-master1:/opt/k8s-data/yaml/linux36/tomcatapp1# kubectl apply -f tomcat-app1.yaml
deployment.extensions/linux36-tomcat-app1-deployment
configured
service/linux36-tomcat-app1-service unchanged

4.8#验证tomcat app1业务容器NFS挂载:
#进入容器,df -TH命令查看挂载情况

4.9#访问web测试:
上传图⽚和html⽂件,测试访问

4.9.1#上传数据到NFS:
root@k8s-ha1:/data/linux36# tree
.
├── images
│   └── 1.jpg
└── static
 └── index.html
2 directories, 2 files

4.9.2#访问nginx 业务pod:
http://192.168.7.110:30002/myapp/images/1.jpg

4.9.3#访问tomcat业务pod:
http://192.168.7.110:30002/webapp/images/1.jpg
http://192.168.7.110:30003/myapp/images/1.jpg