将 Pod 日志挂载到所需的卷目录
Mount Pod Logs to Desired Volume directory
我正在尝试将我的 Pod 日志目录从 /var/log/pods
挂载到本地节点卷 /var/data10
。
部署文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-counter
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
nodeSelector:
kubernetes.io/hostname: kworker3
containers:
- name: count
image: busybox
args: [/bin/sh, -c,
'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
ports:
- containerPort: 80
volumeMounts:
- name: dirvol
mountPath: "/var/log/containers"
readOnly: true
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_ID
valueFrom:
fieldRef:
fieldPath: metadata.uid
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
volumes:
- name: dirvol
persistentVolumeClaim:
claimName: nginx-pvc
PV+PVC文件:
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: nginx-pv
namespace: default
spec:
storageClassName: nginx-sc
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/var/data10"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: nginx-sc
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nginx-sc
namespace: default
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
---
航站楼 Window:
us@kworker3:~$ cd /var/log/pods/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b/
us@kworker3:/var/log/pods/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b$ cd count/
us@kworker3:/var/log/pods/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b/count$ ls
0.log
us@kworker3:/var/log/pods/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b/count$ cd
us@kworker3:~$
us@kworker3:~$
us@kworker3:~$
us@kworker3:~$ cd /var/data10
us@kworker3:/var/data10$ cd default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b/
us@kworker3:/var/data10/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b$ ls
us@kworker3:/var/data10/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b$ ls
我正在尝试获取日志文件 0.log
并将其放入持久卷 /var/data10
但是如您所见,它是空的。
我知道我可以使用像 fluentd 这样的日志记录代理来获取我的容器日志,但我正在尝试使用这种方式来获取我的日志。
请注意 我正在尝试将此场景应用于真实的 Web 应用程序,kubernetes pods 通常会将日志扔到 /var/log/containers 目录节点和我的目标是将(容器的)日志文件挂载到主机磁盘(/var/data10),这样当 pod 被删除时,我的卷中仍然会有日志。
符号 link 在 hostPath 中不起作用。使用 tee
在 pod echo ... | tee /pathInContainer/app.log
中创建一个副本,然后挂载到 /var/data10
hostPath 卷。如果 tee
不理想,你最好的选择是 运行 作为 sidecar 的日志代理。
请注意,您的 PV hostPath.path: "/var/data10"
将不包含任何数据,因为您的标准输出未保存在此处。您将此 hostPath 安装在容器中,因为“/var/log/containers”将毫无用处。
我正在尝试将我的 Pod 日志目录从 /var/log/pods
挂载到本地节点卷 /var/data10
。
部署文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-counter
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: my-nginx
template:
metadata:
labels:
app: my-nginx
spec:
nodeSelector:
kubernetes.io/hostname: kworker3
containers:
- name: count
image: busybox
args: [/bin/sh, -c,
'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
ports:
- containerPort: 80
volumeMounts:
- name: dirvol
mountPath: "/var/log/containers"
readOnly: true
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: POD_ID
valueFrom:
fieldRef:
fieldPath: metadata.uid
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
volumes:
- name: dirvol
persistentVolumeClaim:
claimName: nginx-pvc
PV+PVC文件:
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: nginx-pv
namespace: default
spec:
storageClassName: nginx-sc
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/var/data10"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: nginx-sc
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nginx-sc
namespace: default
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
---
航站楼 Window:
us@kworker3:~$ cd /var/log/pods/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b/
us@kworker3:/var/log/pods/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b$ cd count/
us@kworker3:/var/log/pods/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b/count$ ls
0.log
us@kworker3:/var/log/pods/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b/count$ cd
us@kworker3:~$
us@kworker3:~$
us@kworker3:~$
us@kworker3:~$ cd /var/data10
us@kworker3:/var/data10$ cd default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b/
us@kworker3:/var/data10/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b$ ls
us@kworker3:/var/data10/default_nginx-counter-6bdd59f45f-psd9x_f1999c22-6702-41b6-afb7-26db4239977b$ ls
我正在尝试获取日志文件 0.log
并将其放入持久卷 /var/data10
但是如您所见,它是空的。
我知道我可以使用像 fluentd 这样的日志记录代理来获取我的容器日志,但我正在尝试使用这种方式来获取我的日志。
请注意 我正在尝试将此场景应用于真实的 Web 应用程序,kubernetes pods 通常会将日志扔到 /var/log/containers 目录节点和我的目标是将(容器的)日志文件挂载到主机磁盘(/var/data10),这样当 pod 被删除时,我的卷中仍然会有日志。
符号 link 在 hostPath 中不起作用。使用 tee
在 pod echo ... | tee /pathInContainer/app.log
中创建一个副本,然后挂载到 /var/data10
hostPath 卷。如果 tee
不理想,你最好的选择是 运行 作为 sidecar 的日志代理。
请注意,您的 PV hostPath.path: "/var/data10"
将不包含任何数据,因为您的标准输出未保存在此处。您将此 hostPath 安装在容器中,因为“/var/log/containers”将毫无用处。