美文网首页k8sK8Sk8s
一、Kubernetes简介

一、Kubernetes简介

作者: jan29 | 来源:发表于2021-11-11 19:01 被阅读0次

    Cloud Native Application 云原生 程序开发出来就运行在云平台上,而非传统的物理机单机主机上
    ServerLess 无服务器概念 Knative
    Faas:函数即服务,调用时运行,不调用时服务不运行

    1、docker与kubernetes的关系

    1.1docker介绍

    • docker是容器的一种,对于容器来说,它事实上也是虚拟化的一种,被称之为操作系统级的虚拟化。
      容器运行的时侯,所有的容器全部共同使用操作系统的内核,而对于每一个容器来说,只有必要的应用和二进制文件。
      容器为任务而生,每一个容器通常,只会运行一个任务,在主机操作系统上体现为一个进程。各容器之间通过namespace和cgroup来进行隔离与资源的限制。
    • 但是,容器也会有自身缺陷:
      1、基于命令行一次只能启动一个容器,容器和容器之间没有办法建立更好的关联关系。
      2、当容器数量足够多的时候,管理员不能有效的记录每一个容器的配置,导致容器运行混乱。
      3、容器没有办法做到负载均衡,自我修复,弹性伸缩等
    • docker的解决方案
      通过docker-compose去做容器的单机编排
      通过docker-swarm去做容器的集群编排
      但这两种方式都没有kubernetes的生态强大,并且能做到的功能弱于kubernetes。接下来去介绍一下基于google开源的kubernetes

    1.2kubernetes介绍

    kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。

    kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

    • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
    • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
    • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
    • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
    • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
    • 存储编排:可以根据容器自身的需求自动创建存储卷

    1.3 kubernetes组件

    一个kubernetes集群主要是由控制节点(master)工作节点(node)构成,每个节点上都会安装不同的组件。

    master:集群的控制平面,负责集群的决策 ( 管理节点)

    ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制

    Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上

    ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等

    Etcd :负责存储集群中各种资源对象的信息

    node:集群的数据平面,负责为容器提供运行环境 ( 工作节点 )

    Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器

    KubeProxy : 负责提供集群内部的服务发现和负载均衡

    Docker : 负责节点上容器的各种操作

    1.4交互流程

    image.png

    以创建一个POD(kubernetes的最小资源单位,暂且理解为一个容器或一组容器)为例

    1、用户申请创建一个POD
    2、该请求会被APIServer所接受,ApiServer收到用户请求后,首先会对用户做身份认证以及权限验证;
    3、APIServer通过认证之后会将该任务的描述信息写入etcd数据库当中
    4、Scheduler监听ApiServer,和ApiServer保持心跳联系;
    5、Scheduler定时询问ApiServer是否有创建POD的请求,ApiServer查询数据库,拿到请求之后,交由Scheduler,Scheduler向ApiServer获取当前所有Kubelet状态,选择一个合适的后端(Kubelet),交给ApiServer;
    6、ApiServer存放在etcd数据库当中
    7、Kublet监听ApiServer,和ApiServer保持心跳联系;
    8、Kubelet询问ApiServer是否有创建POD的请求,ApiServer查询数据库,拿到任务之后,交由Kubelet,Kubelet创建POD完成后,
    告知ApiServer;
    9ApiServer存放在etcd数据库当中
    10、controller-managert监听ApiServer,和ApiServer保持心跳联系;
    11、controller-manager向apiserver发起请求,询问是否有任务;
    12、apiserver会将POD的任务信息以及描述信息发送给controller-manager;
    13、controller-manager对比任务是否有异常,如果没有,则确定任务完成;
    14、如果有,则将未完成的任务返回给kube-apiserver

    1.5kubernetes关键概念

    1、Pod

    kubernetes的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

    • 自主式Pod
      通过手动创建Pod,该方式创建出来,不具备k8s的编排特性,当中运行的只是一个或一组容器
    • 控制器管理的Pod
      通过控制器去创建Pod,该方式创建出来,具备k8s的编排特性,具有生命周期,可以做到负载均衡,弹性伸缩,滚动更新等。

    2、控制器controller

    • ReplicationController
      用于数据副本维持在期望值,当前已被弃用,由ReplicaSet替代
    • ReplicaSet
      保证副本数量一直维持在期望值,并支持pod数量扩缩容,镜像版本升级
    • Depliyment
      通过ReplicaSet控制Pod,并支持滚动升级、回退版本。只能管理无状态应用
    • StatefulSet
      管理有状态应用
    • HPA(Horizontal Pod Autoscaler)
      可以根据集群负载自动水平调整Pod的数量,实现削峰填谷
    • DaemonSet
      在集群中的指定Node上运行且仅运行一个副本,一般用于守护进程类的任务
    • Job
      它创建出来的pod只要完成任务就立即退出,不需要重启或重建,用于执行一次性任务
    • Cronjob
      它创建的Pod负责周期性任务控制,不需要持续后台运行

    3、Service

    在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。
    为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。


    image.png

    4、网络

    • Pod网络
      通过插件提供CNI
      (1、flannel提供网络配置 2、calico提供网络配置和网络策略 3、canel通过flannel提供网络配置,calico提供网络策略 4、等等)
    • 集群网络(Service网络)
    • 节点网络
    image.png

    相关文章

      网友评论

        本文标题:一、Kubernetes简介

        本文链接:https://www.haomeiwen.com/subject/mkwwzltx.html