在 kubernetes 上为 kubelets/Perf Setup 启用 PodSharingNamespace

enabling PodSharingNamespace for kubelets / Perf Setup on kubernetes

我正在学习一个教程

Ensure you are using Kubernetes 1.10+ and the following settings are enabled: Feature-gate PodShareProcessNamespace=true is turned on for both apiserver and kubelet

我在网上搜索过,但找不到任何方法来为 kubelet 打开功能门控。一些站点建议编辑 /etc/kuberenetes/kubelet.env,但我的集群上似乎没有该文件。

那么为 kubelet 启用功能门的正确方法是什么?

编辑:(根据评论添加更多详细信息)

我的目标是 运行 通过 sidecar 注入在集群上运行。同样,我需要启用 kubelet 和 kube-apiserver 功能门“PodShareProcessNamespace=true”。 This 是我试过的教程

我正在开发一个非托管的 digitalocean 3 worker - 1 master 集群。

我以前从未在 minikube 之外使用过 kuberenetes,所以我可能会问一个非常愚蠢或明显的问题。此外,我不太清楚 feature-gate 到底是什么,所以这可能是我的问题没有多大意义的原因

我在其他地方找到了答案,但我会 post 在这里,这样其他有类似问题的人可能会觉得它有用。

除非您想在 运行ning 集群中启用 feature-gates 而不重新启动,否则不需要所有这些复杂的操作。您只需编辑 yaml 文件并重新部署 pod。

在要使用 perf 分析的 pod 的 yaml 文件中,您需要在 container 部分下添加 ShareProcessNamespace: true。对于需要特权系统调用的 pods 之类的 perf,您还需要设置 privileged: true。这是一个用于分析 pod

的示例 yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  shareProcessNamespace: true
  containers:
  - name: mongo
    image: mongo
  - name: perf
    image: <some dockerhubrepo>/perf
    securityContext:
      privileged: true
      capabilities:
        add:
        - SYS_PTRACE
    tty: true
    stdin: true

请注意,我使用的 perf repo 只是一个安装了 perf 的简单 pod,它有一个 python 带有无限睡眠循环的脚本 运行ning 只是为了防止它被终止。要进行个人资料,您可以

  • 在python(或shell)文件中写入perf命令并使其运行性能并连续将数据写入perf.data文件

  • exec 进入容器并 运行 perf 命令,如果你意识到 运行从所有 perf.data 中退出磁盘 space,这会更好]