kubernetes01-什么是k8s

00:文章简介

介绍k8s是什么?k8s集群的基础架构等基础知识。

01:介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
kubernetes简称k8s,是Google使用Go语言基于内部使用了多年的Borg重写并开源的一个开源系统。
官方的介绍是:
kubernetes是用于自动部署、扩展和管理容器化应用的开源系统。它将组成应用程序的容器组合成逻辑但愿,以便于管理和服务发现。kubernetes源自Google 15年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。
官方还介绍了它的特点:
规模:
扩展性极强
灵活:
功能没有上限,永远满足你的需求
时效:
永不过时,开源系统,可以在任意平台中使用

自己的总结:
kubernetes是Google基于内部Borg系统使用Go语言重写并开源的一款容器管理平台,它集成了Google 15年的生产环境运维经验,将运维经验落地形成了平台化的操作,使用Kubernetes相当于踩在了巨人的肩膀上。而且Kubernetes采用分布式的架构,扩展性极强;应用与底层基础架构分离,可以更灵活的管理业务;它是开源的操作系统,可以根据自己的使用习惯来进行二次开发。

带来的好处:
缩短软件开发周期,提高资源利用率,使用互补的开源技术
缺点:
每年4个重要版本,更新速度太快,且每个版本中的变动太大,每个版本都会引入新特性,很多版本不能兼容使用。

02:k8s基础架构

image

03:重要组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Master
整个k8s集群中的控制节点,负责集群中所有资源的调度和控制,不应用资源的运行,节点数量应该为奇数,不需要较高配置。

API Server
它是k8s的入口,内部封装了核心对象的增删改查操作,提供了RESTFul风格的API接口的关键服务进程,k8s集群所有资源的“增删改查”操作唯一入口,是集群间节点通信的根基。所有结果将存储到etcd中。

Scheduler
资源调度中心,根据特定的调度算法,将Pod调度到node节点上(创建生成pod请求,匹配最佳工作节点)。

Controller
将运维经验代码化的产物,负责集群内部所有节点的资源对象的自动化管理控制中心,重点实现service Endpoint的动态更新。管理k8s集群中的各种控制节点,包括replication Controller 和 node Controller。
根据资源的 期望状态 和 当前状态 进行比较,判断是否与期望状态一致,若不一致,则通知APIServer进行重启、迁移、删除等操作,最终保证集群的各种资源在预期状态下运行。
资源对象:节点、容器应用、软件版本、容器副本(个数)等等

etcd
分布式的协同数据存储服务实现方案,通过将数据分散存储,达到提高数据的可靠性或读写性能
k8s内部资源对象的数据全部保存在etcd中,来实现持久化并维护对象的一致性。

Node
k8s集群中的工作负载节点,接收到Master的任务后,分配Pod到Node节点中运行,需要较高配置。

Kubelet
Node节点上的Agent客户端,负责与Master的API Server通信,同步工作状态、抓取主机资源信息。
它有垃圾回收机制,包括容器垃圾回收和镜像垃圾回收。

Kube-proxy
管理service并提供service通信和负载均衡的功能,提供算法将客户端流量负载均衡到service对应的一组后端pod
使用etcd的watch机制,实现服务发现功能,维护一张service到endpoint的映射关系,从而保证后端pod的IP变化不会影响用户的访问
将service资源转换成iptabels或ipvs规则,是k8s的核心网络组件。

Fluentd
集群中的一种日志管理方案,不是k8s内部实现的功能

flannel
它是针对k8s设计的一个覆盖网络工具,它的目的是为集群中的所有节点重新规划ip地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的ip地址,并让属于不同节点上的容器能够通过内网ip通信

Docker
底层容器运行依赖,是运行k8s集群中各种资源对象的载体。

Harbor
管理k8s集群中的所有docker镜像

04:内部资源对象

image

05:k8s与docker的关系

docker是容器管理平台

k8s是容器编排工具

k8s依赖于docker-shim 和 docker-containerd来创建容器

image

docker创建容器原理:

containerd -> docker-shim -> runc -> 容器

06:k8s与docker的关系中涉及名词

CNCF CNI