Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 使用pod获取kubernetes节点上的设备装载信息_Shell_Docker_Kubernetes Pod - Fatal编程技术网

Shell 使用pod获取kubernetes节点上的设备装载信息

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

团队

我有下面的pod.yaml,它输出pod的挂载信息,但现在我希望它显示节点的挂载信息,或者也显示该信息。任何提示如何授予pod权限,使其在运行pod的k8s主机上运行相同的命令,并在pod日志的输出中列出该命令

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