TODO

Kubernetes

Docker

2020-04-10 10:00:00 +0800

Kubernetes & Docker

https://kubernetes.io/

  • Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications;
  • kubernetes components architecture

  • 控制面

    • 控制平面,用来对整个集群作出决策,并监测和响应集群产生的事件;
    • 控制平面的组件可以运行再一台或者多台机器上,默认的部署脚本,提供所有控制平面的组件部署并运行在同一台机器上,并且不会将用户创建的容器或者pod服务创建在已经部署了控制组件的机器上;
  • 各个组件的简单介绍及功能

    • kube-apiserver

      • kube API服务器是整个控制平面前端,将kubernetes的API接口提供给外部进行访问;
      • 该服务提供横向的伸缩和扩容,通过在更多机器实例上部署kube-apiserver,来提供接口对外访问的负载均衡,当然这里的负载均衡需要其他组件参与,例如双结点的LVS+Nginx做负载均衡转发,并将外部访问的报文段转发到不同权重的API服务节点上;
    • etcd

      • etcd.io
      • 分布式且高可用的 key-value 存储系统,用来对分布式系统的关键及重要数据做持久化;
      • 在kubernetes架构中,用于对kubernetes产生的集群数据做持久化;
      • etcd提供高可用,kubernetes后端的集群数据的持久化存储对应生产环境来说,还需要更多的数据备份方式;
    • kube-scheduler

      • kubernetes管理的微服务的最小单位是一个Pod
      • 类似于Openstack的Nova的scheduler对新建虚拟机的调度,kube-scheduler对新创建的Pod进行调度,用来选择一个适合的节点来运行该Pod;
      • 这里的适合的节点取决于多个因素
        • 单一的组合的资源需求
        • 硬件/软件/策略的约束
        • 亲和力/反亲和力 的规格 ?
        • 数据的局部性
        • 内部任务之间的影响和干扰
        • 截止日期
    • Kube-controller-manager

      • 控制平面的控制器,单独的进程运行控制器/管理者

      • 该控制器进程的源程序中包含多个“功能独立”的控制器,kubernetes为了进一步简化复杂性,将这些功能独立的控制器编译到同一个可运行指令的二进制文件;

      • 该进程中包括的”功能独立“的控制器:

        • Node Controller:负责对节点的异常(节点服务崩溃)进行事件回调和响应;

        • Replication Controller:负载管理和维护Pod的个数,这些Pod用来承载系统中复制控制器的对象(也就是复制的服务)?;

        • Endpoint Controller:负责将Endpoint对象,加入到一个指定的服务或者Pod中;

        • Service Account & Token Controllers:管理和创建用于API访问的用户,和用户Token,这些Token用不同的命名空间进行区分;

          命名空间的概念,一个命名空间用来声明一个区域或者范围,该范围内包含该命名空间独一无二的身份验证或者程序变量、方法等;

    • cloud-controller-manager

      • 云控制器,用来和底层云环境进行交互;

      • 运行 cloud-provider-specific 控制器循环,在启动前,必须disable不适用的controller loops;

        –cloud-provider = external

        当前版本的kubernetes核心代码对”云服务提供商“的代码在功能上有所依赖;

        未来版本中,”云服务提供商“将自己管理云厂商的代码段,在运行kubernetes期间和 cloud-controller-manager 进行链接;

      • 对于云提供商的代码有所依赖的控制器包括:

        • Node Controller
          • 通过云供应商来检查已经停止的节点,是否在环境中已经被释放;
        • Route Controller
          • 为底层基础设施配置路由
        • Service Controller
          • 用来创建、更新、删除、云供应商提供的负载均衡产品
        • Volume Controller
          • 用来创建、附加、挂在”卷“,和云提供商交互进行”卷“的编排;
  • Node Components

    • 节点组件,运行在kubernetes集群的每一个节点上,用来维护运行的Pods并为Kubernetes提供运行时环境
    • Kubelet
      • 运行在集群中的每个节点上的agent,用于确保容器运行在Pod中;

Back to top

Engineering & Philosophy & Life Experience - A Motorcycle rider and loving husband.