k8s的框架及各个组件的简介

文章目录

  • k8s是什么
  • k8s框架
    • Node
    • Pod
    • Pod 和 Service
    • etcd
  • 网络通讯
    • Flannel
    • 不同情况下的网络通信方式

k8s是什么

Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本。它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

通过Kubernetes你可以:

快速部署应用
快速扩展应用
无缝对接新的应用功能
节省资源,优化硬件资源的使用

Kubernetes 特点:

可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展

k8s框架

k8s的框架及各个组件的简介_第1张图片
核心组件:
APISERVER:所有服务访问统一入口
CrontrollerManager:维持副本期望数目
Scheduler:负责介绍任务,选择合适的节点进行分配任务
ETCD::键值对数据库 储存K8S集群所有重要信息(持久化)
Kubelet: 直接跟容器引擎交互实现容器的生命周期管理
Kube-proxy:负责写入规则至IPTABLES、 IPVS实现服务映射访问的

一些其他插件:
COREDNS:可以为集群中的SVC创建一-个域名IP的对应关系解析
DASHBOARD:给K8S集群提供一个B/S 结构访问体系
INGRESS CONTROLLER:官方只能实现四层代理,INGRESS 可以实现七层代理
FEDERATION:提供–个可以跨集群中心多K8S统-管理功能
PROMETHEUS:提供K8S集群的监控能力
ELK:提供KBS集群日志统一分析介入平台

如图所示,是k8s的所有组件,上半部分是属于Master, 主要做整个集群的任务调配,pod的管理和维护,将不同人物调度到不同node上运行,而下面的是node部分,主要运行不同的任务,位置pod的什么周期,和容器引擎完成交互。

Node

每个节点都运行如下Kubernetes关键组件。

Kubelet
CRI,container,running 和 interfere,直接喝容器引擎交互时间容器的生命周期的管理。与Master节点协作,是主节点的代理,负责Pod对应容器的创建,启动,停止等任务。Kubelet定期向主机点汇报加入集群的Node的各类信息,

Kube-proxy
Kubernetes Service使用其将链接路由到Pod,作为外部负载均衡器使用,在一定数量的Pod之间均衡流量。比如,对于负载均衡Web流量很有用。

Docker
Kubernetes使用的容器技术来创建容器。

Pod

Pod是k8s中能被运行的最小逻辑单元,一个pod里可以运行多个容器,这些容器共享存储、网络和命名空间,以及如何运行的规范。在Pod中,所有容器都被同一安排和调度,并运行在共享的上下文中。对于具体应用而言,Pod是它们的逻辑主机,Pod包含业务相关的多个应用容器。

Kubernetes不只是支持Docker容器,它也支持其他容器。

Pod 的上下文可以理解成多个linux命名空间的联合:

PID 命名空间(同一个Pod中应用可以看到其它进程)
网络 命名空间(同一个Pod的中的应用对相同的IP地址和端口有权限)
IPC 命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信)
UTS 命名空间(同一个Pod中的应用共享一个主机名)

Pod 和 Service

Pod 是有生命周期的,他们可以被创造,并且销毁以后不会在启动。例如 Deployment 控制Pod的数量,还可以支持滚动更新,先更新一个新的副本,然后将旧的副本删除掉,以此达到更新换代的目的。

而service定义了一组pods的逻辑集合和用于访问他们的策略。在k8s中,应用服务被法宝封装放入容器中在Pod中运行。每个Pod分配一个IP地址,然而,一个应用可以会被部署到多个Pod中,Pod也可能不断的被创造和销毁,k8s利用service这一抽象层,来讲同一应用下的pod打包,通过service进行统一访问(可能通过label实现,label是一种k8s的管理方式,用于分类管理资源对象,标签和资源属于多对多的对应关系),service将用户的请求转发到pod对应的端口上,创建了pod端口和用户访问端口的一种映射关系。

etcd

etcd的官方将它定位成一个可信赖的分布式键值存储服务,它能够为整个分布式集群存储
一些关键数据,协助分布式集群的正常运转

k8s的框架及各个组件的简介_第2张图片
Etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现,它通过Raft一致性算法处理日志复制以保证强一致性,我们可以理解它为一个高可用强一致性的服务发现存储仓库。

在kubernetes集群中,etcd主要用于配置共享和服务发现

Etcd主要解决的是分布式系统中数据一致性的问题,而分布式系统中的数据分为控制数据和应用数据,etcd处理的数据类型为控制数据,对于很少量的应用数据也可以进行处理。

网络通讯

Kubernetes的网络模型假定了所有Pod都在-一个可以直接连通的扁平的网络空间中,这在
GCE (Google Compute Engine)里面是现成的网络模型,Kubernetes 假定这个网络已经存在。
而在私有云里搭建Kubernetes 集群,就不能假定这个网络已经存在了。我们需要自己实现这
个网络假设,将不同节点上的Docker容器之间的互相访问先打通,然后运行Kubernetes

Flannel

Flannel是Core0S团队针对Kubernetes 设计的一个网络规划服务,简单来说,它的功能是
让集群中的不同节点主机创建的Docker 容器都具有全集群唯一的虚拟IP地址。 而且它还能在
这些IP地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封
不动地传递到目标容器内
k8s的框架及各个组件的简介_第3张图片
ETCD之Flannel 提供说明:
〉存储管理Flannel 可分配的IP地址段资源
〉监控ETCD中每个Pod的实际地址,并在内存中建立维护Pod节点路由表

不同情况下的网络通信方式

同一个Pod内部通讯:同一个Pod 其享同-一个网络命名空间,其享同-个Linux协议栈

Podl至Pod2
〉Pod1 与Pod2 不在同一 台主机。Pod的地址是与docker0在同- -个网段的。但docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同可Node之间的通信只能通过宿主机的物理网卡进行。将Pod的IP和所在ENode的P关联起来,通过这个关联Pod可以互相访问

〉Podl 与Pod2 在同- 一台机器。由Docker0 网桥直接转发请求至Pod2. 不需要经过Flannel

Pod至Service的网络
日前基于性能考虑,全部为LVS维护和转发

Pod到外网: Pod 向外网发送请求,查找路由表,转发数据包到宿主机的网卡,宿主网卡完成路由选择后,iptables执行Masquerade.把源IP更改为宿主网卡的IP.然后向外网服务器发送请求

外网访问Pod: Service
k8s的框架及各个组件的简介_第4张图片

你可能感兴趣的:(kubernetes)