我正在嘗試進行 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
uj5u.com熱心網友回復:
容器沒有運行,因為在command執行塊后,容器正在退出,這是預期的行為。
與其command在 yaml 模板中使用符號鏈接(這不是最佳實踐解決方案),為什么不使用 Kubernetes 內置的解決方案并且根本不使用command塊?
您應該使用subPathwhich 旨在為單個 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 而不是 volume - 檢查此答案以獲取更多資訊。
uj5u.com熱心網友回復:
那是因為您只是要求容器創建符號鏈接。因此,一旦
創建了這些符號鏈接,容器就會退出。為避免這種情況,請添加
"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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/386046.html
標籤:nginx Kubernetes Kubernetes-pod
