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,则列出所有。

kubernetes各组件版本对应 kubernetes coredns_Deployment

② 输出选项

-o 指定输出选项

常用参数:json,name,wide,yaml

kubernetes各组件版本对应 kubernetes coredns_Deployment_02

③ 描述
  • 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 地址,运行节点等信息。

kubernetes各组件版本对应 kubernetes coredns_Pod_03

③ 描述

指定 pod 名称,命名空间

重点关注 Event。

kubernetes各组件版本对应 kubernetes coredns_Deployment_04

④ 访问

通过以上命令查看 pod 的 IP 地址,通过 curl 命令访问。

kubernetes各组件版本对应 kubernetes coredns_Deployment_05

2.2.3、 删除

kubectl delete pod 名称 -n 命名空间
kubectl delete deployment 名称 -n 命名空间
① Pod

Pod 控制器监测 Pod 状态,发现 Pod 死亡后会自动新建。

kubernetes各组件版本对应 kubernetes coredns_Pod_06

② Pod 控制器

删除 Pod 控制器后,Pod 自动被删除。

kubernetes各组件版本对应 kubernetes coredns_命名空间_07

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

  • 作用:基于指定条件,查询和筛选对应标签的资源对象。
  • 分类:可自由组合筛选条件,使用逗号 , 分隔。

等式选择

集合选择

相等/包含

key = value

key in (v1, v2, ...)

不等/不含

key != value

key not in (v1, v2, ...)

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 对外服务的统一入口。

kubernetes各组件版本对应 kubernetes coredns_kubernetes各组件版本对应_08

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

仅集群内部可访问

  1. 暴露 Deployment,创建 Service
  2. 集群内部访问 Service

② NodePort

可被集群外部访问

  1. 暴露 Deployment,创建 Service
  2. 访问内部通过 Service 的 IP 和端口号访问,外部通过宿主机的 IP 和暴露端口号访问。

5.2.2、删除

kubectl delete service 名称 -n 命名空间