为什么 kubectl create 只支持某些资源?

Why does kubectl create only support certain resources?

我希望通过命令行 kubectl 为特定资源(pvs、pvc、策略等)创建 yaml 文件。

kubectl create 仅支持创建某些资源类型(即 clusterroles、clusterrolebindings、configmaps、cronjobs、部署、作业、命名空间、pod 中断预算、优先级、配额、角色、角色绑定、秘密、服务和服务帐户)。

为什么不支持pods、pvs、pvcs等?

我知道 kubectl run --generator=run=pod/v1 用于 pods,但是否有特定原因未将其添加到 kubectl create

我搜索了文档和 github 个问题,但找不到解释。

我知道像 ksonnet 这样的工具,但我想知道是否有本地方式(或者没有的原因)。

您可以使用 kubectl create 创建 任何类型 的对象。为此,您有两种解决方案:

  1. 使用文件描述符:kubectl create -f my-pod-descriptor.yml
  2. 使用标准输入(你的文件内容实际上在你的控制台中):
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - sleep
    - "1000000"
EOF

现在回到问题,例如他们为什么不添加 kubectl create pod 命令。我真的没有答案。
我的猜测是因为直接管理 pods 并不是一个好习惯。建议改用 deployments。你有一个 kubectl create deployment 命令。

其他完全没问题的对象呢,例如 pv 或 pvc。好吧,我不知道:)

请记住,从控制台 create/manage 一切都不是一个好的做法,因为您将无法保留您正在做的事情的历史记录。更喜欢使用在 SCM 中管理的文件。

因此,我猜 K8S 团队并没有在不推荐的过程或命令上投入太多精力。这对我来说很好。