我试图将Kubernetes卷用于Nginx,但遇到了问题。设置卷后,Nginx无法为HTML页面提供服务。我也尝试了PV和PVS,这次也得到了同样的错误。
nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
volumes:
- name: nginxhtml
# persistentVolumeClaim:
# claimName: pvc
hostPath:
path: /home/amjed/Documents/SPS/k8s/mongo/mnt
containers:
- name: nginx
image: nginx
volumeMounts:
- name: nginxhtml
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
首先,创建要安装在minikube:中的文件夹
dobrucki@minikube:~$ minikube ssh
Last login: Tue Jan 11 13:54:50 2022 from 192.168.49.1
docker@minikube:~$ ls -l
total 4
drwxr-xr-x 2 docker docker 4096 Jan 11 13:56 nginx-mount
该文件夹是Pods中映射到/usr/share/nginx/html
的文件夹,因此当您连接到服务时,将显示您粘贴在此处的文件。请确保该文件夹中有一些.html
文件,否则会出现403错误。对我来说,示例index.html
是这样的:
<html>
<head>
</head>
<body>
<h1>Hello World<h1>
</body>
</html>
您还需要在部署清单中添加securityContext
fsGroup
,以便/usr/share/nginx/html
归nginx用户(101uid(所有。
然后,使用以下方法应用部署和LoadBalancer资源:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
securityContext:
fsGroup: 101
volumes:
- name: nginxhtml
hostPath:
path: /home/docker/nginx-mount
containers:
- name: nginx
image: nginx
volumeMounts:
- name: nginxhtml
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 80
之后,您可以检查内容是否正确提供
dobrucki@minikube:~$ curl $(minikube service nginx-service --url)
<html>
<head>
</head>
<body>
<h1>Hello World<h1>
</body>
</html>
如果你还有其他问题,请告诉我。
- 将副本计数减少到1
- 验证/home/amjed/Documents/SPS/k8s/mongo/mnt位置是否有效,并且可以从吊舱访问