Shell 使用pod获取kubernetes节点上的设备装载信息
团队 我有下面的pod.yaml,它输出pod的挂载信息,但现在我希望它显示节点的挂载信息,或者也显示该信息。任何提示如何授予pod权限,使其在运行pod的k8s主机上运行相同的命令,并在pod日志的输出中列出该命令Shell 使用pod获取kubernetes节点上的设备装载信息,shell,docker,kubernetes-pod,Shell,Docker,Kubernetes Pod,团队 我有下面的pod.yaml,它输出pod的挂载信息,但现在我希望它显示节点的挂载信息,或者也显示该信息。任何提示如何授予pod权限,使其在运行pod的k8s主机上运行相同的命令,并在pod日志的输出中列出该命令 apiVersion: v1 kind: Pod metadata: name: command-demo labels: purpose: demonstrate-command spec: containers: - name: command-demo
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demonstrate-command
spec:
containers:
- name: command-demo-container
image: debian
command: ["/bin/bash", "-c"]
args:
- |
echo $HOSTNAME && mount | grep -Ec '/dev/sd.*\<csi' | awk '$0 <= 64 { print "Mounts are less than 64, that is found", $0 ;} $0 > 64 { print "Mounts are more than 64", $0 ;}'
restartPolicy: OnFailure
预期产出:
k8s_node1 << this is hostname of the k8s node on which above pod us running
Mounts are more than 64, that is found 65
k8s_node1除非将主机文件系统的一部分装载为卷,否则无法访问docker容器内的主机文件系统。您可以尝试将整个主机文件系统装载到pod中,如下所示。您可能需要为pod设置特权securityContext,具体取决于您尝试执行的操作
apiVersion: v1
kind: Pod
metadata:
name: dummy
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh"]
args: ["-c", "sleep 3600"]
volumeMounts:
- name: host
mountPath: /host
volumes:
- name: host
hostPath:
path: /
type: Directory
另一种方法,也可能是更好的方法,是从pod用SSH连接到主机并运行命令。您可以使用向下API获取主机IP-这些系统管理工具并不适合在容器中运行,而Kubernetes只在容器中运行。你为什么要通过Kubernetes发布这个?(Ansible、Chef和Salt Stack等工具可能更适合此任务,并且可能能够以本机方式管理主机设备装载。)grep行实际上正在计算给定模式的出现次数。awk打印实际按照条件工作。您验证了count的输出了吗?与kubernetes集成的原因是我可以生成日志,然后通过prometheus根据输出发出警报。有200个节点,我们需要自动化的方式,所以我决定使用守护程序,但第一步是使pod yaml工作,然后我将把它转换为DS。有了Ansible,我已经有了它,但谁会每天运行它呢?是的,这个命令运行得很好。你试过你的系统吗?当我试着编辑答案时,io.k8s.api.core.v1.Volume中的未知字段“path”。路径应该是hostPath的子级。
apiVersion: v1
kind: Pod
metadata:
name: dummy
spec:
containers:
- name: busybox
image: busybox
command: ["/bin/sh"]
args: ["-c", "sleep 3600"]
volumeMounts:
- name: host
mountPath: /host
volumes:
- name: host
hostPath:
path: /
type: Directory