K8s4️⃣浅谈 K8s 术语

1、Namespace

1.1、简介

命名空间(namespace, ns)

  • 作用:实现多环境、多租户资源隔离

    • 默认情况下,K8s 集群中任意 Pod 可以相互访问。
    • 将集群中的 Pod 等资源分配到不同的 ns,可形成逻辑上的 ”组“,以实现对不同组资源的隔离使用和管理
  • 示例

    • 通过 K8s 授权机制,将 ns 交给不同租户进行管理,实现多租户资源隔离

    • 结合 K8s 资源配额机制,实现不同租户的可用资源管理(如 CPU、内存使用量等)。

      image-20220615102149793

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

image-20220615110339662

② 输出选项

-o 指定输出选项

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

image-20220615110608384

③ 描述

  • 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 中。

    image-20220615115550408

  • K8s 组件Pod 方式运行在 kube-system 命名空间下。

    • master 组件:etcd,API server,Controller Manager,Scheduler

    • node 组件:kube-proxy(包括 master 在内的每个节点都会生成)

    • 其它:DNS 服务,网络插件 flannel

      image-20220615121159132

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
    
  • image-20220615145423679

2.2.2、查看

kubectl get pod [NAME] [flags]
kubectl describe pod [NAME] [flags]

① 所有 & 指定 ns

Hint:不会列出根容器(Pause)

  • 所有-A

  • 指定 ns-n

    image-20220615155737947

② 输出选项

-o 指定输出选项

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

示例 - wide:包含 IP 地址,运行节点等信息。

image-20220615155852613

③ 描述

指定 pod 名称,命名空间

重点关注 Event。

image-20220615160310533

④ 访问

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

image-20220615160354574

2.2.3、 删除

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

① Pod

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

image-20220615161823890

② Pod 控制器

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

image-20220615162108044

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
    
  • image-20220615175452743

3.2.2、查看 & 筛选

kubectl get pod -n 命名空间 -l 标签选择器 --showlabels
  • 查看--show-labels 选项

    image-20220615181320746

  • 标签选择器-l 选项

    • 指定 Key:筛选带有该 Key 的 Pod

    • 指定 Key 和 Value:筛选带有该 Key,且 Value 匹配的 Pod。

      image-20220615182637098

3.2.3、更新 & 删除

  • 更新:使用 --overwrite 选项,覆盖相同 key 的 label。

    • # 更新version标签
      kubectl label --overwrite pod pod名称 -n 命名空间 version=2.0
      
    • image-20220615180228637

  • 删除:在待删除的 key 值后添加减号 -

    • # 删除version标签
      kubectl label pod pod名称 -n 命名空间 version-
      
    • image-20220615183258653

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。

    image-20220616104115387

  • Deployment 描述

    image-20220616104451118

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

image-20220616112845664

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

    image-20220616120850456

  2. 集群内部访问 Service

    image-20220616121000963

② NodePort

可被集群外部访问

  1. 暴露 Deployment,创建 Service

    image-20220616121516724

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

    1. image-20220616140620072

5.2.2、删除

kubectl delete service 名称 -n 命名空间
posted @ 2022-06-15 18:36  Jaywee  阅读(63)  评论(0编辑  收藏  举报

👇