• k8s介绍


    目录

    Ingress

    Sevice

    Development

    Pod

    Master节点

    Node节点


    K8S 的全称是Kubernetes,因为在首字母k和尾字母s中间有8个字母,因此被简写为 K8S(类似的还有i18n等)。它是由谷歌开源的,主流的容器管理平台。

    它的 logo 也很有意思,K8S 就像一个舵一样,让用户能够在茫茫大海中将满载集装箱的大船(docker)驶向成功的彼岸。

    借助 K8S 提供的能力,运维人员——甚至是前端开发人员——能够很容易地在集群环境中部署和管理容器。并且,对于以下功能,K8S 也能够很好地支持:

    • 负载均衡
    • 高可用
    • 高并发(多实例)
    • 集群管理

    在 K8S 中,所有资源都是通过声明式配置进行管理的,它们被称作 K8S 对象。以 namespace 为不同类型的对象所需的配置不完全相同,但他们都应有如下几个基础配置:

    • apiVersion - 创建该对象所使用的 Kubernetes API 的版本,不同的版本,对于 yaml 中可使用配置项的字段、格式有不同的要求。
    • kind - 想要创建的对象的类别
    • metadata - 帮助唯一性标识对象的一些数据
    • spec - 你所期望的该对象的状态

    常见的 K8S 对象包括 Namespace、Ingress、Sevice、Development、Pod。其中,Namespace 是一个虚拟的概念,用来对集群划分不同的命名空间。通常,同一个 Namespace 中的资源,其命名应该是唯一的。其他几种类型的资源的关系如下图所示:

    Ingress

    通常一个集群会包含数台物理主机,它们都是集群的节点,这些节点需要一个统一的 IP 进行访问。Ingress 提供了这项能力,它是整个集群的流量入口。

    Ingress 控制器有多种实现,比较常见的是基于 Nginx 实现的。

    Sevice

    流量从 Ingress 进入集群之后,应该被分配给不同的容器处理。但通常来说,容器的 IP 不是固定的,这是因为在 K8S 中,可以随时增减容器的数量,此时容器 IP 就是动态的。

    Service 是一个抽象概念,它的作用是在 Ingress 和 Pod 之间解藕它们二者的关联。它会动态获取可用的 Pod 的信息,传递给 Ingress,以保证进行正确的负载均衡。

    不论是正常的增减容器数量(扩缩容)还是容器自身因为意外重启,流量总会被分配到可用的容器上。

    Development

    Development 是用于管理副本集和容器配置的。K8S 不建议用户直接操作副本集配置,所以 Development 通常是用户所需要接触的最基础的配置。

    通过 Development,可以实现如下功能:

    • 修改副本数量,然后副本集会以修改后的数量自动增删容器
    • 修改容器配置,此时会采用先启动新的容器,然后关闭旧的容器的方式,依次更新容器。这个阶段,服务一直会处于可用的状态。 

    Pod

    Pod K8S 中最小的部署单元,它包含了一组容器(可以是一个或多个)。同一个 Pod 中的不同容器之间可以通过localhost:的方式互相访问对方暴露出来的服务,同时,容器之间可以访问共同的数据卷。多容器的使用场景通常是一个主容器加上多个 sidecar,他们彼此配合,共同实现功能需求。

    以下是多容器配合的一个实例:

    上图中的 Web Server 容器可以对外提供资源访问的服务,同时,File Puller 作为一个 sidecar 容器,可以同时将远端的内容更新到本地存储中,以保证 Web Server 提供的内容是最新的。

     

    k8s集群由Master节点和Node(Worker)节点组成。

    Master节点

    Master节点指的是集群控制节点,管理和控制整个集群,基本上k8s的所有控制命令都发给它,它负责具体的执行过程。在Master上主要运行着:

    1. Kubernetes Controller Manager(kube-controller-manager):k8s中所有资源对象的自动化控制中心,维护管理集群的状态,比如故障检测,自动扩展,滚动更新等。
    2. Kubernetes Scheduler(kube-scheduler): 负责资源调度,按照预定的调度策略将Pod调度到相应的机器上。
    3. etcd:保存整个集群的状态。 

    Node节点

    除了master以外的节点被称为Node或者Worker节点,可以在master中使用命令 kubectl get nodes查看集群中的node节点。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,该节点上的工作负载就会被Master自动转移到其它节点上。在Node上主要运行着:

    1. kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能
    2. kube-proxy:实现service的通信与负载均衡
    3. docker(Docker Engine):Docker引擎,负责本机的容器创建和管理

     

  • 相关阅读:
    C++实现快速排序的两种不同写法
    @RestController 注解网页返回 [] ,出现的bug
    记一次定时任务scheduler启动不了的日志
    解决方案:AI赋能工业生产3.0,从工业“制造”到“智造”
    Visual Assist 代码辅助检查和重构
    数说故事以领先的大数据分析及服务实践,实力入围「Cloud 100 China 2022」首届榜单
    评价——灰色关联分析
    GBase 8c审计日志维护(一)
    艾美捷MTT细胞增殖检测试剂盒测定方案
    【面试HOT100】子串&&普通数组&&矩阵
  • 原文地址:https://blog.csdn.net/yzding1225/article/details/127442606