2.入门篇:Kubernetes基础组件和部署要点
2.入门篇:Kubernetes基础组件和部署要点
重点!!!
通过上一章节的学习,想必你对kubernetes已经有了一个较初步的了解,接着本章节将首先就基础组件、集群基础对象和控制器进行详细的介绍和说明,然后辨析集群网络中的三种网络和专有名词,最后关于新手部署测试和生产环境的部署要点进行一些归纳和说明
1.基础组件
如图所示,kubernetes集群中主要分为三个组件:
1.1.Master Components
1.kube-apiserver:作为k8s控制平面的前端,也是所有请求接收的入口。
2.etcd:k8s集群后端所有集群数据的高可用k/v存储数据库。
3.kube-scheduler:监听变更请求,然后通过一系列filtering(过滤)、scoring(打分)策略,调度pod运行
4.kube-controller-manager:一个独立的进程,通过控制循环(control loop),将期望态和运行态保持一致
5.cloud-controller-manager:kubernetes与云厂商提供的服务能力对接的关键组件。
又称kubernetes cloudprovider。
通过这个组件,可以让用户在创建k8s LoadBalancer 类型的service的时候,自动的为用户创建一个阿里云SLB,同时动态的绑定与解绑SLB后端,并且提供了丰富的配置允许用户自定义生成的LoadBalancer。
1.2.Node Components
1.kubelet:每个node节点的k8s客户端,用于确保pod的运行
2.kube-proxy:确保k8s服务间连接和转发的组件
3.Container Runtime:运行容器的软件引擎,常见的有:Docker, rkt等
1.3.Addons(附加组件)
1.DNS: 常用的有CoreDNS
2.CNI (flannel, calico, ...) :网络插件接口
3.Web UI (Dashboard) :可视化平台
4.Container Resource Monitoring:容器资源监控
5.Cluster-level Logging:负责保存、搜索和查看容器日志
...
2.基础对象(Objects)
除了上面提到的基础组件之外,kubernetes还提供了丰富的基础对象(Objects),如:Pod、Service、NameSpace和Volume
我们来看一下这几个基础对象的定义:
1>Pod:你可以理解为一组docker容器的集合,如redis pod、tomcat pod;其通过pod controller负责pod数量的变更通知和执行,和service相互协作,达到动态的特性;
2>Service:类似于服务注册中心eureka,负责上游服务的动态发现、注册和续约;
3>Volume:就是个存储卷,其支持很多类型的存储系统,如分布式存储、临时存储、网络存储等;
4>NameSpace:名称空间,你可以理解为资源的作用域、虚拟围栏;
这是一张传统架构tomcat请求redis集群于kubernetes集群中的新架构。如图可知,
1>外部流量首先访问tomcat service,tomcat service再将流量分发至相关的tomcat pod上面;
2>接着,tomcat pod也不是直接访问相关redis pod,而是同理,只访问redis server,redis server负责后续流量的转发。
如果你了解eureka,想必你对这张图的理解是很快的。
3.控制器
另外,kubernetes还包含了更高一层的抽象,称之为控制器(Controllers)。
控制器建立在基础对象之上,并提供了额外、丰富且方便的功能,他们包括:ReplicaSet、Deployment、DaemonSet、StatefulSet、Job等
注意:这里你只需要先有一个基础概念的了解,对于每个控制器的区别和应用场景,我们后续的章节会逐个讲解。
4.集群网络
如上图所示,kubernetes集群可分为三种网络:节点网络、Pod网络和Service网络。在kubernetes中,你会碰到以下三种IP,具体如下:
1>node ip: 配置在节点的网卡上,用于表示node节点的ip地址
2>pod ip:配置在容器的虚拟网卡上,用于表示pod资源的ip地址
3>service ip:又称为cluster ip,不进行具体配置,只存在于iptables条目和DNS的解析记录中,用于表示service资源的ip地址
5.部署要点
测试环境:
可以使用单Master节点,单etcd实例;
Node节点按需配置;
存储直接使用Nfs或glusterfs
生产环境:
1>高可用etcd集群(需定期备份etcd数据文件),建立3、5或7个节点,保证一定的冗余能力;
2>Master节点要保证高可用之一:
kube-apiserver是无状态的,可多实例部署,并借助于Haproxy、nginx或keepalived进行vip流量实现多实例冗余;
3>Master节点要保证高可用之二:
kube-scheduler和kube-controller-manager组件只能有一个活动实例,但可以有多个备用(主备模式);4>Node节点:数量越多,冗余和负载能力就越强;
5>集群存储建议采用Ceph、glusterfs、iSCSI及各种云存储等。
@版权声明:51CTO独家出品,未经允许不能转载,否则追究法律责任