kubernetes简介

Kubernetes简介

应用部署演变

传统方式部署

早期互联网时代部署应用直接部署在服务器上

  • 优点:部署简单,直接部署即可无第三方技术
  • 缺点:所有应用都部署在同一服务器上应用解藕度低,同时容易产生资源竞争

虚拟化部署

在物理机器上开辟新的虚拟机,在新虚拟机上安装操作系统在部署应用

  • 优点:每个程序运行在自己的虚拟机里降低程序的耦合度,同时每个虚拟机含有自己的运行资源,不会产生资源竞争
  • 缺点:在物理机器上开辟虚拟机浪费物理机资源,同时由于应用部署在虚拟机里造成启动速度较慢

容器部署

将应用部署在容器之中,容器共享物理操作系统,用来对外提供服务

  • 优点:
    • 每个容器在操作系统层面进行隔离耦合度低
    • 容器之间可以包含自己独立的运行资源
    • 容器可以打包跨平台运行
    • 容器部署方便,一次打包使用,多个平台终身运行
  • 缺点:
    • 容器单个部署方便,但是部署集群对外提供服务困难
    • 容器很难做到横向扩展

fangshi

容器编排

容器化部署方式给带来很多的便利,但是也会出现一些问题,比如说:

  • 一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器
  • 当并发访问量变大的时候,怎么样做到横向扩展容器数量

这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排的软件:

  • Swarm:Docker自己的容器编排工具
  • Mesos:Apache的一个资源统一管控的工具,需要和Marathon结合使用
  • Kubernetes:Google开源的的容器编排工具

Kubernetes简介

kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:某个容器出现故障,在一秒内开辟新的容器进行替换
  • 弹性伸缩:可以根据需要自动对所需容器的数量进行调整
  • 服务发现:服务可以自动查找自己所需要的依赖服务
  • 负载均衡:如果一个服务启动多个容器可以自动在多个容器进行负载均衡
  • 版本回退:如果新发布的版本有问题可以自动切换原始版本
  • 存储编排:可以根据容器自身的需求自动创建存储卷

zj

Kubernetes组件

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

master

Kubernetes集群的控制节点,主要对集群进行管理控制

  • APIServer:资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
  • Scheduler:负责对集群进行资源管理调度,按照预定的算法策略将 container 节点分配到相对应的 pod 节点上
  • ControllerManager:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
  • Etcd:负责存储集群中各种资源信息

node

Kubernetes工作节点负责数据转发为容器提供运行环境

  • kubelet:负责维护容器的生命周期,通过控制 docker 来对容器进行创建,删除等
  • kube-proxy:负责集群内部对外提供服务以及负载均衡等
  • docker:负责对内部容器进行操作

图解

image-20210925214821144

案例讲解

下面以运行 MySQL 服务进行讲解各个组件之间的调用关系

  1. 当我们启动 kubernetes 之后, masternode 节点信息都会存储在 Etcd
  2. 上述 kubernets 通过 APIServer 接收管理员发布 MySQL 指令的消息
  3. APIServer 收到管理员发布的指令其会调度 Scheduler 组件来决定将 MySQL 服务安装到那个节点之上,
  4. Scheduler 组件会通过 Etcd 查询节点信息然后通过一定的算法确定将 MySQL 服务安装到具体节点,例如安装到 node1 并将节点信息告诉 APIServer
  5. APIServer 通知 Controller manager 节点 MySQL 服务安装到 node1 节点中
  6. kubelet 接收 Controller manager 发送安装 MySQL 指令之后通知 docker 创建 MySQL 服务
  7. docker 创建 MySQLpod 之后 MySQL 容器运行在该 pod
  8. MySQL 服务创建完毕,如果我们需要访问 MySQL 服务只需要通过 kuber-proxy 代理 MySQL 所在的 pod 即可访问成功

kubernetes概念

  • Master:集群控制节点,一个集群中至少含有一个master节点用来对node节点进行管理控制

  • node:工作节点,由master分配服务所处节点位置,由节点对容器分配运行资源

  • pod:kubernetes最小控制单元,node节点中的容器都是运行在pod之中,一个节点可以有一个或者多个容器

  • controller:用来对pod进行管理控制,例如对pod进行停止,启动,伸缩数量等

  • service:pod节点对外提供服务的统一入口,一个service可以为一类pod进行提供服务

  • label:可以用于对pod进行分类,同一类的pod拥有相同标签,只有与service绑定标签相同才可以被service进行对外提供服务

  • namespace:对pod进行环境隔离,处于同一名称空间的pod可以互相访问,不同名称空间的pod不可以访问

namespace

posted @ 2021-09-25 22:55  SR丶  阅读(179)  评论(0编辑  收藏  举报