9

k8s权威指南笔记:基本概念

 3 years ago
source link: https://keys961.github.io/2022/03/31/k8s%E6%9D%83%E5%A8%81%E6%8C%87%E5%8D%97%E7%AC%94%E8%AE%B0(1)/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1. 资源对象描述

包含两类:

  1. 资源对象:Node、Pod、Service、Volume等

    • 通用属性:Name、Label、Annotation

    • Name唯一

    • Label表明资源特征,用于筛选、控制和协作

    • Annotation为特殊标签,用于资源对象属性的自定义扩展

  2. 资源对象相关的事物和动作:Label、Annotation、Namespace、Deployment、PVC等

2. 集群类

k8s集群由Master和Node组成。

2.1. Master

控制k8s集群,需要1个或1组服务器用于Master节点,管理Node集群。

包含下列关键进程:

  • kube-apiserver:提供HTTP API服务接口,用于资源控制

  • kube-controller-manager:资源控制中心

  • kube-scheduler:负责Pod调度

  • etcd:Master集群管理

2.2. Node

工作节点,被Master分配工作负载。需要向Master注册以扩容。

包含下列关键进程:

  • kubelet:负责Pod对应容器的创建、启动、停止等任务,并与Master协调

  • kube-proxy:负责Service等通信与负载均衡

  • 容器运行时:在容器中运行的任务

Namespace:用于集群逻辑上的隔离,在一个物理集群上构造多个虚拟集群,每个资源对象只能属于1个Namespace,默认default

3. 应用类

3.1. Pod

最小调度单位。特点:

  • 包含多个容器,其中一个是Pause根容器

  • IP地址唯一(Pod IP),多容器共享IP

    • 配置containerPort后,形成Endpoint,Pod可对外通信,可配置多个

    • 若配置hostNetwork,直接走宿主机

  • 多容器共享挂载的Volume

  • 任意2 Pod间可TCP/IP直接通信,采用虚拟二层网络

  • 常驻的Pod进程,需要放置到前台运行

3.2. Service

无状态服务。特点:

  • 包含一组Pod,用于提供服务(可用Deployment创建)

  • 拥有一个全局虚拟ClusterIP地址,用于k8s集群内部通信,生命周期内不会改变

    • 可通过DNS(服务名 -> IP映射)隐藏IP地址配置

    • 通过该IP访问服务(需要配置port),Service通过kube-proxy进行负载均衡,路由到具体的Pod上

    • 该IP无法ping通

    • 可配置nodePort,配合Node IP(物理节点IP),将服务暴露给外部网络

  • Headless Service:无ClusterIP,解析DNS获得所有Pod的Endpoint,直接和Pod通信,无需转发

Label:键值对,给Node、Pod、Deployment、Service等上标签。

Label Selector:用于筛选资源对象,可用等式(等号,不等号)或集合操作(in或not in),可用AND关联

  • Pod调度时,可用于选取特定的Node运行

  • Deployment创建时,可用于选取和匹配特定Pod,保证运行时的副本数量

  • Service创建时,可用于选取和匹配特定Pod加入服务中

3.3. Deployment

Pod模板,用于创建指定数量的Pod(类似ReplicaSet),用于无状态服务。特点:

  • 需要指定副本数量(replicas),Pod标签选择器(selector,用于调度到匹配的Node)和Pod创建模板(template

  • 能自动控制,保证存活Pod数量与定义一致

下图是Deployment、Pod、Service的结合:

  • 先Deployment,后Service

  • Deployment创建了3个label为app=backend的Pod

  • Service通过Label Selector将3个Pod纳入服务中

  • 一般,访问Service的ClusterIP,通过负载均衡路由到具体Pod上

图片.png

Ingress:通过虚拟域名,将服务进行路由转发,类似Nginx虚拟主机HTTP代理,

  • 暴露服务到外部时,不需要每个服务占用一个物理nodePort端口了

3.4. StatefulSet

特殊的Deployment,用于有状态服务。额外特征包括:

  • Pod拥有唯一、稳定的ID

  • Pod启动顺序受控

  • 采用持久化存储卷,通过PV或PVC实现,Pod删除时,存储卷不会被删除

  • 需要配合Headless Service使用,为每个Pod创建DNS域名,格式如下

    • podname.podname.headless_service_name

但能力有限,因此有Operator框架和众多实现,并未来会以此进行替换。

3.5. Job

批处理应用

3.6. ConfigMap和Secret

配置数据,后者用于敏感数据。特点:

  • 可通过键值对形式传入,也可以通过Volume形式挂载(传入Pod等定义中)

  • 更新后,k8s会重新获取其内容并在目标节点上更新

3.7. HPA与VPA

HPA:横向自动扩缩容(调整Pod数量)

VPA:纵向自动扩缩容(调整Pod使用的系统资源量)

4. 存储类

参考:kubernetes系列(十四) - 存储之PersistentVolume - 宝树呐 - 博客园

4.1. Volume

存储卷,挂载到Pod中,供Pod内多个容器共享,生命周期与Pod相同。

它只能定义在Pod中,不能独立定义,属于静态管理。

类型常见的包含:

  • emptyDir:临时目录

  • hostPath:宿主机

  • 公有云,如GCE、AWS等

  • 其它类型:如iscsi, nfs

4.2. Persistent Volume(PV)

系统动态管理的存储卷,独立定义在Pod外,是k8s集群中的资源。

分为2类:

  • 静态PV:管理员手动创建的PV

  • 动态PV:当静态不满足PVC请求时,通过StorageClass尝试创建新的PV

    • PVC声明有StorageClass

    • StorageClass有被创建

    • 需要启用apiserver上的DefaultStorageClass

4.3. StorageClass

存储类,描述存储卷的特征,包含:

  • provisioner:第三方存储插件

  • parameters:创建PV需要的参数

  • reclaimPolicy:PV回收策略

它会被用于PVC中。

4.4. PVC

表示希望申请PV的规格,类似“申请书”,包含:

  • accessModes:访问模式

  • storageClassName:动态创建PV的存储类,""表示禁用动态创建PV

  • resources:存储资源规格

其优先使用最匹配的静态PV进行绑定。若失败,则通过StorageClass动态创建PV。

PVC可定义在Pod、Deployment、StatefulSet等,创建、使用PV并进行挂载。

5. 安全类

即RBAC角色权限控制。

资源对象包括:Role和ClusterRole。前者作用于某个命名空间,后者作用于整个集群。

6. k8s安装

kubeadm:[安装 kubeadm Kubernetes](https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)

0 comments

Be the first person to leave a comment!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK