Namespace,Pod,Label,Deployment,Service
1、Namespace
1.1、简介
命名空间(namespace, ns)
- 作用:实现多环境、多租户的资源隔离。
- 默认情况下,K8s 集群中任意 Pod 可以相互访问。
- 将集群中的 Pod 等资源分配到不同的
ns
,可形成逻辑上的 ”组“,以实现对不同组资源的隔离使用和管理。
- 示例
- 通过 K8s 授权机制,将 ns 交给不同租户进行管理,实现多租户资源隔离。
- 结合 K8s 资源配额机制,实现不同租户的可用资源管理(如 CPU、内存使用量等)。
K8s 集群启动后,默认创建以下 ns
说明 | |
default | 创建时未指定 ns 的资源,默认分配到 default 下。 |
kube-node-lease | 集群节点的心跳维护(v1.13 引入) |
kube-public | 公开,包括未认证用户 |
kube-system | 由 K8s 系统创建的资源 |
1.2、操作
👉 K8s 资源管理
示例:基于指令式命令,对 ns 资源进行操作。
1.2.1、创建
kubectl create ns 名称
1.2.2、查看
kubectl get ns [NAME] [flags]
kubectl describe ns [NAME] [flags]
① 所有 & 指定名称
不指定 NAME,则列出所有。
② 输出选项
-o
指定输出选项常用参数:json,name,wide,yaml
③ 描述
- Labels,Annotation
- Status:使用中(Active),终止中(Terminating)
- quota:针对 namespace 的资源限额。
- LimitRange:针对 namespace 中每个组件的资源限额。
1.2.3、删除
kubectl delete ns 名称
2、Pod
2.1、简介
Pod(pods, po)
- Pod 是 K8s 创建和管理的,可部署的最小计算单元。
- 程序部署在容器中,容器运行于 Pod 中。
- K8s 组件以
Pod
方式运行在kube-system
命名空间下。
- master 组件:etcd,API server,Controller Manager,Scheduler
- node 组件:kube-proxy(包括 master 在内的每个节点都会生成)
- 其它:DNS 服务,网络插件 flannel
2.2、操作
👉 K8s 资源管理
- 资源管理方式
- 指令式命令:通过 Pod 控制器管理 Pod,而不是直接管理 Pod。
- 对象配置:可直接管理 Pod。
- 操作 Pod 时,若没有指定
ns
,默认是 default。
示例:基于指令式命令,对 Pod 资源进行操作。
2.2.1、创建
创建 Pod 控制器并指定选项,由控制器去管理 Pod。
示例:创建名为 deploy-nginx 的 Pod 控制器,指定 Nginx 镜像,暴露端口号 80,在 temp 命名空间下运行)。
kubectl run deploy-nginx --image=nginx:latest --port=80 --namespace temp
2.2.2、查看
kubectl get pod [NAME] [flags]
kubectl describe pod [NAME] [flags]
① 所有 & 指定 ns
Hint:不会列出根容器(Pause)
- 所有:
-A
- 指定 ns:
-n
② 输出选项
-o
指定输出选项常用参数:json,name,wide,yaml
示例 - wide:包含 IP 地址,运行节点等信息。
③ 描述
指定 pod 名称,命名空间
重点关注 Event。
④ 访问
通过以上命令查看 pod 的 IP 地址,通过
curl
命令访问。
2.2.3、 删除
kubectl delete pod 名称 -n 命名空间
kubectl delete deployment 名称 -n 命名空间
① Pod
Pod 控制器监测 Pod 状态,发现 Pod 死亡后会自动新建。
② Pod 控制器
删除 Pod 控制器后,Pod 自动被删除。
Hint
- 基于指令式命令只能通过 Pod 控制器管理 Pod,
- 基于对象配置可直接管理 Pod。
3、Label
3.1、简介
3.1.1、标签
Label
- 作用:在资源上添加标识,以实现资源的多维度分组,更灵活方便地进行资源分配、调度、配置、部署等管理工作。
- 特点:
- 键值对形式,任意数量。
- 通常在对象配置(yaml)中定义,也可在对象创建后动态更新。
- 示例
# 版本
"version":"1.0"
"version":"release"
"version":"stable"
# 环境
"environment":"dev"
"environment":"test"
"environment":"pro"
# 架构
"tier":"frontend"
"tier":"backend"
3.1.2、标签选择器
Label Selector
- 作用:基于指定条件,查询和筛选对应标签的资源对象。
- 分类:可自由组合筛选条件,使用逗号
,
分隔。
等式选择 | 集合选择 | |
相等/包含 |
|
|
不等/不含 |
|
|
3.2、操作
👉 K8s 资源管理
示例:基于指令式命令,对 Pod 进行 Label 相关资源操作。
- 指令
label
- 选项
--show-labels
,-l
,--overwrite
3.2.1、创建
示例:为 temp(命名空间)下的 Nginx(Pod)添加 version 标签。
kubectl label pod pod名称 -n 命名空间 version=1.0
3.2.2、查看 & 筛选
kubectl get pod -n 命名空间 -l 标签选择器 --showlabels
- 查看:
--show-labels
选项 - 标签选择器:
-l
选项
- 指定 Key:筛选带有该 Key 的 Pod
- 指定 Key 和 Value:筛选带有该 Key,且 Value 匹配的 Pod。
3.2.3、更新 & 删除
- 更新:使用
--overwrite
选项,覆盖相同 key 的 label。
# 更新version标签
kubectl label --overwrite pod pod名称 -n 命名空间 version=2.0
- 删除:在待删除的 key 值后添加减号
-
。
# 删除version标签
kubectl label pod pod名称 -n 命名空间 version-
Hint:
基于声明式对象配置方式,可更加灵活修改 Label 配置。
4、Deployment
4.1、简介
Deployment(deploy)
- 通常,K8s 通过 Pod 控制器来实现对 Pod 的管理,确保 Pod 资源符合预期状态。
- Deloyment 是 K8s 的一种 Pod 控制器。
4.2、操作
👉 K8s 资源管理
示例:基于指令式命令,对 Deployment 资源进行操作。
4.2.1、创建
kubectl run Pod控制器名称 [flags]
常用选项:
- image:指定 Pod 中的容器镜像。
- port:暴露的端口号。
- replicas:创建的 Pod 数量,默认 1。
- namespace:Pod 控制器和 Pod 的命名空间。
示例
创建名为 deploy-nginx1 的 Pod 控制器,指定 Nginx 镜像,暴露端口号 80,数量 3,在 temp 命名空间下运行)。
kubectl run deploy-nginx --image=nginx:latest --port=80 --replicas=3 -n demo
4.2.2、查看
kubectl get pod,deployment -n 命名空间
kubectl describe deployment 名称 -n 命名空间
- Pod:以 Deployment 名称作为 Pod 名称前缀和标签。
- Deployment:通过标签选择器管理 Pod。
- Deployment 描述
4.2.3、删除
kubectl delete deployment 名称 -n 命名空间
分析
- 通过 Deployment 管理 Pod,可提供高可用服务。
- 每个 Pod 会生成一个 IP,可在集群内部通过 Pod 的 IP 地址访问 Pod 中的容器应用。
- 问题:通过
Service
解决。
- Pod IP 随着 Pod 重建而变化。
- Pod IP 是集群内可见的虚拟 IP,外部无法访问。
5、Service
5.1、简介
Service(svc)
作用:提供远程服务能力,作为 Pod 对外服务的统一入口。
5.2、操作
👉 K8s 资源管理
示例:基于指令式命令,对 Service 资源进行操作。
5.2.1、创建 & 查看
需指定 deployment,用于建立 Service 与 Pod 的映射关系。
kubectl expose deployment 名称 [flags]
常用选项:
- -n:命名空间
- --name:Service 名称
- --type:Service 类型
- ClusterIP:仅集群内部可访问。
- NodePort:可被集群外部访问
- LoadBalancer:负载均衡
- 端口映射
- --port:Service 端口号
- --target-port:Pod 端口号
① ClusterIP
仅集群内部可访问
- 暴露 Deployment,创建 Service
- 集群内部访问 Service
② NodePort
可被集群外部访问
- 暴露 Deployment,创建 Service
- 访问:内部通过 Service 的 IP 和端口号访问,外部通过宿主机的 IP 和暴露端口号访问。
5.2.2、删除
kubectl delete service 名称 -n 命名空间