【问题标题】:Can somene explain the different Kubernetes yaml files and types?有人可以解释不同的 Kubernetes yaml 文件和类型吗?
【发布时间】:2020-02-07 19:52:20
【问题描述】:

首先,我是 Kubernetes 的新手,所以我可能遗漏了一些非常明显的东西,但文档确实很有帮助,所以我向你们寻求帮助。

我试图弄清楚 Kubernetes 有多少种“部署文件”。我称它们为“部署文件”,因为我真的不知道还能如何称呼它们,而且它们通常与部署相关联。

到目前为止,我见过的每个 yml/yaml 文件都是这样开始的:

apiVersion:
kind: << this is what I'm asking about >>
metadata:

到目前为止,我已经看到了这么多“种类”

ClusterConfig
ClusterRole
ClusterRoleBinding
CronJob
Deployment
Job
PersistentVolumeClaim
Pod
ReplicationController
Role
RoleBinding
Secret
Service
ServiceAccount

我相信还有更多。但我似乎找不到列出它们的位置和分解的上下文。

所以我想知道的是这个,

  1. 在哪里可以找到这些 yaml 文件的解释?
  2. 我在哪里可以了解不同的种类?
  3. 我在哪里可以得到关于其中任何一个的最低必填字段/值的详细说明?
  4. 这些文件有模板吗?

谢谢

【问题讨论】:

  • 很抱歉回答这个问题,但是......你必须阅读文档,你问的太多了。 kubernetes.io/docs/home
  • 建议:正如您从kubectl api-resources 看到的那样,这些东西很多:试图全部理解它们是浪费时间:除非您打算参与其中,否则您永远不会使用其中的大部分Kubernetes平台开发。作为一个 kubernetes 用户,你 95% 的时间将主要处理 poddeploymentservicesecretconfigMapingress 对象:我建议改为尝试理解这 6 个真正深入而不是其他所有。稍后您也可以熟悉与storage相关的内容

标签: kubernetes kubectl kubernetes-pod


【解决方案1】:

这个问题需要一个博客来回答,但总之你可以尝试这些选项和命令来学习你的 kubectl CLI。

学习使用 kubectl explain 命令向您显示 Kubernetes 对象列表:

$ kubectl explain

您可以使用此语法获取有关任何列出的资源的详细信息

`$ kubectl 解释 pod

$ kubectl 解释 pod.spec

$ kubectl 解释 pod.spec.containers`

或者你可以通过添加--recursive标志来获得对象的yam模板来解释命令。

$ kubectl explain pod --recursive

这也会给你官方文档链接。

所以简而言之,使用递归选项运行 kubectl explain 将列出所有内容

【讨论】:

  • 谢谢@DT,请写博客文章我敢肯定我不是第一个对此感到困惑的人。这非常有帮助!
【解决方案2】:

当您谈论包含特定 kubernetes 对象定义的特定 yaml 文件时,您可以将它们称为 yaml manifests 或简称为 yaml definition files。对所有这些都使用单词Deployment 并不是一个好主意,因为在 kubernetes 中已经定义并使用此名称调用了特定的资源类型。因此,为了保持一致性,最好不要将它们都称为 deployments

我相信还有更多。但我似乎找不到位置 列出它们的位置和分解的上下文。

是的,还有很多,您可以通过运行列出可用的:

kubectl api-resources

这些不同的对象实际上被称为api-resources。如您所见,它们列在三列中:NAME、SHORTNAMES、APIGROUP、NAMESPACED 和 KIND

NAME                                       SHORTNAMES   APIGROUP                       NAMESPACED   KIND
bindings                                                                               true         Binding
componentstatuses                          cs                                          false        ComponentStatus
configmaps                                 cm                                          true         ConfigMap
endpoints                                  ep                                          true         Endpoints
events                                     ev                                          true         Event
limitranges                                limits                                      true         LimitRange
namespaces                                 ns                                          false        Namespace
nodes                                      no                                          false        Node

请注意,资源的名称与其KIND 相对应,但略有不同。 NAME 仅描述我们所指的资源类型,例如使用kubectl command line utility。举一个例子,当您想列出集群中可用的 pod 时,您只需键入 kubectl get pods。在这种情况下,您不必使用资源类型,即Pod。你可以,但你不必。所以kubectl get Podkubectl get ConfigMap 也会返回想要的结果。你也可以通过他们的名字来引用他们,所以kubectl get daemonsetskubectl get ds是等价的。

具体的资源/对象定义完全不同。在yaml definition 文件的上下文中,我们必须使用正确的KIND 资源。它们大多以大写字母开头,由名为 CamelCase 的 co 编写,但此规则也有例外。

我真的建议您熟悉 kubernetes 文档。它非常人性化,很好地解释了关键的 kubernetes 概念以及所有非常小的细节。

Here 你有更多有用的命令来探索 API 资源:

kubectl api-resources --namespaced=true      # All namespaced resources
kubectl api-resources --namespaced=false     # All non-namespaced resources
kubectl api-resources -o name                # All resources with simple output (just the resource name)
kubectl api-resources -o wide                # All resources with expanded (aka "wide") output
kubectl api-resources --verbs=list,get       # All resources that support the "list" and "get" request verbs
kubectl api-resources --api-group=extensions # All resources in the "extensions" API group

正如@wargre 在他的评论中已经建议的那样,kubernetes 官方文档绝对是最好的起点,因为您会在其中找到每个资源的非常详细的描述。

【讨论】:

  • 谢谢@Mario。这很有帮助。
【解决方案3】:

了解 Kubernetes 对象

您可以从阅读这篇文章开始:Understanding Kubernetes Objects

Kubernetes 对象 是 Kubernetes 系统中的持久实体。 Kubernetes 使用这些实体来表示集群的状态。具体来说,他们可以描述:

  • 正在运行哪些容器化应用程序(以及在哪些节点上)
  • 这些应用程序可用的资源
  • 有关这些应用程序行为方式的策略,例如重启策略、升级和容错

Kubernetes 对象是“意图记录”——一旦您创建了对象,Kubernetes 系统就会不断工作以确保该对象存在。通过创建一个对象,您实际上是在告诉 Kubernetes 系统您希望集群的工作负载是什么样的;这是您集群的期望状态

K8s API 参考

所有对象的详细描述可以在Kubernetes API参考指南中找到。

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 2015-03-24
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2013-09-12
    • 2018-06-23
    • 2012-05-29
    • 2010-12-13
    相关资源
    最近更新 更多