kubernetes - 为什么标签在一次部署中被提及 3 次
问题描述
我浏览了以下文档页面:https ://kubernetes.io/docs/concepts/workloads/controllers/deployment/
示例部署yaml如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
我们可以在这里看到app: nginx
提到标签的三个不同时间。
为什么我们需要它们中的每一个?我很难从官方文档中理解它。
解决方案
第一个标签用于部署本身,它为特定部署提供标签。假设您要删除该部署,然后运行以下命令:
kubectl delete deployment -l app=nginx
这将删除整个部署。
第二个标签告诉资源selector: matchLabels
(服务等)根据标签匹配 pod。因此,假设您要创建所有 pod 都具有标签的服务,app=nginx
那么您提供以下定义:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
上述服务将查找 matchLabels 并绑定已app: nginx
分配标签的 pod
第三个标签是podTemplate
标签,template
实际上是podTemplate
。它描述了它启动的 pod。因此,假设您有两个副本部署,并且 k8s 将启动 2 个具有template: metadata: labels
. 这是微妙但重要的区别,因此您可以为部署和该部署生成的 Pod 使用不同的标签。
推荐阅读
- c - 在 Linux 中的 TCP 情况下,listen 的积压数是否包括接收到的 SYN 连接数?
- swift - 向 NSTableView 添加数据导致崩溃
- reactjs - 我创建了一个反应项目并开始研究路由,路由工作正常但导航栏无法正常工作
- postgresql - Postgres中下划线的排序问题
- php - 从数据库中删除记录的ajax不会在laravel中触发重定向
- netsuite - 在 Netsuite 2.0 中加载时如何将额外的过滤器和列添加到现有的已保存搜索中
- php - 如何将函数作为参数传递php类
- bash - 自动保存电子邮件附件以映射到 qmail 和 Reformime
- html - Haskell Yesod 网络表单到 Sqlite3
- c# - 如何列出使用 MEF2 实现接口的所有类型?