本文主要是介绍K8S 哲学 - yaml文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
selector:
Pod
对象不应该有selector
字段。selector
字段通常用于Service
、Deployment
、ReplicaSet
等对象,用于选择匹配的 Pod。在Pod
对象中,这个字段是无效的
apiVersion: apps/v1
kind: Deployment
metadata:
name: gyk
labels:
age: "18"
gender: "man"
spec:
replicas: 1
selector:
matchLabels:
app: pod-demo
template:
metadata:
labels:
app: pod-demo
spec:
containers:
- name: pod-demo
image: nginx:1.14.2
command: ['sh', '-c', 'curl 127.0.0.1:80']
workingDir: /gyk/pod-demo
ports:
- name: http
containerPort: 80
protocol: TCP
matchLabels
:这是 Kubernetes 选择器(Selector)的一部分,用于确定哪些 Pod 属于这个 Deployment。在这个例子中,任何带有标签app: pod-demo
的 Pod 都会被视为这个 Deployment 的一部分。这意味着 Deployment 在创建新的 Pod 时会添加这个标签,并且在确定要更新哪些 Pod 时会查找带有这个标签的 Pod。
template
:这是 Deployment 的一部分,定义了 Deployment 创建的 Pod 的模板。这个模板包含了 Pod 的metadata
和spec
。
metadata
:这是 Pod 的元数据,包含了 Pod 的标签和注解。在这个例子中,每个由这个 Deployment 创建的 Pod 都会带有app: pod-demo
的标签。
spec
:这是 Pod 的规格,定义了 Pod 的内容,例如容器、卷等。在这个例子中,每个 Pod 包含一个名为pod-demo
的容器,这个容器使用nginx:1.14.2
镜像,并监听 80 端口。
在 Kubernetes 中,
Deployment
、ReplicaSet
和Pod
是三个核心的资源对象,它们之间的关系如下:
Deployment
:这是最高级别的对象,用于管理一组基本相同的 Pod。Deployment 会确保在任何时候都有指定数量的 Pod 在运行。如果一个 Pod 崩溃或被删除,Deployment 会创建一个新的 Pod 来替换它。Deployment 还可以用于更新 Pod 的版本,例如更改 Pod 使用的 Docker 镜像。
ReplicaSet
:这是 Deployment 创建的对象,用于确保在任何时候都有指定数量的 Pod 副本在运行。每个 Deployment 都会创建一个或多个 ReplicaSet,每个 ReplicaSet 管理一组版本相同的 Pod。当 Deployment 更新 Pod 的版本时,它会创建一个新的 ReplicaSet,并逐渐增加新 ReplicaSet 的大小,同时减少旧 ReplicaSet 的大小,直到新 ReplicaSet 完全替代了旧 ReplicaSet。
Pod
:这是 Kubernetes 中最小的部署单元,每个 Pod 包含一个或多个容器。Pod 可以由 Deployment 或 ReplicaSet 创建,也可以直接由用户创建。每个由 Deployment 或 ReplicaSet 创建的 Pod 都会带有一些标签,这些标签用于让 Deployment 或 ReplicaSet 识别它管理的 Pod。在你的 YAML 文件中,你定义了一个 Deployment,它有一个 replica,这意味着 Kubernetes 会确保始终有一个 Pod 在运行。这个 Pod 的配置在
template
字段中定义。如果这个 Pod 崩溃或被删除,Deployment 会创建一个新的 Pod 来替换它。
deployment的 metadata
在 Kubernetes 的资源对象中,
metadata
是一个非常重要的字段,它包含了资源的元数据,例如名称、命名空间、标签和注解等。在你的
Deployment
对象中,metadata
字段包含以下信息:
name
:资源的名称,这是资源的唯一标识符。在这个例子中,Deployment 的名称是gyk
。
labels
:这是一个键值对的集合,用于给资源添加描述性信息。标签可以被 Kubernetes 的其他部分(例如selector
)用于选择和操作资源。在这个例子中,你的 Deployment 有两个标签:age
和gender
。注意,
metadata
字段还可以包含其他的字段,例如namespace
(资源所在的命名空间)、annotations
(用于存储非标识性的元数据)等,但在你的 Deployment 中并没有使用这些字段。
deployment的spec
在 Kubernetes 的
Deployment
对象中,metadata
和spec
是两个非常重要的字段。
spec
:这是 Deployment 的规格,定义了 Deployment 的行为。
replicas
:这是 Deployment 应该维护的 Pod 副本的数量。在这个例子中,Deployment 将确保始终有 1 个 Pod 在运行。
selector
:这是一个选择器,用于确定哪些 Pod 属于这个 Deployment。在这个例子中,任何带有标签app: pod-demo
的 Pod 都会被视为这个 Deployment 的一部分。
template
:这是 Pod 的模板,Deployment 会使用这个模板来创建新的 Pod。这个模板包含了 Pod 的metadata
和spec
。
metadata
:这是 Pod 的元数据,包含了 Pod 的标签。在这个例子中,每个由这个 Deployment 创建的 Pod 都会带有app: pod-demo
的标签。
spec
:这是 Pod 的规格,定义了 Pod 的内容,例如容器、卷等。在这个例子中,每个 Pod 包含一个名为pod-demo
的容器,这个容器使用nginx:1.14.2
镜像,并监听 80 端口。
为什么 template 下有 metadata 但是 deployment下 还有 metadata
在 Kubernetes 中,
metadata
字段用于存储资源对象的元数据,例如名称、标签和注解等。不同级别的资源对象都有自己的metadata
。
Deployment 的
metadata
:这是 Deployment 对象的元数据。它包含了 Deployment 的名称、标签等信息。这些信息用于识别和组织 Deployment 对象。Template 的
metadata
:这是 Pod 模板的元数据。当 Deployment 创建新的 Pod 时,这些元数据会被复制到新的 Pod 中。这包括 Pod 的标签,这些标签用于让 Deployment 识别和管理它创建的 Pod。所以,Deployment 的
metadata
和 Template 的metadata
是用于不同目的的。Deployment 的metadata
是用于管理 Deployment 对象的,而 Template 的metadata
是用于管理由 Deployment 创建的 Pod 的。
为什么 spec.selector.matchLables 必须要和 spec.template.metadata.lable 匹配
在 Kubernetes 中,Deployment 的
spec.selector.matchLabels
和spec.template.metadata.labels
必须匹配,这是因为matchLabels
用于确定哪些 Pod 属于这个 Deployment。当 Deployment 创建新的 Pod 时,它会使用 Pod 模板中的
metadata.labels
为新的 Pod 设置标签。然后,Deployment 会使用spec.selector.matchLabels
来找到和管理带有匹配标签的 Pod。如果
spec.selector.matchLabels
和spec.template.metadata.labels
不匹配,Deployment 将无法找到和管理它创建的 Pod,这将导致 Deployment 无法正常工作。所以,
spec.selector.matchLabels
和spec.template.metadata.labels
必须匹配,以确保 Deployment 可以正确地找到和管理它创建的 Pod。
在 Kubernetes 中,Deployment 的
spec.selector.matchLabels
和spec.template.metadata.labels
必须匹配的原因是,这样 Deployment 才能正确地找到和管理它创建的 Pod。Deployment 是 Kubernetes 中的一个资源对象,它的主要作用是维护一组基本相同的 Pod。当 Deployment 创建新的 Pod 时,它会使用 Pod 模板中的
metadata.labels
为新的 Pod 设置标签。然后,Deployment 会使用spec.selector.matchLabels
来找到和管理带有匹配标签的 Pod。如果
spec.selector.matchLabels
和spec.template.metadata.labels
不匹配,Deployment 将无法找到和管理它创建的 Pod。这可能会导致 Deployment 无法正常工作,例如无法保证 Pod 的数量始终等于spec.replicas
,无法更新 Pod 的版本等。所以,
spec.selector.matchLabels
和spec.template.metadata.labels
必须匹配,以确保 Deployment 可以正确地找到和管理它创建的 Pod。这是 Kubernetes 的设计原则,旨在确保资源对象的稳定性和可预测性。
deployment的 spec 有什么属性
replicas
:这是 Deployment 应该维护的 Pod 副本的数量。
selector
:这是一个选择器,用于确定哪些 Pod 属于这个 Deployment。它包含一个或多个标签选择条件,只有当一个 Pod 的标签满足这些选择条件时,这个 Pod 才会被视为属于这个 Deployment。
template
:这是 Pod 的模板,Deployment 会使用这个模板来创建新的 Pod。这个模板包含了 Pod 的metadata
和spec
。
strategy
:这是 Deployment 更新 Pod 的策略。它可以是RollingUpdate
(默认)或Recreate
。RollingUpdate
策略会逐步替换旧的 Pod,而Recreate
策略会先删除所有旧的 Pod,然后创建新的 Pod。
minReadySeconds
:这是 Pod 在被视为可用之前需要等待的最小秒数。
revisionHistoryLimit
:这是 Deployment 保留的旧版本 ReplicaSet 的数量。这些旧版本 ReplicaSet 可以用于回滚 Deployment。
paused
:这是一个布尔值,用于暂停或恢复 Deployment 的滚动更新。
progressDeadlineSeconds
:这是 Deployment 进行滚动更新的最长时间。如果超过这个时间,Deployment 的状态将变为Progressing
。
apiVersion: v1 和 apiVersion: app/v1
在 Kubernetes 中,
apiVersion
字段用于指定你要使用的 Kubernetes API 的版本和组。不同的资源类型可能属于不同的 API 组和版本。
apiVersion: v1
:这是 Kubernetes 核心 API 的版本,包括 Pod、Service、Volume 等核心资源类型。
apiVersion: apps/v1
:这是 Kubernetesapps
API 组的v1
版本,包括 Deployment、DaemonSet、StatefulSet 等应用相关的资源类型。所以,如果你要创建一个 Deployment,你应该使用
apiVersion: apps/v1
。如果你要创建一个 Pod 或 Service,你应该使用apiVersion: v1
。
这篇关于K8S 哲学 - yaml文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!