【问题标题】:kubectl apply -f <file_name> where does it apply to?kubectl apply -f <file_name> 它适用于哪里?
【发布时间】:2022-03-25 19:57:56
【问题描述】:

我正在尝试做https://hub.helm.sh/charts/jetstack/cert-manager中提到的先决条件

$ kubectl apply \
    -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.11/deploy/manifests/00-

我试图弄清楚 kubectl apply 做了什么,因为我加入了一个 k8s 已经启动并运行的项目,因此没有太多的基础知识。

https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply

指南说:

pod.json 中的配置应用到一个pod。

kubectl apply -f ./pod.json

但我不明白为什么在这个命令中没有提到目标。我期待的是:

kubectl apply -f ./pod.json application-pod-01

但没有任何地方是该文件的apply 命令的明确目标。我确定我在这里遗漏了一个关键概念,但无法通过阅读文档来弄清楚。

【问题讨论】:

    标签: json kubernetes


    【解决方案1】:

    kubernetes API 中的大多数对象都有一个命名空间和一个名称(如果命名空间不在定义中,则默认为 default 命名空间),在 ObjectMetaData 中定义。

    在 yaml 文件中,您将看到以下内容:

    apiVersion: v1
    kind: Pod
    metadata:
      name: application-pod
      namespace: my-namespace
    

    名称和命名空间的组合唯一标识Kubernetes中的对象,并允许kubernetes找到对象的特定实例(例如pod-01)并更新它(很可能创建对象的新实例,例如@987654325 @)。

    【讨论】:

    • 只是一个小补充:并非所有资源都具有命名空间,例如pv, clusterrole 或类似的:)
    【解决方案2】:

    这是正确的语法

    kubectl apply -f pod.json

    kubectl apply -f pod.yaml

    【讨论】:

      【解决方案3】:

      首先,了解在 k8s 中有两种部署方式是有帮助的:声明式和命令式。长话短说,通过命令式地做事,你做到了一次并且“一次性使用”;通过以声明方式执行此操作,您可以长时间使用它。

      你在那里所做的是你使用了声明式的部署方式。这表明您使用了以声明方式部署对象的命令“apply”。

      它的真正作用:

      1. 它从 .yaml 文件中读取有关对象的所有信息
      2. 它检查集群的状态(它查找称为operator的东西)。
      3. 在集群上执行操作以满足期望状态

      operator 部分我不能 100% 确定,所以如果有人能深入了解更多细节,那就太好了。据我所知,每个以声明方式部署的资源都有自己的操作员,它位于 k8s 集群的深处并处理特定的资源。这就是为什么如果您以声明方式部署一个 pod,然后通过“kubectl delete pod”将其删除,它会在一段时间后恢复。该特定资源的操作员会注意到集群的实际状态不符合期望状态,并将更改其状态。

      如果您确实 secend “kubectl apply pod.yaml”,也会发生同样的情况,但现在您无需更改实际状态,而是更改所需状态。在这种情况下,k8s 集群的状态保持不变,但期望的状态发生了变化,我们最终会遇到资源操作员需要干预的情况。

      正如之前所说,namespace.name 是资源的明确标识符(类似于 ID),因此您需要在 pod.yaml 中指定有关 pod 的所有信息。这就是为什么你的命令“kubectl apply pod.yaml”知道要寻找什么,因为我提到的那个操作符将在所需的状态定义中包含相同的信息。

      进一步研究: 声明式与命令式:https://www.cloudsavvyit.com/15055/declarative-vs-imperative-kubernetes-object-management/

      【讨论】:

        猜你喜欢
        • 2018-12-21
        • 1970-01-01
        • 2018-05-02
        • 2019-01-03
        • 1970-01-01
        • 2013-07-20
        • 2018-06-14
        • 2017-08-23
        • 2021-07-07
        相关资源
        最近更新 更多