Kubernetes 基础概念

k8s基础组件

容器资源控制器

MESOS(APACHE)
Docker Swarm(Docker)
Kubernetes (Goole)

Kubernetes架构组件

kubectl:K8s的命令行管理工具

Master节点属于K8s的大脑

API Server:所有服务的访问入口
scheduler:负责任务的节点选择和分配,关于多节点必要都需要调度器
controller-manager:属于Pod的控制器,目的是维持副本的期望数量,属于冗余方案
Etcd:键值对数据库,储存K8S集群所有重要信息(数据持久化)

Node节点由Master 管理,Node负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期

kubelet:实现容器的生命周期
kube-proxy:负责写入规则至 IPTABLES、IPVS 实现服务映射访问(实现集群外的访问Pod应用)
Container:docker,也可以是其他容器
Pod:容器的集合,K8s的最小操作单位

什么是POD?

POD类型分为自主式和控制器管理的POD,可以理解为非管理和被管理,那么自主式POD的缺憾是一旦进程死亡或重启无法满足期望值(RC,ReplicationController)而拉起。

传统模式下运行的docker都是独立方式运行的,每个容器都有自己的IP地址、挂载卷等,在Kubernetes进行移植时,很难迁移,由此产生了POD,首先定义一个POD,先启动第一个容器(pause网络栈、存储),且一个POD可以封装很多个容器。

POD 控制器类型:

RC,ReplicationController:假设有个POD死了,便会创建一个新的POD来满足这个期望值,在新版本Kubernetes中,建议使用RelicaSet取代。

RelicaSet:和RC没有本质上的区别,但是,RS支持集合式的selector,在创建POD的时候会被打上诸如app=nginx;version=v1.8此类标签,可以做一个集合方案来满足筛选条件。

Deployment:并不负责OPD的创建,一般使用进行管理RS,支持rolling-update滚动更新及回滚操作(RS并不会被删除,只是被停用),这是在生产环境中常用的。

HPA:Horizontal Pod Autoscaling,在V1版本中仅支持POD的CPU利用率扩容。

StatefulSet:主要解决有状态服务问题,docker主要面对的是无状态服务(没有对应的存储是需要实时的保留),无状态典型的服务有apache等,有状态服务mysql,mariadb等。

应用场景包括:
1、稳定的持久化存储:就是POD死亡以后调度一个新的来取代,他的存储用到的还是之前的存储并不会变,不会改写里面的数据,也不会丢失;
2、稳定的网络标识:主机名不变,防止在集群里面定义了一个POD名称去调用结果出现了一个新的POD顶替以后名称发生变化需要重新写入;
3、有序部署:分为扩展和回收阶段,当前一个POD处于Running和Ready的状态,第二个才可以被创建,按启动顺序来定义有序部署。

DaemonSet:确保全部或者一些node上运行一个POD副本,当有node加入集群,会为他们新增一个POD,通常用于运行 daemon守护进程。

Job,Cronjob:复杂批处理任务,仅执行一次,后者基于时间的job。

POD与POD之间的通讯及POD与外部之间的通讯

网络模型:假定了所有POD都在一个可以直接连通的扁平网络空间中,在k8s中扁平化的概念是所有的POD都可以通过对方的IP直接到达,如果想在自己的集群中构建k8s需要先解决扁平化的网络空间。

1、lo:同一个POD中的多个容器,他们之间要互相访问,共用pause的io,基于docker0网卡作为网关。

2、Overlay Network:各POD之间的通讯,Flannel是k8s中最常用的解决扁平化网络的方案,让集群的不同节点主机创建的Docker容器都具有一个唯一的IP地址,可以通过修改docker的配置文件,将docker分配的网段修改掉,最难就是容器A访问B和C。

3、POD到service是基于iptables的转发。

4、POD到外网是基于iptable的SNAT。

上一篇
下一篇