美文网首页
Kubernetes简单认识

Kubernetes简单认识

作者: 轻轻敲醒沉睡的心灵 | 来源:发表于2024-08-01 11:02 被阅读0次

1. 应用部署方式演变

此部分内容来源:K8S使用教程(详细)

在部署应用程序的方式上,主要经历了三个时代:

  • 传统部署:互联网早期,会直接将应用程序部署在物理机上
    优点:简单,不需要其它技术的参与
    缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响
    
  • 虚拟化部署:可以在一台物理机上运行多个虚拟机,每个虚拟机都是独立的一个环境
    优点:程序环境不会相互产生影响,提供了一定程度的安全性
    缺点:增加了操作系统,浪费了部分资源
    
  • 容器化部署:与虚拟化类似,但是共享了操作系统
    优点:可以保证每个容器拥有自己的文件系统、CPU、内存、进程空间等
    运行应用程序所需要的资源都被容器包装,并和底层基础架构解耦
    容器化的应用程序可以跨云服务商、跨Linux操作系统发行版进行部署
    问题:一个容器故障停机了,怎么样让另外一个容器立刻启动去替补停机的容器?
    当并发访问量变大的时候,怎么样做到横向扩展容器数量?
    

现在流行容器化部署,都在用微服务和容器,当服务多了的时候,容器必然大量存在。这些容器管理的问题统称为容器编排问题,为了解决这些容器编排问题,就产生了一些容器编排的软件:

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

这里我们说的是谷歌出品。

2. kubernetes

Kubernetes主页
kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本。
kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化,主要提供了如下的主要功能:

  • 自我修复:一旦某一个容器崩溃,能够在1秒中左右迅速启动新的容器
  • 弹性伸缩:可以根据需要,自动对集群中正在运行的容器数量进行调整
  • 服务发现:服务可以通过自动发现的形式找到它所依赖的服务
  • 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡
  • 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本
  • 存储编排:可以根据容器自身的需求自动创建存储卷

3. kubernetes组件

所有内容,还是建议去看官方文档,有中文的,很全,但是比较乱,自己看官方文档慢慢研究比较好。
Kubernetes 组件-官方介绍
一个kubernetes集群主要是由控制节点(master)工作节点(node)构成,每个节点上都会安装不同的组件。

Kubernetes 集群组件

3.1 master -- 控制平面组件(Control Plane Components)

控制平面组件会为集群做出全局决策( 管理 ),比如资源的调度。 以及检测和响应集群事件,例如当不满足部署的 replicas字段时,要启动新的 Pod)。
控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器。
主要包含以下几个组件:

  • ApiServer:资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制。 kube-apiserver设计上考虑了水平扩缩,也就是说,它可通过部署多个实例来进行扩缩。
  • Scheduler: 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
  • ControllerManager: 负责运行控制器进程,维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
  • Etcd:一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。负责存储集群中各种资源对象的信息

3.2 node

集群的数据平面,负责维护运行的 Pod 并提供 Kubernetes 运行环境,主要包含以下几个组件:

  • Kubelet: 会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。
    kubelet 接收一组通过各类机制提供给它的 PodSpec,确保这些 PodSpec 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。即负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器
  • KubeProxy: 是集群中每个节点上所运行的网络代理, 实现 Kubernetes 服务概念的一部分。
  • 容器运行时(Container Runtime): 这个基础组件使 Kubernetes 能够有效运行容器。 它负责管理 Kubernetes 环境中容器的执行和生命周期。
    Kubernetes 支持许多容器运行环境,例如 containerdCRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。
    特别说明:v1.24 之前的 Kubernetes 版本直接集成了 Docker Engine 的一个组件,名为 dockershim。 这种特殊的直接整合不再是 Kubernetes 的一部分
    容器运行时替换

3.3 插件(Addons)

插件使用 Kubernetes 资源(DaemonSetDeployment 等)实现集群功能。 因为这些插件提供集群级别的功能,插件中命名空间域的资源属于 kube-system 命名空间。下面描述众多插件中的几种:

  • DNS
    尽管其他插件都并非严格意义上的必需组件,但几乎所有 Kubernetes 集群都应该有集群 DNS, 因为很多示例都需要 DNS 服务。
    集群 DNS 是一个 DNS 服务器,和环境中的其他 DNS 服务器一起工作,它为 Kubernetes 服务提供 DNS 记录。
    Kubernetes 启动的容器自动将此 DNS 服务器包含在其 DNS 搜索列表中。
  • Web 界面(仪表盘)
    Dashboard 是 Kubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身, 并进行故障排除。
  • 网络插件
    网络插件 是实现容器网络接口(CNI)规范的软件组件。它们负责为 Pod 分配 IP 地址,并使这些 Pod 能在集群内部相互通信。

4. 服务部署简单调用流程

以nginx容器部署为例:

  • 1.首先要明确,一旦kubernetes环境启动之后,master和node都会将自身的信息存储到etcd数据库中
    1. 一个nginx服务的安装请求会首先被发送到master节点的apiServer组件
    1. apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上
    1. 在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法进行选择,并将结果告知apiServer
    1. apiServer调用controller-manager去调度Node节点安装nginx服务
    1. kubelet接收到指令后,会通知Containerd ,然后由Containerd 来启动一个nginx的pod
    1. pod是kubernetes的最小操作单元,容器必须跑在pod中至此一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理


      简易流程图

相关文章

  • Kubernetes v1.15.0 搭建 Web UI (Da

    Kubernetes-Dashboard 简单介绍 Kubernetes-Dashboard 简单来说,就是一个 ...

  • Kubernetes探索学习系列005----Kubernete

    1.Kubernetes的controller pattern 需要认识到Kubernetes操作Pod的逻辑,都...

  • 容器技术swarm和kubernets

    功能性( Kubernetes)VS. 简易性(Swarm) Kubernetes配置复杂,Swarm配置简单; ...

  • 简介

    Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署...

  • kubernetes资源对象之pod

    Pod 是Kubernetes 集群中的基本单元,是最小并且最简单的 Kubernetes 对象,是 Kubern...

  • 2018-11-20

    使用Kubernetes和Docker进行简单的leader选举 Kubernetes简化了运行在集群中的服务部署...

  • 云原生

    1.你认识kubernetes 吗? 快速了解 Kubernetes 的架构及特性 2.为什么用etcd而不用Zo...

  • Kubernetes简单说

    简单说说k8s架构便于理解和记忆: 1. Kubernetes master(图中)负责管理子节点 API:...

  • 通过Docker部署Kubernetes集群

    Kubernetes 搭建有四种方式,简单评价一下: 1.基于Docker 本地运行Kubernetes 先决条件...

  • 5.0.1 Pod

    Pod 是Kubernetes项目中的原子调度单位简单类比,容器的本质是进程,Kubernetes就像是管理进程的...

网友评论

      本文标题:Kubernetes简单认识

      本文链接:https://www.haomeiwen.com/subject/kohohjtx.html