创作时间:2022-08-09
更新时间:2023-03-13 | 更新内容:修改deploy.yaml文件中service对pod的选择label;修改nfs的挂载路径为路径不能为文件,容器挂载路径不能为文件;更新nginx-configmap中default.conf的内容 | 感谢:西瓜蓬蓬
如遇到问题请联系。
使用kubernetes来部署nginx服务,nginx一般是作为服务的入口,其在kubernetes的部署方式也大致相似,我将其分为三种----直接部署、使用数据卷部署、使用ConfigMap部署。个人建议使用ConfigMap部署。
直接部署
这种方式就是直接将nginx复制到容器内部,将其制作为镜像,之后进行部署,优点吗?不知道。缺点在每次更新配置文件时,需要重新制作经镜像
部署步骤
前提:需要有自己的nginx配置文件
- 拉去nginx官方镜像,建议选择稳定版(stable)
$ docker pull nginx:1.22.0
- 编写Dockerfile
FROM nginx:1.22.0
# 删除官方nginx镜像默认的配置
RUN rm -rf /etc/nginx/conf.d/default.conf
# 将nginx.conf(自己的nginx配置)添加到默认配置目录下
# 注意:nginx.conf需要与Dockerfile在同一目录
ADD ./nginx.conf /etc/nginx/conf.d/
- 构建自己的nginx镜像
# 在Dockerfile所在目录执行,v1.0.0是新构建nginx镜像的tag
$ docker build -t nginx:v1.0.0 .
- 编写nginx-service-deployment.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-servie
name: nginx-service
# 命名空间,没有可以删除,默认是default
namespace: hello-world
spec:
ports:
# 对外暴露的端口
- nodePort: 30013
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-pod
# NodePort类型可以对外暴露端口
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deploy
name: nginx-deploy
namespace: hello-world
spec:
replicas: 1
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
namespace: hello-world
spec:
containers:
# 镜像名称
- image: nginx:v1.0.0
name: nginx
ports:
- containerPort: 80
resources: {}
- 执行yaml文件
$ kubectl apply -f nginx-service-deployment.yaml
- 通过nodeIp+nodePort进行访问
使用数据卷部署
这种方式是通过将nginx的配置文件以数据卷的形式挂载出来,修改nginx配置文件,只需要修改挂载出来的文件,同时删除pod即可。缺点是需要数据卷做支撑,如nfs等,如果使用pv、pvc,还需要配置pv、pvc文件,在集群模式下不要使用host进行挂载,测试时可以使用;优点是部署好后改动小。
部署步骤
前提:需要有nginx的配置文件,并且配置好nfs共享文章来源:https://www.toymoban.com/news/detail-455581.html
- 配置nfs共享,将nginx配置文件共享出来,略
注意:挂载的方式只支持文件夹挂载不支持文件挂载,不仅是在nfs配置中,容器的配置中也是一样的 - 编写nginx-service-deployment.yaml,示例不适用pv、pvc
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-service
name: nginx-service
# 命名空间,没有可以删除,默认是default
namespace: hello-world
spec:
ports:
# 对外暴露的端口
- nodePort: 30013
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-pod
# NodePort类型可以对外暴露端口
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deploy
name: nginx-deploy
namespace: hello-world
spec:
replicas: 1
selector:
matchLabels:
app: nginx-pod
strategy: {}
template:
metadata:
labels:
app: nginx-pod
namespace: hello-world
spec:
containers:
- image: nginx:1.22.0
name: nginx
ports:
- containerPort: 80
resources: {}
volumeMounts:
- name: nginx-config
mountPath: "/etc/nginx/conf.d/"
volumes:
- name: nginx-config
nfs:
# 共享的目录
path: "/opt/nginx/"
server: xxx.xxx.xxx.xxx
- 执行yaml文件
$ kubectl apply -f nginx-service-deployment.yaml
- 通过nodeIp+nodePort进行访问
使用ConfigMap进行部署
这种方式是通过ConfigMap的方式将nginx的配置文件挂载出来,修改nginx的配置文件时,只需要修改ConfigMap,同时删除就的pod即可。缺点是配置文件时只读文件,如果对文件有特殊要求的不行;优点是改动小,操作简单。文章来源地址https://www.toymoban.com/news/detail-455581.html
部署步骤
- 编写nginx-configmap.yaml
这里写了一个简单的例子,访问/hello-world/进行跳转
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-configmap
namespace: hello-world
data:
default.conf: |
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
- 编写nginx-service-deployment.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-service
name: nginx-service
# 命名空间,没有可以删除,默认是default
namespace: hello-world
spec:
ports:
# 对外暴露的端口
- nodePort: 30013
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-pod
# NodePort类型可以对外暴露端口
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deploy
name: nginx-deploy
namespace: hello-world
spec:
replicas: 1
selector:
matchLabels:
app: nginx-pod
strategy: {}
template:
metadata:
labels:
app: nginx-pod
namespace: hello-world
spec:
containers:
- image: nginx:1.22.0
name: nginx
ports:
- containerPort: 80
resources: {}
volumeMounts:
- name: nginx-config
mountPath: "/etc/nginx/conf.d/"
readOnly: true
volumes:
- name: nginx-config
configMap:
name: nginx-configmap
- 执行yaml文件
$ kubectl apply -f nginx-configmap.yaml
$ kubectl apply -f nginx-service-deployment.yaml
- 通过nodeIp+nodePort进行访问
到了这里,关于k8s部署nginx的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!