用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
容器及微服务
›
容器及微服务
›
k8s~关于非常啰嗦的标签和选择器
k8s~关于非常啰嗦的标签和选择器
王海鱼
论坛元老
|
2024-12-4 23:34:39
|
显示全部楼层
|
阅读模式
楼主
主题
1852
|
帖子
1852
|
积分
5556
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
总感觉k8s中定义的deplyment和service非常的啰嗦,尤其是在选择器的定义上,但没办法,它的设计总有它的原理。
svc(spec.selector.app)
deployment(metadata.labels.app,spec.selector.matchLabels.app)
pods(metadata.labels.app)
nginx的部署
下面是一个 Kubernetes YAML 文件示例,用于部署一个 Nginx 服务。该文件包括 Deployment 和 Service 的定义,Service 类型设置为 ClusterIP。
Nginx 部署 YAML 示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1 # 设置副本数为 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:stable-alpine # 使用最新的 Nginx 镜像
ports:
- containerPort: 80 # 容器内部的端口
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: ClusterIP # 使用 ClusterIP 类型
selector:
app: nginx # 根据标签选择 Pod
ports:
- port: 80 # Service 的端口
targetPort: 80 # 转发到容器的端口
复制代码
说明
Deployment
:
apiVersion: apps/v1:指定 API 版本。
kind: Deployment:表现这是一个 Deployment 对象。
metadata:包罗对象的元数据,如名称和标签。
spec:定义 Deployment 的规格,包括副本数量、选择器和 Pod 模板。
replicas:设置运行的 Pod 副本数量。
selector:用于选择与 Deployment 相干的 Pods。
template:定义 Pod 的模板,包括元数据和容器规格。
containers:定义容器的名称、镜像和要暴露的端口。
Service
:
apiVersion: v1:指定 API 版本。
kind: Service:表现这是一个 Service 对象。
metadata:包罗对象的元数据,如名称。
spec:定义 Service 的规格,包括类型、选择器和端口配置。
type: ClusterIP:指定 Service 类型为 ClusterIP,表现只在集群内部可访问。
selector:根据标签选择与之关联的 Pods。
ports:定义 Service 的端口和目标端口。
部署步骤
将上述 YAML 内容保存到一个文件中,例如 nginx-deployment.yaml。
使用以下命令在 Kubernetes 集群中应用该配置:
kubectl apply -f nginx-deployment.yaml
复制代码
检查 Deployment 和 Service 是否成功创建:
kubectl get deployments
kubectl get services
复制代码
通过以上步骤,你将可以或许在 Kubernetes 中成功部署一个 Nginx 服务,并通过 ClusterIP 类型的 Service 来访问它。假如你有其他标题或需要进一步的帮助,请随时告诉我!
关于特殊啰嗦的labels的解释
在 Kubernetes 中,Deployment 的定义中确实存在多个地方使用了雷同的标签(如 metadata.labels.app=nginx),这有其特定的目标和意义。下面是对这些标签的详细解释及其用意:
1.
Metadata Labels
位置
:在 metadata 部分。
作用
:
用于为 Deployment 对象本身打标签,这些标签可以用于标识、选择或构造 Kubernetes 对象。
可以通过这些标签来查询和过滤 Deployment 对象,例如使用 kubectl get deployments -l app=nginx 来列出所有带有 app=nginx 标签的 Deployments。
在service定义时,它的spec.selector.app会指向被关联的deployment的.metadata.labels.app的名字
2.
Spec Selector
位置
:在 spec.selector 部分。
作用
:
定义了该 Deployment 控制器所管理的 Pods 的选择标准。
Kubernetes 使用此选择器来确定哪些 Pods 是由这个 Deployment 创建和管理的。
选择器中的标签必须与 Pods 的标签匹配,以确保 Deployment 可以或许正确地找到和管理这些 Pods。
3.
Template Metadata Labels
位置
:在 template.metadata.labels 部分。
作用
:
定义将要创建的 Pods 的标签。
当 Deployment 创建 Pods 时,这些标签会被附加到新创建的 Pods 上。
这些标签用于与 spec.selector 中定义的选择器进行匹配,从而使 Deployment 可以或许跟踪并管理这些 Pods。
为什么要重复定义?
同等性
:
在 Deployment 的不同部分使用雷同的标签确保了它们之间的同等性。这种同等性对于 Kubernetes 的操作至关紧张,由于它依赖于这些标签来管理对象。
可管理性
:
通过使用雷同的标签,可以更方便地进行筛选和管理。例如,你可以快速找到所有与特定应用步伐(如 nginx)相干的 Deployments、Pods 和 Services。
避免错误
:
确保 Pods 的标签与 Deployment 的选择器相匹配,可以避免由于标签不同等导致的管理标题。假如选择器未能正确匹配 Pods,Deployment 将无法管理这些 Pods。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王海鱼
论坛元老
这个人很懒什么都没写!
楼主热帖
在Winform开发中,使用Async-Awati异步 ...
Vue 和 Django 前后端分离实践 (注册 ...
如何在 Vue 3 中使用<script lang=“t ...
C#依赖注入(直白明了)讲解 一看就会系 ...
一条SQL的执行原理
go中 for循环的坑
Vulnhub之Monkeybox详细测试过程(不同 ...
clickhouse的稀疏索引
【Django】DRF开发中的一些技巧记录 ...
教务管理系统——数据库课程设计mysql+ ...
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
DevOps与敏捷开发
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表