Eli's Blog

1. 简介

LVS 主要由两部分组成:

  • ipvs:ip virtual server,是工作在内核空间上的一段代码,主要是实现调度的代码,它是实现传输层负载均衡的核心。
  • ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,用于定义谁是集群服务,谁是后端真实服务器

IPVS 基于 Netfilter, Netfilter 的数据包有五个挂载点Hook Point:PRE_ROUTING、INPUT、OUTPUT、FORWARD、POST_ROUTING。IPVS工作在其中的INPUT链上

img

专有名词

  • DS:Director Server,指的是前端负载均衡器。

  • RS:Real Server,指的是后端工作的服务器。

  • VIP:Virtual IP,用户请求的目标IP地址。

  • DIP:Director Server IP,前端负载均衡器的IP地址。

  • RIP:Real Server IP,后端服务器的IP地址。

  • CIP:Client IP,访问客户端的IP地址。

1. Helm

Helm:让应用管理(Deployment、Service等)可配置,能动态生成。通过动态生成的k8s资源清单文件 (deployment.yaml, service.yaml),然后调用kubectl自动执行k8s资源部署。

Helm 包管理工具,是部署环境的流程封装

Helm 两个重要概念:

  • chart: 创建一个应用的信息集合,包含各种kubernetes对象的配置模板、参数定义、依赖关系、文档说明等。chart是应用部署的自包含逻辑单元,即yum中的安装包
  • release: chart的运行实例。当chart被安装到kubernetes中,就生成一个release。chart能够多次安装到同一个集群,每次安装都是一个realease

helm 包含两个组件:Helm 客户端 和 Tiller 服务器

helm

Helm客户端: 负责chart和release的创建和管理、和Tiller的交互

Tiller服务器:运行在kubernetes集群节点中,处理Helm客户端请求,与API Server交互

1. 机制说明

API Server 是集群内部各个组件通讯的中介,也是外部控制的入口。k8s 使用认证(Authentication)、鉴权(Authorization)、准入控制(Admission Control) 三步来确保API Server的安全。

2. 认证 (Authentication)

  • HTTP Token:HTTP Request Header 的 Token字段

  • HTTP Base: 客户端通过base64 USERNAME:PASSWORD, 填充 HTTP Request Header 的 Authorization字段,服务端收到后解码获取用户名和密码

  • HTTPS: 基于CA根证书签名的客户端身份认证方式。(推荐)

1. 调度说明

1.1 简介

Scheduler 是 K8S 的调度器,主要任务是把定义的 pod 分配到集群节点上。它主要考虑如下问题:

  • 公平: 如何确保每个节点都被分配资源
  • 资源高利用率:集群所有资源最大化被使用
  • 效率:调度性能要好,能够尽快地对大批量的 pod 完成调度工作
  • 灵活:允许用户根据自己的需求控制调度的逻辑

Scheduler 作为独立的进程允许,启动后会一直监听API Server,获取 PodSpec.NodeName 为空的pod,对每个 pod 都会创建一个 binding,表明该 pod 应该放到哪个节点上

1. ConfigMap

提供向容器注入配置信息的机制,可以用来保存单个属性,也可以用来保存整个配置文化或 JSON 二进制大对象

1.1 创建 ConfigMap

1.1.1 文件

--from-file:指定文件或目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat > ./ui.properties <<EOF
color=red
background=cyan
EOF

$ kubectl create configmap ui-config --from-file=./ui.properties

$ kubectl get cm ui-config -o yaml
apiVersion: v1
data:
ui.properties: | # key 为文件名称
color=red
background=cyan
kind: ConfigMap
metadata:
...

1. Service 概念

通过创建 Service, 可以为一组功能相同的容器提供一个统一的入口,并将请求均衡负载发送到后端的各个容器上

  • 通过 Label Selector ,实现 SVC 与容器组关联
  • 负载均衡算法默认使用 RR (Round-Robin 轮询调度)
  • 亲和性:通过service.spec.sessionAffinity = ClientIP 来启用 SessionAffinity 策略
  • 只提供 4 层负载均衡能力 (基于 IP:PORT 转发),没有7层功能 (通过主机名或域名负载均衡)

svc

1. K8S 资源

k8s中,所有的内容都被抽象为资源,资源实例化后,称为对象

集群资源分类:

  • 名称空间级别: 只在本名称空间下可见
  • 集群级别: role, 不管在什么名称空间小,均可见
  • 元数据级别: HPA(可以CPU利用率平滑扩展)

1. 架构

Kubernetes特点:

  • 轻量级:消耗资源小
  • 开源
  • 弹性伸缩
  • 负载均衡:IPVS

1.1 核心组件

  • etcd: 保存整个集群的状态

  • apiserver: 资源操作的唯一入口,提供了认证、授权、访问控制、API注册和发现等机制

  • controller manager: 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等

  • scheduler: 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上

  • kubelet: 负责维护容器的生命周期、Volume(CVI) 和网络(CNI)的管理

  • container runtime: 负责镜像管理以及Pod和容器的真正运行 (CRI)

  • kube-proxy: 负责为Service提供cluster内部的服务发现和负载均衡 (四层)

    • iptables
    • ipvs

etcd: 可信赖的分布式键值对存储服务,为整个分布式集群存储关键数据,协助分布式集群的正常运转。