1.#运⾏nginx:
将nginx运⾏在k8s中并可以从外部访问到nginx的web⻚⾯。
1.1.#Nginx镜像制作规划:
基于基础的centos/ubuntu/alpine镜像,制作公司内部基础镜像-Nginx基础镜像--Nginx业务镜像:
1.1.1
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
root@k8s-master1:/opt/k8s-data/dockerfile/system/centos# cat build-command.sh
docker build -t harbor.magedu.net/baseimages/centos-base:v7.6 .
sleep 1
docker push harbor.magedu.net/baseimages/centos-base:v7.6
构建完成后⾃动上传⾄本地harbor服务器
root@k8s-master1:/opt/k8s-data/dockerfile/system/centos#bash build-command.sh
1.1.2
制作⼀个通⽤的Ningx镜像
/opt/k8s-data/dockerfile/pub-images/nginx-base
.
├── build-command.sh
├── Dockerfile
└── nginx-1.14.2.tar.gz
0 directories, 3 files
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
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
1.1.3
基于Nginx基础镜像,制作N个不同服务的Nginx业务镜像:
/opt/k8s-data/dockerfile/linux36/nginx
.
├── build-command.sh
├── Dockerfile
├── index.html
├── nginx.conf
└── webapp
└── index.html
1 directory, 5 files
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
EXPOSE 80 443
CMD ["nginx"]
docker build -t harbor.magedu.net/linux36/nginx-web1:v1 .
sleep 1
docker push harbor.magedu.net/linux36/nginx-web1:v1
Nginx webapp test page
daemon off;
spec.linux35.svc.linux35.local:80;
spec.linux35.svc.linux35.local:80;
server {
..................
$proxy_add_x_forwarded_for;
$remote_addr;
...................
}
Nginx webapp test page
1.2
需要提前创建好yaml⽂件,并创建好好pod运⾏所需要的namespace、yaml⽂件等资源
1.2.1
/opt/k8s-data/yaml/
apiVersion: v1
kind: Namespace
metadata:
name: linux36
1.2.2
namespace/linux36 created
NAME STATUS AGE
default Active 21d
kube-public Active 21d
kube-system Active 21d
linux36 Active 45s
/opt/k8s-data/yaml/linux36
/opt/k8s-data/yaml/linux36/nginx
kind: Deployment
explain Deployment
apiVersion: extensions/v1beta1
explain Deployment.apiVersion
metadata:
Deployment.metadata
labels:
Deployment.metadata.labels
app: linux36-nginx-deployment-label
name: linux36-nginx-deployment
namespace: linux36
spec:
Deployment.spec
replicas: 1
selector:
matchLabels:
app: linux36-nginx-selector
template:
metadata:
labels:
Deployment.spec.template.metadata.labels
app: linux36-nginx-selector
Deployment.spec.selector.matchLabels
spec:
containers:#定义pod中容器列表,可以多个⾄少⼀个,pod不能动态增减容器
- name: linux36-nginx-container
image: harbor.magedu.net/linux36/nginx-web1:v1
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
memory: 1024Mi
requests:
cpu: 200m
memory: 512Mi
---
kind: Service
apiVersion: v1
metadata:
labels:
app: linux36-nginx
name: linux36-nginx-spec
namespace: linux36
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
nodePort: 30001
- name: https
port: 443
protocol: TCP
targetPort: 443
nodePort: 30043
selector:
app: linux36-nginx
1.3
创建Nginx pod 并测试通过node port访问
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
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
deployment.extensions/linux36-nginx-deployment
created
service/linux36-nginx-spec created
1.3.3
Nginx webapp test page
2
基于基础的centos镜像,制作公司内部基础镜像--jdk镜像--tomcat基础镜像--tomcat业务镜像
2.1
2.1.1
/opt/k8s-data/dockerfile/pub-images
.
├── build-command.sh
├── Dockerfile
├── jdk-8u212-linux-x64.tar.gz
└── profile
0 directories, 4 files
2.1.2
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
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
2.1.5
[root@73bfac24b94e /]
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
2.2.1
/opt/k8s-data/dockerfile/pub-images/tomcat-base
.
├── apache-tomcat-8.5.43.tar.gz
├── build-command.sh
└── Dockerfile
0 directories, 3 files
2.2.2
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
2.3.3
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
2.3.5
[root@7a5c2e1b67b3 /]
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.
2.4
2.4.1
/opt/k8s-data/dockerfile/linux36/tomcat-app1
.
├── 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
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 app1.tar.gz /data/tomcat/webapps/myapp/
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
RUN chown -R tomcat.tomcat /data/ /apps/
EXPOSE 8080 8443
CMD ["/apps/tomcat/bin/run_tomcat.sh"]
2.4.3
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
2.4.5
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
app1 v2
2.5
2.5.1
/opt/k8s-data/yaml/linux36/tomcat-app1
deployment.extensions/linux36-tomcat-app1-deployment
created
service/linux36-tomcat-app1-service created
2.5.2
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
app1 v2
3.#k8s中nginx+tomcat实现动静分离:
3.1
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
3.2.1
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
3.2.3
3.3
两种实现⽅式
3.3.1
/opt/k8s-data/yaml/linux36/nginx
image: harbor.magedu.net/linux36/nginx-web1:v1
3.3.2
3.3.2.1
3.3.2.2
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
linux36deployment.extensions/linux36-nginx-deployment image updated
3.3.3
验证能否通过nginx访问到tomcat的app项⽬
app1 v2
4.#基于NFS实现动静分离:
http://docs.kubernetes.org.cn/429.html
4.1
/data/linux36 *(rw,no_root_squash)
4.2
4.3
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
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:
- 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
deployment.extensions/linux36-nginx-deployment
configured
service/linux36-nginx-service unchanged
4.5
4.6
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
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
name: http
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
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
4.9
上传图⽚和html⽂件,测试访问
4.9.1
root@k8s-ha1:/data/linux36# tree
.
├── images
│ └── 1.jpg
└── static
└── index.html
2 directories, 2 files
4.9.2
http://192.168.7.110:30002/myapp/images/1.jpg
4.9.3
http://192.168.7.110:30002/webapp/images/1.jpg
http://192.168.7.110:30003/myapp/images/1.jpg
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具