K8s1️⃣概述

知识基础:Docker

1、应用部署方式

参考:Docker 介绍

应用程序的部署方式,主要经历 3 个时代:

  1. 传统

  2. 虚拟化

  3. 容器化

    image-20220606104758392

1.1、传统部署

将应用程序直接部署在物理机

  • 优点:简单,不需要其它技术的参与。
  • 缺点:无法合理分配资源,程序耦合度高。

1.2、虚拟化部署

在物理机上运行虚拟机(VM),每个虚拟机都是独立的一个操作系统

  • 优点:使应用程序在不同 VM 之间彼此隔离,提供一定程度的安全性。
  • 缺点:增加了操作系统,浪费了部分资源。

1.3、容器化部署

在虚拟机中运行容器,将应用程序部署在容器

(类似 VM,但容器可共享操作系统

  • 优点
    • 每个容器拥有独立的文件系统、CPU、内存、进程空间等。
    • 容器封装了应用程序及其所需函数库、依赖、配置等资源。
    • 容器化的应用程序(镜像)可迁移到任何 Linux 操作系统上运行。
  • 思考容器编排问题
    • 若某个容器故障,如何让另一个容器立刻启动去替补。
    • 若并发访问量变大,如何实现横向扩展容器数量。
  • 常见容器编排软件
    • Swarm:Docker 自带的容器编排工具。
    • Mesos:Apache 的资源统一管控的工具,需与 Marathon 结合使用。
    • Kubernetes:Google 开源的容器编排引擎。
    • OpenShift、Rancher:基于 K8s 的再封装。

2、kubernetes

K8s 中文文档

Hint:kubernetes 名称源于希腊语,意为 “舵手” 或 “飞行员”。

image-20220606113609441

2.1、简介

kubernetes,简称 K8s

Google 于 2014 年发布的一个容器编排引擎。

  • 特点:开源,基于容器技术,可移植、可扩展等。
  • 作用:实现资源管理的自动化。
  • 本质一组服务器集群。集群的每个节点上运行着 K8s 所管理的容器化应用。

常用功能

  • 服务发现:K8s 根据 DNS 名称或 IP 地址来暴露容器,通过自动发现的形式找到依赖的服务。
  • 负载均衡:若一个服务部署了多个容器实例,K8s 可自动实现请求的负载均衡。
  • 弹性伸缩:根据流量,自动调整集群中正在运行的容器数量。
  • 自动部署和回滚
    • 使用 K8s 描述已部署容器的所需状态,可将容器更改为期望的状态。
    • 若发现新发布的程序版本有问题,可进行回滚。
  • 自我修复:K8s 能自动杀死不响应的容器,能迅速修复崩溃的容器(重启、替换)。
  • 资源分配
    • 自动完成装箱计算:K8s 允许指定每个容器所需 CPU 和 RAM(内存),以做出更好的决策来分配资源。
    • 存储编排:根据容器自身需求,自动创建存储卷。

2.2、常见术语

含义 说明
Master & Node 控制节点和工作节点 稍后 2.3 详解
Pod K8s 创建和管理的,可部署的最小计算单元 容器运行在 Pod 中,一个 Pod 中包含一组容器(1 个或多个)
Service 集群的核心 提供远程服务能力,作为 Pod 对外服务的的统一入口
Controller 控制器 负责管理 Pod 的状态(如启停、伸缩等)
Label 标签 K=V 键值对,用于对 Pod 进行分类
NameSpace 命名空间 用于隔离 Pod 的运行环境

2.3、核心组件(❗)

一个 K8s 集群由一组节点构成,

每个节点上运行着 K8s 所管理的容器化应用

  • 节点分类:两类节点由不同的组件构成,稍后详解。

    • Master:集群控制节点,也称控制平面(Control Plane)。
    • Node:工作负载节点。
  • 每个集群至少有 1 个 Master 节点、1 个 Node 节点。

    image-20220606150712380

2.2.1、Master (Control Plane)

集群的控制平面

负责全局决策,如资源调度。

说明 负责工作
etcd 键值数据库 存储集群中所有资源对象的信息(如节点)
API server 控制平面的前端 接收用户请求,提供认证、授权、API 注册和发现等机制
Scheduler 调度者 监视新建的、未指定运行节点(node)的 Pod,为其选择合适的运行节点
Controller manager 控制器管理器 运行控制器进程
(Controller 负责维护集群状态,如故障检测、程序部署安排、自动扩展、滚动更新等)
Cloud Controller Manager 云控制器管理器 (可选)嵌入特定云的控制逻辑,仅于特定的云平台

2.2.2、Node

集群的数据平面

负责维护运行中的 Pod,并提供运行环境

说明 负责工作
kubelet 集群中每个节点的代理 管理由 K8s 创建的容器,确保容器运行在 Pod 中且状态健康
kube-proxy 集群中每个节点的网络代理 维护节点的网络规则,允许外界访问 Pod
Container Runtime 容器运行时 即运行容器的软件,如 Docker

2.2.3、Addons

插件

常用的插件:

  • DNS
  • 仪表盘Dashboard 可视化用户界面。
  • 容器资源监控
  • 集群层面日志
  • ...

case:部署 Nginx

示例:在 K8s 中部署 Nginx 服务,以此说明 K8s 各组件调用关系。

  • 假设 K8s 集群中有 1 个 Master,2 个 Node。
  • 当 K8s 环境启动,所有 Master 和 Node 节点的信息都会存储到 etcd 数据库中。
  • 服务关系:K8s 通过 Pod 控制器管理 Pod,Pod 中运行容器,容器中部署微服务应用。

流程说明

  1. 用户向 K8s 集群发起一个 Nginx 服务安装请求,master 节点的 API Server 组件接收请求。

  2. API Server 调用 Scheduler 组件,目的是选取合适的 Node(运行节点)

  3. Scheduler

    1. etcd 中读取所有 Node 节点的信息。
    2. 基于特定算法选择合适的 Node,将结果返回给 API Server
  4. API Server 调用 Controller manager 组件,目的是部署 Nginx 服务。

  5. Controller manager 调度 Node 节点

  6. kubelet 组件接收调度指令,控制 Container Runtime

    1. 创建一个 Pod。

    2. 在 Pod 中创建并运行一个 Nginx 容器。

      image-20220606175937168

以上是 Niginx 容器的部署流程。

若要访问集群中的 Nginx 服务,需通过 kube-proxy 来产生访问 Pod 的网络代理。

posted @ 2022-06-06 18:12  Jaywee  阅读(206)  评论(0编辑  收藏  举报

👇