1. 基础概念介绍

Kubernetes(以下简称K8s)是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单高效,Kubernetes提供了应用部署、规划、更新、维护的一种机制。 在Kubenetes中,所有的容器均在Pod中运行,一个Pod可以承载一个或者多个相关的容器。同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源。一个Pod也可以包含0个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享。

1.1. K8s架构概览

在这里插入图片描述

Docker Engine由许多专用的工具协同工作,从而可以创建和运行容器,例如 API、执行驱动、运行时、shim 进程等。主要由两个核心组件构成:LXC 和 Docker daemon。Docker daemon 是单一的二进制文件,包含诸如 Docker 客户端、Docker API、容器运行时、镜像构建等。LXC 提供了对诸如命名空间(Namespace)和控制组(CGroup)等基础工具的操作能力,它们是基于 Linux 内核的容器虚拟化技术。 Linux Namespace是Linux内核用来隔离资源的方式。每个Namespace下的资源对于其他Namespace都是不透明,不可见的。 容器就是进程,容器是与系统其他部分隔离开的进程。这个时候我们再看上图就更容易理解,容器是跑在宿主机OS(虚机容器的宿主机OS就是Guest OS)上的进程,容器间以及容器和宿主机间存在隔离性。

1.2. 整体运行架构

在这里插入图片描述

1.2.1. K8s相关组件介绍

  • api service:所有服务访问统一入口。对外暴露K8S的api接口,是外界进行资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • crontroller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等,它们是处理集群中常规任务的后台线程。
  • scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;就是监视新创建的 Pod,如果没有分配节点,就选择一个节点供他们运行,这就是pod的调度。
  • etcd:一个可信赖的分布式键值存储服务,能够为整个分布式集群存储一些关键数据,协助分布式集群运转。储存K8S集群所有重要信息(持久化)。v2版本时基于内存的存储,v3开始才是序列化到介质。新版本K8S(v1.11以上)已经改用v3版本etcd。
  • kubelet:直接跟容器引擎交互实现容器的生命周期管理。
  • kube-proxy:负责写入规则至 IPTABLES、IPVS 实现服务映射访问的。
1.2.1.1. master:负责集群的管理和控制
  • etcd:保存了整个集群的状态;
  • ApiServer:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • ControllerManager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • Scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
1.2.1.2. node:计算节点,负责跑任务;只和APIServer通信
  • kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • kube-prox:y负责为Service提供cluster内部的服务发现和负载均衡;
  • DockerEngine:负责镜像管理以及Pod和容器的真正运行(CRI);
1.2.1.3. 存储
  • 元数据存储在基于Key-value结构的数据库中
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐