• 云原生之容器化:2、Kubernetes基础组件和部署要点


    重点!!!
    代码地址在这里:https://github.com/flqandlcq/kubernetes.git

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

    1、基础组件

    在这里插入图片描述

    如图所示,kubernetes集群中主要分为三个组件:

    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。

    2、Node Components

    1.kubelet:每个node节点的k8s客户端,用于确保pod的运行
    2.kube-proxy:确保k8s服务间连接和转发的组件
    3.Container Runtime:运行容器的软件引擎,常见的有:Docker, rkt等

    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
    我们来看一下这几个基础对象的定义:

    Pod:你可以理解为一组docker容器的集合,如redis pod、tomcat pod;其通过pod controller负责pod数量的变更通知和执行,和service相互协作,达到动态的特性;
    Service:类似于服务注册中心eureka,负责上游服务的动态发现、注册和续约;
    Volume:就是个存储卷,其支持很多类型的存储系统,如分布式存储、临时存储、网络存储等;
    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,具体如下:

    node ip: 配置在节点的网卡上,用于表示node节点的ip地址
    pod ip:配置在容器的虚拟网卡上,用于表示pod资源的ip地址
    service ip:又称为cluster ip,不进行具体配置,只存在于iptables条目和DNS的解析记录中,用于表示service资源的ip地址

    5、部署要点

    测试环境:

    可以使用单Master节点,单etcd实例;
    Node节点按需配置;
    存储直接使用Nfs或glusterfs

    生产环境:

    高可用etcd集群(需定期备份etcd数据文件),建立3、5或7个节点,保证一定的冗余能力;
    Master节点要保证高可用之一:
           kube-apiserver是无状态的,可多实例部署,并借助于Haproxy、nginx或keepalived进行vip流量实现多实例冗余;
    Master节点要保证高可用之二:
           kube-scheduler和kube-controller-manager组件只能有一个活动实例,但可以有多个备用(主备模式);
    Node节点:数量越多,冗余和负载能力就越强;
    集群存储建议采用Ceph、glusterfs、iSCSI及各种云存储等。

  • 相关阅读:
    Java对象的深度拷贝
    Android 顶部标签栏及内容列表的设计与实现
    【全开源】Java聚合跑腿系统对接云洋聚合跑腿系统源码低价快递小程序APP公众号源码
    .netcore全局异常处理
    亚马逊一分钟1000+的僵尸链接获取只需三步
    内联函数在头文件内定义
    Elementor Pro许可证
    【Node.js】01 —— fs模块全解析
    前后端分离开发工具YAPI部署记录
    2. 慢查询、索引、执行计划详解
  • 原文地址:https://blog.csdn.net/flq18210105507/article/details/126285126