Kubernetes核心原理和搭建

1. 引言在过去 , 我们在进行程序部署的时候 , 是直接将环境和程序统一配置部署到主机上 , 但是这样做容易造成程序与程序之间的混淆 , 所以为了处理这种问题 , 我们可以搭建一台不可变的虚拟机镜像 , 将环境和程序配置部署到虚拟机镜像中 , 但是虚拟机镜像部署存在体量过于庞大并且不可移动的问题 , 所以容器技术应运而生 , 容器技术是基于操作系统级别的虚拟化技术 , 各个容器与宿主机是隔离的 , 各个容器之间也是是隔离的 , 它比虚拟机镜像更容易搭建 , 并且可以很方便在不同的主机上移动 。 但是随着分布式、集群等技术在实际应用中越来越多 , 在实际的生产环境中 , 我们可能会涉及到多个容器 , 而这些容器可能会跨越多个服务器主机进行部署 , 所以一个基于容器技术的分布式架构解决方案应用而生 , 它就是Kubernetes 。
2. Kubernetes的概念Kubernetes(k8s)是一个基于容器技术的的分布式架构解决方案 , 是Google开源的容器集群管理系统 , Google内部称为Borg,主要用于自动部署、扩展和管理容器化的应用程序 , 是以Docer为基础的分布式系统架构 。Kubernetes可以对分布式系统进行完美的支撑 , 它具备完善的集群控制能力 , 内建有智能的负载均衡器 , 拥有强大的故障发现和自我修复能力 。 同时还针对开发、部署测试、运维监控等提供了完善的管理工具 。
Kubernetes的核心思想是:一切以服务为中心 , 根据这一核心思想 , Kubernetes可以让在其上构建的系统独立运行在物理机、虚拟机群或者云上 , 所以 , Service(服务)是Kubernetes进行分布式集群构建的核心 , 必须拥有如下关键特征:

  • 拥有一个唯一指定的名称 。
  • 拥有一个虚拟IP和端口 。
  • 能够提供某种远程服务能力 。
  • 可以被映射到提供这种远程服务能力的一组容器应用上 。
3. Kubernetes的术语3.1 MasterKubernetes的集群控制节点 , 负责整个集群的管理和控制 , 拥有一个etcd服务 , 用来保存所有资源对象的数据 , 我们执行的所有控制命令会发给他 , 他负责具体的执行过程 , Master节点通常会独占一个服务器 , 在其上会运行以上一组关键的进程:
  • Kubernetes API Server:提供Http Rest接口的关键服务进程 , 是Kubernetes中增、删、改、查等操作的唯一入口 , 是集群控制的入口进程 。
  • Kubernetes Controller Manager:Kubernetes中所有资源对象的自动化控制中心 。
  • Kubernetes Scheduler:负责资源调度的进程 。
3.2 NodeKubernetes集群中的其他机器被称为Node节点 , Node节点可以是一台物理主机 , 也可以是一台虚拟机 , 每个Node节点会被Master节点分配一些负载 , 所以Node节点是Kubernetes集群中工作负载节点 , 当某个Node节点宕机时 , 工作负载会被Master自动转移到其他节点 。 Node节点之上会运行一组关键进程:
  • kubelet:负责Pod对应容器的创建 , 启动、停止等任务 。
  • kube-proxy:实现Kubernetes Service通讯与负载均衡机制的重要组件 。
  • Docker Engine:Docker引擎 , 负责容器的创建和管理
3.3 PodPod是Kurbernetes进行创建、调度和管理的最小单位 , Pod运行在Node节点之上 , 其中包含多个业务容器 , 这些业务容器之间共享网络命名空间、Ip地址、端口 , 可以通过localhost进行通讯 。 Pod有两种类型:普通Pod和静态Pod 。
3.4 Replication ControllerKurbernetes用来管理和保证集群中拥有的Pod 。
4. Kubernetes的架构Kubernetes的一切都是基于分布式的 , 下面这张图就是Kubernetes的架构图
Kubernetes核心原理和搭建文章插图
通过这张架构图我们发现Kurbernetes主要由以下几个核心组件组成:
  • Etcd:保存整个集群的状态 。
  • API Server:提供认证、授权、访问控制、API注册和发现等机制 , 是资源操作的唯一入口 。
  • Kurbernetes Controller:负责维护集群的状态 。
  • Scheduler:负责资源的调度 。
  • kubelet:负责维护容器的生命周期 , 同时管理Volume和网络 。
  • Container:负责镜像管理以及Pod和容器的真正运行 。
  • kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡 。
5. Kubernetes的搭建5.1 准备工作因为Kubernetes的一切都是基于分布式的 , 那么 , 要想搭建Kubernetes就需要准备多台服务器主机 , 因为条件有限 , 这里我采用搭建多台虚拟机系统的方式进行 , 所以需要将虚拟机和镜像系统准备好 。