第 1 章 Kubernetes 介绍

应用部署方式的演变历史

传统部署方式

  1. 概念
    1. 直接将应用程序部署在物理机上
  2. 优点
    1. 简单,不需要其它技术的参与
  3. 缺点
    1. 不能为应用程序定义资源使用边界,很难合理地计算分配资源,程序之间容易产生影响

虚拟化部署方式

  1. 概念
    1. 在一台物理机上运行多个虚拟机,每个虚拟机都是独立的环境
  2. 优点
    1. 程序环境不会相互产生影响,提供了一定程度的安全性
  3. 缺点
    1. 增加了操作系统,浪费了部分资源

容器化部署方式

  1. 概念
    1. 与虚拟化类似,但是共享操作系统
  2. 优点
    1. 可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等
    2. 运行应用程序所需的资源都被容器包装,并和底层基础架构解耦
    3. 容器化的应用程序可以跨云服务商、跨 Linux 操作系统发行版进行部署

image-20200505183738289.png

Kubernetes 概述

背景

  1. 容器化部署方式导致了一系列容器编排问题的产生,例如:
    1. 一个容器故障停机了,怎样让另一个容器立刻启动去替补停机的容器
    2. 当并发访问量变大时,怎样进行横向扩充容器数量
    3. ...

  1. 为了解决容器编排问题,产生了一些容器编排软件:
    1. Swarm:Docker 自己的容器编排工具
    2. Mesos:Apache 的一个资源统一管控的工具,需要和 Marathon 结合使用
    3. Kubernetes:Google 开源的容器编排工具
    4. ...

定义

  1. Kubernetes 的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理

功能

Kubernetes 的目的是实现资源管理的自动化,主要提供如下功能:

  1. 自我修复
    1. 一旦某个容器崩溃,能够在 1s 中左右迅速启动新的容器

  1. 弹性伸缩
    1. 可以根据需要,自动对集群中正在运行的容器数量进行调整

  1. 服务发现
    1. 服务可以通过自动发现的形式找到它所依赖的服务

  1. 负载均衡
    1. 如果一个服务启动了多个容器,能够自动实现请求的负载均衡

  1. 版本回退
    1. 如果发现新发布的程序版本有问题,可以立即回退到原来的版本

  1. 存储编排
    1. 可以根据容器自身的需求自动创建存储卷

组件

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

控制节点

  1. 控制节点是集群的控制平面,负责集群的决策(管理)
  2. 控制节点的组件
    1. ApiServer
      1. 资源操作的唯一入口
        1. 接收用户输入的命令,提供认证、授权、Api 注册和发现等机制

  1. Scheduler
    1. 负责集群资源调度
      1. 按照预定的调度策略将 pod 调度到相应的 node 节点

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

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

工作节点

  1. 工作节点是集群的数据平面,负责为容器提供运行环境(干活)
  2. 工作节点的组件
    1. Kubelet
      1. 负责维护容器的声明周期
        1. 即通过控制 docker,来创建、更新、销毁容器

  1. KubeProxy
    1. 服务提供容器内部的服务发现和负载均衡

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

举例

Nginx 部署

  1. 一旦 kubernetes 环境启动之后,master 和 node 都会将自身的信息存储到 etcd 数据库中
  2. 服务的安装请求发送到 master 节点的 apiServer 组件
  3. apiServer 组件会调用 scheduler 组件决定将服务安装到哪个 node 节点上
  4. scheduler会从 etcd 中读取各个 node 节点的信息,按照一定的算法进行选择,并将结果告知 apiServer
  5. apiServer 调用 controllerManager 调用 Node 节点安装服务
  6. kubelet 接收到指令后,会通知 docker
  7. docker 启动一个 nginx 的 pod
  8. 如果需要访问 nginx,需要通过 kubeProxy 来对 pod 产生访问的代理

image-20200406184656917.png

概念

  1. Master
    1. 集群控制节点
      1. 每个集群需要至少一个 master 节点负责集群的管控

  1. Node
    1. 工作负载节点
      1. 由 master 分配容器到这些 node 工作节点上,然后 node 节点上的 docker 负责容器的运行

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

  1. Controller
    1. 控制器,通过它来实现对 pod 的管理
      1. 比如
        1. 启动 pod
        2. 停止 pod
        3. 伸缩 pod 的数量
        4. ...

  1. Service
    1. pod 对外服务的统一入口
      1. 下面可以维护同一类的多个 pod

  1. Label
    1. 标签,用于对 pod 进行分类
      1. 同一类 pod 会拥有相同的标签

  1. NameSpace
    1. 命名空间,用来隔离 pod 的运行环境

image-20200403224313355.png

posted @   Wndexx  阅读(5)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示