• 云原生之容器化:1、何谓Kubernetes?


    1、何谓Kubernetes?

    随着业务需求的快速发展,“动态”特性仿佛就成了技术解决业务刚需的必要条件。
    3年前的spring cloud通过注册中心eureka解决了服务动态上下线、注册和续约的问题;
    近几年,kubernetes则通过其强大的基础对象和平台的动态特性,从运维侧对产品的稳定性和扩展性保驾护航!

    2、容器化究竟解决了什么问题

    在这里插入图片描述

    作为资深的互联网从业者,我对于运维人员一直强调的一点就是:

    运维人员必须投身到发布环节中,充分了解业务,才能产生价值!

    这里的业务,我把它分为两块来看:

    首先:

    你需要去充分了解所辖项目组的业务代码和研发人员共同owner。而不是说,我交付给你服务器,后面的事情我就不管了,这是万万不可的:
    一方面,你完全脱离了业务。
    你并不知道这个项目组的业务今天上了什么新功能、这个新功能如何回归、如何测试,新代码的配置存在于哪个git仓库的哪个项目的哪个目录中,对其配置的正确性你也就无从检查了?(如运维类配置、业务字段的配置等等)
    另一方面,对于线上问题的定位会很欠缺。
    比如当我们的一个pc端应用的搜索功能出现问题时,你能否第一时间怀疑到相关的微服务程序?而不是等着研发人员走过来和你说:“帮我查看一下某几台上面xx程序的日志呢?”

    其次:

    就是需要充分了解整个上线流程。比如:大版本如何定义、hotfix流程怎么走、rollback流程怎么走、如何定义紧急两字、什么时候做Code Freeze(代码冻结)、谁来做?等等

    只有当你切身地投入其中,才能发现、提出和改善业务流转中的问题,这样你的价值也就得以体现!

    现在我们再来谈一下上线流程问题

    传统架构中,我们都会碰到一个头疼的问题:

    那就是测试环境部署成功、生产环境部署的时候却连连报错?为什么?
    
    那就是环境差异性带来的问题!应用程序和其依赖被没有很好的打包、组装在一起!这也就是容器化解决的根本难题。
    
    • 1
    • 2
    • 3

    3、Kubernetes架构

    如果把容器化比作集装箱,其作用是打包程序所依赖的相关插件和库文件;

    那么,Kubernetes就好比是一个设施丰富且完善的船坞码头,它复杂管理这些集装箱,如何“堆放”才能更合理、更有效,这就是它需要考虑和做的事情。

    在这里插入图片描述

    4、Kubernetes的部署架构

    在这里插入图片描述
    上面是关于Kubernetes的组件架构图,这是我从官网摘录下来的。

    如图,我们可以粗略观察发现,Kubernetes分为Master端和Nodes端,以及一个外接的cloud端。

    他们工作逻辑和内部组件,下面分开进行描述:

    5、Master节点

    又称为控制平面:control plane
    
    • 1

    包括:kube-apiserverkube-schedulerkube-controller-manageretcd四个组件。

    kube-apiserver
    是一个将kubernetes控制平面中的API暴露出来的API服务,用于接收用户端的操作请求,这服务是kubernetes控制平面的前端。
    它是无状态应用,用户可以运行多个kube-apiserver组件的实例,用于平衡实例的请求流量。

    kube-scheduler
    用于watch监听apiserver的资源变动(增删改查),并调度至合适的后端node节点,从而来创建pod资源。

    kube-controller-manager
    每个控制器都是独立的二进制进程,包括:Node Controller、Replication Controller、Endpoints Controller和Service Account & Token Controllers。

    etcd
    高可用、KV结构的kubernetes的后端数据存储组件。
    文档补充:备份方案>>( https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/#backing-up-an-etcd-cluster )和官方文档 ( https://etcd.io/docs/v3.4.0/ )

    cloud-controller-manager
    是kubernetes与云厂商提供的服务能力对接的关键组件。
    又称为kubernetes cloudprovider。

    6,Node节点

    又称为数据平面:data plane
    
    • 1

    包括kubeletkube-proxyContainer Runtime这三个组件。

    kubelet
    运行在集群每个节点的客户端,需要确保相关容器运行在pod中;通过PodSpecs标签,描述容器的运行状态。

    kube-proxy
    是一个运行在集群每个节点的网络代理组件。

    Container Runtime
    支持运行容器底层环境的软件;
    支持: Docker, containerd, cri-o, rktlet 等

    7、cloud端

    ①cloud:
    作为集群外部的附加能力,通过与cloud-controller-manager组件对接,扩展kuberntes集群于云上动态扩展的特性

    8、Addons(附加组件)

    使用Kubernetes resources增加集群功能,如DNS、Web UI (Dashboard)、Container Resource Monitoring、Cluster-level Logging等等

    可用Addons请参考:附件大全(https://kubernetes.io/docs/concepts/cluster-administration/addons/)

    9、工作流程概述

    Master:
    用户通过(API、WebUI、CLI)向APIserver发送请求,kube-scheduler组件监听APIserver的资源变动,同时从Node节点中选取最合适的Node节点开始调度,并把调度结果保存至Etcd中。

    Node:
    kubelet也会监听APIserver的资源变动,并在符合的Node上通过kubelet调用相关的docker引擎进行后续打包和构建操作。

  • 相关阅读:
    Vim的基础操作
    LeetCode --- 1486. XOR Operation in an Array 解题报告
    产教融合 | 力软联合重庆科技学院开展低代码应用开发培训
    【英雄哥六月集训】第 24天: 线段树
    安全基础~通用漏洞5
    Java面试题200+大全(合适各级Java人员)
    灯塔工厂的五个典型案例
    Java 中怎么输入一个未知长度的 int 型数组元素
    第 321 场力扣周赛
    嵌入式软件行业真的没前途吗?
  • 原文地址:https://blog.csdn.net/flq18210105507/article/details/126279622