第 4 章 资源详解
资源分类
# 查看所有资源 kubectl api-resources
分类
资源分类 | 资源名称 | 缩写 |
---|---|---|
集群级别资源 | nodes | no |
namespaces | ns | |
pod 资源 | pods | po |
pod 资源控制器 | replicationcontrollers | rc |
replicasets | rs | |
deployments | deploy | |
daemonsets | ds | |
jobs | ||
cronjobs | cj | |
horizontalpodautoscalers | hpa | |
statefulsets | sts | |
服务发现资源 | services | svc |
ingress | ing | |
存储资源 | volumeattachments | |
persistentvolumes | pv | |
persistentvolumeclaims | pvc | |
配置资源 | configmaps | cm |
secrets |
Namespace
作用
-
多套环境的资源隔离
-
多租户的资源隔离
默认 namespace
# 未指定 Namespace 的对象所处的命名空间 default # 集群节点之间的心跳维护,v1.13 开始引入 kube-node-lease # 此命名空间下的资源可以被所有人访问(包括未认证用户) kube-public # 所有由 kubernetes 系统创建的资源都处于这个命名空间 kube-system
操作
查看
# 查看所有的 ns kubectl get ns # 查看指定的 ns kubectl get ns 名称 # 指定输出格式 kubectl get ns 名称 -o 格式参数 格式参数: wide 更多信息 json json格式输出详细信息 yaml yaml格式输出详细信息 # 查看 ns 详情 kubectl describe ns 名称 Name: kube-system Labels: <none> Annotations: <none> Status: Active # Active:命名空间正在使用中;Terminating:正在删除命名空间 No resource quota. # 针对 namespace 做的资源限制 No LimitRange resource. # 针对 namespace 中的每个组件做的资源限制
创建
# 注意:不能使用 `kubectl create namespaces 名称` 来创建命名空间 kubectl create ns 名称
删除
kubectl delete ns 名称
配置方式
apiVersion: v1 kind: Namespace metadata: name: dev
Label
作用
通过在资源上添加标识,对其进行区分和选择
Label 可以实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作
特点
- 以键值对的形式附加在资源对象上,例如:Node、Service、Pod 等
- 资源对象可定义任意数量的 Label,同一个 Label 可被添加到任意数量的资源对象上
- Label 通常在定义资源对象时确定,但也可在其创建后动态地添加或删除
示例
版本标签:"version":"release", "version":"stable",... 环境标签:"environment":"dev", "environment":"test", "environment":"pro" 架构标签:"tier":"frontend", "tier":"backend"
定义
# 查看标签 kubectl get po nginx-64777cd554-zfj94 --show-labels # pod 资源打标签 kubectl label po nginx-64777cd554-zfj94 version=1.0 # pod 资源更新标签 kubectl label po nginx-64777cd554-zfj94 version=2.0 --overwrite # 筛选标签 kubectl get po -l version=2.0 --show-labels # 删除标签 kubectl label po nginx-64777cd554-zfj94 version- # 通过配置文件在创建资源对象时打标签 kubectl apply -f pod-nginx.yaml #--*----- pod-nginx.yaml -----*-- apiVersion: v1 kind: Pod metadata: name: nginx namespace: dev labels: version: "3.0" env: "test" spec: containers: - image: nginx:1.17.1 name: pod ports: - name: nginx-port containerPort: 80 protocol: TCP #--*----- pod-nginx.yaml -----*--
标签定义完毕之后,需要使用 Label Selector 进行标签筛选
- Label 用于给某个资源对象定义标签
- Label Selector 用于筛选符合条件的资源对象
基于等式的 Label Selector
- version = 1.0:选择所有包含 Label 中 key="version" 且 value="1.0" 的资源对象
- version != 1.0:选择所有包含 Label 中 key="version" 且 value!="1.0" 的资源对象
基于集合的 Label Selector
- version in (1.0, 2.0):选择所有包含 Label 中的 key="version" 且 value="1.0" 或 "2.0" 的对象
- version not in (1.0, 2.0):选择所有包含 Label 中的 key="version" 且 value !="1.0" 或 "2.0" 的对象
kubectl get po -l run=nginx,version=1.0 --show-labels kubectl get po -l 'run=nginx,version=1.0' --show-labels kubectl get po -l 'version in (1.0)' --show-labels
Pod
介绍
pod 是 kubernetes 集群进行管理的最小单元,程序必须部署在容器中,而容器必须存在于 pod 中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构