zoukankan      html  css  js  c++  java
  • 【k8s】基础概念 + 工作原理

    工作原理:

    原理图

    工作原理描述:

    1>用户通过kubectl或者API server的REST API接口,提交需要运行的docker容器(创建pod请求);

    2>api server将创建pod的相关请求数据存储到etcd(存储中心)中;

    3>scheduler监听API server,查询还未分配的Node的Pod,然后根据调度策略为这些Pod分配节点;

    4>kube-let则负责在所在的Node节点上接收主节点发来的指令,管理Pod以及Pod中的容器,并定时向master主节点汇报节点资源的使用情况以及容器的情况;

    5>controller-manager 则通过api-service监控整个集群的状态,并确保集群处于预期的工作状态

    6>

    基础概念:

    将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。
    
    K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。
    
    一个K8S系统,通常称为一个K8S集群(Cluster)。
    
    
    
    这个集群主要包括两个部分:
    
        一个Master节点(主节点)
    
        一群Node节点(计算节点)
    
    
    Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。
    
    
    Master节点包括API Server、Scheduler、Controller manager、etcd。
    
    API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。
    
    Scheduler负责对集群内部的资源进行调度,相当于“调度室”。
    
    Controller manager负责管理控制器,相当于“大总管”。
    Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。
    
    Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。
    除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。
    
    
    Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。
    
    Kube-proxy,主要负责为Pod对象提供代理。
    
    Fluentd,主要负责日志收集、存储与查询。
    1.ETCD[主节点安装]
    etcd服务是数据中心。用于持久化存储信息。要求高可用和数据一致性。即多部署几个master节点
    存储哪些信息:k8s有本身的节点信息、组件信息、运行的pod、service都需要做持久化
    
    2.kube-api-server[主节点安装]
    api-server提供集群管理的API接口,包括认证授权、数据校验、集群状态变更、其他模块之间的数据交互和通信
    其他模块,都是通过api-server查询操作数据,也就是说只有api-server才能直接操作etcd
    
    
    3.controllerManager[主节点安装]
    controllerManager是kubernetes的大脑,它通过api-service监控整个集群的状态,并确保集群处于预期的工作状态
    组成:controller-manager是由 kube-controller-manager 和 cloud-controller-manager组成
          kube-controller-manager是由 一系列控制器组成,Replication Controller控制副本、Node Controller节点控制、Deployment Controller管理deployment等等
          cloud-controller-manager是在k8s启用Cloud provider的时候,需要用来配合云服务提供商的控制
    
    
    4.Scheduler[主节点安装]
    kube-scheduler负责实现调度策略,分配调度Pod到集群内的节点上,它监听api-server,查询还未分配的Node的Pod,然后根据调度策略为这些Pod分配节点
    
    
    5.Calico[所有节点安装]
    Calico实现了CNI接口,是kubernetes网络方案的一种选择。
    Calico在每一个计算节点利用Linux Kernel实现了一个高效的vRouter来负责数据转发,
    而每个vRouter通过BGP协议负责把自己上运行的workload的路由信息像整个Calico网络内传播——小规模部署可以直接互联,大规模下可通过指定的BGP route reflector来完成。 这样保证最终所有的workload之间的数据流量都是通过IP路由的方式完成互联的。
    
    5.flannel[所有节点安装]
    kubernetes网络方案的另一种选择
    
    6.kube-ctl[任意节点安装]
    kubectl是Kubernetes的命令行工具,是Kubernetes用户和管理员必备的管理工具。
    kubectl提供了大量的子命令,方便管理Kubernetes集群中的各种功能。
    
    
    7.kube-let[工作节点安装]
    kube-let就是会在每个工作节点上都运行一个kubelet服务进程,默认监听10250端口。
    kube-let负责接收并执行master发来的指令,管理Pod以及Pod中的容器。
    每个kubelet进程会在API Server上注册节点自身信息,定期向master节点汇报节点的资源使用情况,并通过cAdvisor监控节点和容器的资源。
    
    
    8.kube-proxy[工作节点安装][对外]
    kube-proxy保证集群内的服务,可以被集群外访问到。
    每台工作节点上都应该运行一个kube-proxy服务,它监听API server中service和endpoint的变化情况,并通过iptables等来为服务配置负载均衡,是让我们的服务在集群外可以被访问到的重要方式。
    
    
    9.kube-dns[独立服务][对内]
    kube-dns保证集群内的服务,可以被集群内的pod互相访问到。
    kube-dns为Kubernetes集群提供命名服务,主要用来解析集群服务名和Pod的hostname。目的是让pod可以通过名字访问到集群内服务。它通过添加A记录的方式实现名字和service的解析。普通的service会解析到service-ip。headless service会解析到pod列表。

  • 相关阅读:
    南阳理工ACM(题目56)
    南阳理工ACM(题目56)
    南阳理工ACM(题目56)
    csuoj1009
    素数槽csuoj
    简单动态规划问题分析
    sort函数使用的基本知识
    2014年7月19日——比赛题取石头问题1
    CODEVS——T 1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛
    洛谷—— P1640 [SCOI2010]连续攻击游戏
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/10640879.html
Copyright © 2011-2022 走看看