天天看点

K8s4️⃣浅谈 K8s 术语

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
  • 作用:基于指定条件,查询和筛选对应标签的资源对象。
  • 分类:可自由组合筛选条件,使用逗号

    ,

    分隔。
    等式选择 集合选择
    相等/包含

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

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 命名空间