2.入门篇:Kubernetes基础组件和部署要点

2.入门篇:Kubernetes基础组件和部署要点

2020-02-05 17:53:02

重点!!!

代码地址在这里:https://github.com/Aaron1989/k8s_sample/tree/master

        通过上一章节的学习,想必你对kubernetes已经有了一个较初步的了解,接着本章节将首先就基础组件、集群基础对象和控制器进行详细的介绍和说明,然后辨析集群网络中的三种网络和专有名词,最后关于新手部署测试和生产环境的部署要点进行一些归纳和说明

1.基础组件


kubernetes_components_new.png        如图所示,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:名称空间,你可以理解为资源的作用域、虚拟围栏;

k8s-basicobjects.png        这是一张传统架构tomcat请求redis集群于kubernetes集群中的新架构。如图可知,

1>外部流量首先访问tomcat service,tomcat service再将流量分发至相关的tomcat pod上面;
2>接着,tomcat pod也不是直接访问相关redis pod,而是同理,只访问redis server,redis server负责后续流量的转发。
如果你了解eureka,想必你对这张图的理解是很快的。

3.控制器

k8s-controllers.png

        另外,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独家出品,未经允许不能转载,否则追究法律责任


版权声明:
作者:WaterBear
链接:https://l-t.top/2038.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录