繁体   English   中英

动态创建“hostPath”卷挂载

[英]Creating "hostPath" volume mount dynamically

我有一个用例,我需要将 hostPath 挂载到 Pod,现在用例是挂载容器环境的 sock 文件,并且在 kubernetes 的较新版本中,我们有 containerd 而不是 docker,我想制作这个套接字动态挂载,即检查 docker 套接字文件是否存在,挂载否则检查容器套接字文件并挂载。

目前,我有这个

spec:
      volumes:
      - name: ctd-sock
        hostPath:
        path: "/run/containerd/containerd1.sock"
        type: Socket

我不确定如何使它动态化。 我查看了 官方文档,没有找到任何东西。

我认为没有一种方法可以像您发现的那样仅使用 pod 规范有条件地安装卷。 那么有type: FileOrCreate这是有条件的,但我认为这不适用于你的情况,因为它是一个套接字。

但是,如果您愿意执行一些 shell 脚本,则可以根据您检测到的容器运行时动态创建 yaml。

例如:

cr=$(kubectl get node -o=jsonpath={.items[0].status.nodeInfo.containerRuntimeVersion})
if [[ $cr =~ "containerd" ]]; then 
  echo 'Cluster uses containerd'
  # TODO: Create your pod with containerd socket
elif [[ $cr =~ "docker" ]]; then
  echo 'Cluster uses docker'
  # TODO: Create your pod with docker socket
else 
  echo 'Cluster uses something else'
  # TODO: Handle however you want
fi

也许这不是您希望的纯 Kubernetes 答案,但实际上,这可能是您最好的选择。

如果您正在寻找更高级的东西,您可以为此创建一个CRDcontroller ,而不是直接创建一个 pod,而是创建您的 CRD。 然后,在您的 controller 中,您将使其检查集群并根据集群的容器运行时以您需要的方式创建一个 pod。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM