Kubernetes yaml部署-无法创建符号链接



我正在尝试进行nginx部署,在创建容器的过程中,我想创建多个符号链接。但由于某种原因,它不起作用,容器崩溃了。

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: tcc
component: nginx
name: tcc-nginx-deployment
namespace: dev2
spec:
replicas: 1
selector:
matchLabels:
app: tcc
component: nginx
template:
metadata:
labels:
app: tcc
component: nginx
spec:
containers:
- image: nginx
name: nginx
command:
- /bin/sh
- -c
- |
ln -s /shared/apps/ /var/www
rm -r /etc/nginx/conf.d
ln -s /shared/nginx-config/ /etc/nginx/conf.d
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /shared
name: efs-pvc
volumes:
- name: efs-pvc
persistentVolumeClaim:
claimName: tcc-efs-storage-claim

容器没有运行,因为在执行command块之后,容器正在退出,这是预期的行为。

与其在yaml模板中使用command中的符号链接(这不是最佳实践解决方案(,为什么不使用Kubernetes内置的解决方案,并且根本不使用command块?

您应该使用subPath,它旨在为单个pod上的多个不同目录共享一个卷中的目录:

有时,在单个pod中共享一个卷用于多种用途是很有用的。volumeMounts.subPath属性指定引用卷内的子路径,而不是其根路径。

在您的情况下,部署yaml应该如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: tcc
component: nginx
name: tcc-nginx-deployment
namespace: dev2
spec:
replicas: 1
selector:
matchLabels:
app: tcc
component: nginx
template:
metadata:
labels:
app: tcc
component: nginx
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /shared
name: efs-pvc
- mountPath: /etc/nginx/conf.d
name: efs-pvc
subPath: nginx-config
- mountPath: /var/www
name: efs-pvc
subPath: apps
volumes:
- name: efs-pvc
persistentVolumeClaim:
claimName: tcc-efs-storage-claim

此外,如果您只想装载NGINX的配置文件,您可以使用ConfigMap而不是卷-请查看此答案以了解更多信息。

  • 这是因为您要求容器只创建符号链接。因此,一旦创建了这些
    符号链接,容器就会退出。

  • 为了避免这种情况,添加"nginx" "-g" "daemon off;"如下:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: tcc
component: nginx
name: tcc-nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: tcc
component: nginx
template:
metadata:
labels:
app: tcc
component: nginx
spec:
containers:
- image: nginx
name: nginx
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- |
ln -s /shared/apps/ /var/www
rm -r /etc/nginx/conf.d
ln -s /shared/nginx-config/ /etc/nginx/conf.d
"nginx" "-g" "daemon off;" ; # after creating above symbolic links it will start nginx daemon 
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /shared
name: efs-pvc
volumes:
- name: efs-pvc
persistentVolumeClaim:
claimName: tcc-efs-storage-claim

最新更新