当前位置:   article > 正文

Kubernetes学习(一)-K8S基本概念_中间件 k8s

中间件 k8s

一、K8S基础知识

1.1 Kubernetes基本概念

 Kubernetes(K8s)是Geogle团队发起并维护的开源容器集群管理系统,底层基于Docker、RKT 等容器技术,提供强大的应用管理和资源调度能力。

Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署、规划、更新、维护的一种机制。它的主要作用是对Docker容器做编排工作,当然,Docker只是容器工具的一种引擎,K8s可支持多种容器引擎。

Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着。

(1)使用Kubernetes特点:

  • 弹性伸缩,随时扩展或收缩容器规模;
  • 很容易地升级应用程序容器的新版本;
  • 开源,轻量级消耗资源小;
  • 负载均衡,IPVS,将容器组织成组,并且提供容器间的负载均衡;

1.2 集群

集群是一组节点,这些节点可以是物理服务器或者虚拟机,之上安装了Kubernetes平台。。

1.3 K8S 的核心概念

  • Cluster: 是计算、存储和网络资源的集合,K8S 利用这些资源运行各种容器的应用。
  • Master: 是Cluster 的大脑,主要职责是调度,即决定将应用放在哪里运行。基本上K8S 所有的控制命令都将发给Master,由 Master 负责具体的执行过程。

Master 组件运行的节点一般称为Master 节点,在Master 节点上运行着以下关键进程 Kube-apiserver 、Etcd、Kube-sheduler、Kube-controller-manager。

  • Node: 负责运行容器应用。Node由Master 管理,Node 负责监控并汇报容器的状态,同时根据Master 的要求管理容器的生命周期。Node 节点是K8s 集群中的工作负载节点,每个Node 节点都会被Master节点分配一些工作负载。当某个Node 节点宕机时,其上的工作负载会被Master 节点自动转移到其他节点上去。

每个Node 节点上都运行着以下关键进程,Kubelet、Kube-proxy、Docker Engine(docker)

(1)Pod:是若干相关容器的组合,Pod包含的容器运行在同一台宿主机上,这些容器使用相同的网络命令空间,IP地址和端口,相互之间通过localhost 来发现和通信。Pod 是k8s 创建、调度和管理的最小单位

k8s 运行容器(Pod)与访问容器(Pod) ,这两项任务分别由 Controller 和 Service 执行。

(2)Replication Controller: 用来管理Pob 副本(或称为实例),Replication Controller 确保任何时候 k8s 集群中有指定数量的Pob 副本在运行。

(3)Service :是真实应用服务的抽象,定义了Pod 的逻辑集合和访问这个Pob集合的策略。

Service是定义一系列Pod以及访问这些Pod的策略的一层抽象。Service通过Label找到Pod组。因为Service是抽象的,所以在图表里通常看不到它们的存在。

Service 定义了外加访问一组特定 Pod 的方式,Service 有自己的IP 和端口, Service 为Pod 提供了负载均衡。

(4)Lable: 是用来区分 Pod、Service、Replication Controller 的Key/Value 对,k8s包含多种类型的资源对象,所有的资源对象都可以通过k8s提供的工具进行增删查改。一个Lable 是一个key-value 形式的键值对,其中key与value 由用户自己指定。给某个资源定义一个Label 相当于给它们打了一个标签,随后可以通过标签选择器查询和筛选拥有某些Label 的资源对象。

(5)Node:  Node 可以认为是Pod 的宿主机。可以是物理或虚拟机。

Node 节点可以在运行期间动态增加到K8S 集群中,前提是这个节点上已经正确安装、配置和启动了上述关键进程。

1.4 K8s 架构和组件

K8s 属于主从分布式架构,节点在角色上分为 Master 和 Node。K8s 使用Etcd 作为存储中间件,它是一种高可用的键值存储系统。

etcd 是一个分布式的、可靠的 key-value 存储系统,它用于存储分布式系统中的关键数据。Kubernetes 将自身所用的状态存储在 etcd 中,在k8s 集群中,etcd 主要用于配置共享和服务发现。

1.4.1 Etcd——高可用的键值数据库

Etcd主要解决的是分布式系统中数据一致性的问题,而分布式系统中的数据分为控制数据和应用数据,etcd处理的数据类型为控制数据,对于很少量的应用数据也可以进行处理。

Etcd 是CoreOS 团队发起的开源项目,基于Go语言实现。Etcd 的优点:

  • 简单: 支持RESTful API 和 gRPC API ;
  • 安全: 基于TLS 方式实现安全连接访问;
  • 快速: 支持每秒一万次的并发写操作,超时控制在毫秒量级;
  • 可靠: 支持分布式结构,基于Raft 算法实现一致性。

如: 在k8s 集群中etcd 是用来存放数据并通知变动的,k8s 中没有用到数据库,数据存放到etcd中,在k8s 中,数据是随时变化的,k8s 每个组件通过监听etcd 中的数据,知道任务的变化。

Etcd 的集群也采用典型的“主-从” 模型,通 Raft 协议保证一段时间内有一个节点为主节点,其他节点为从节点。一旦主节点发生故障,其他节点可以自动再重新选举出新的主节点。集群中节点个数推荐为奇数个,最少为3个。

集群参数配置:

  • 时钟同步: Etcd 集群各个节点时钟差异不超过1s,否则会导致 Raft 协议异常。
  • 心跳消息时间间隔和选举时间间隔:(1)心跳消息:主节点每隔多久通过心跳消息来通知从节点自身的存活状态;(2)选举时间:从节点多久没收到心跳通知后可以尝试发起选举自身为主节点。

1.4.2 K8s Master

Master 作为控制节点,调度管理整个系统。可以包含以下组件:

  • API Server: 作为K8s 系统的入口(所有服务的统一入口,所有指令请求必须经过 API Server),其封装了核心对象的增删改查操作,以REST API 接口方式提供给外部客户和内部组件调用。它维护的REST 对象将持久化到Etcd 中。
  • Scheduler : 负责集群的资源调用,为新建的Pob 分配机器(选择合适的节点进行分配任务,,使用调用算法,把请求资源调度到某个Node 节点)。
  • Controller : 负责执行各种控制器。维持副本期望数目。
  • etcd: 存储资源对象。

 scheduler 将任务给 api server ,api server 将任务存入etcd。

1.4.3 K8s Node

K8s Node 是运行节点,用于运行管理业务的容器。

  • kubelet: 负责管控容器,Kubelet 会从 Kubernetes API Server 接收 Pob 的创建请求,启动和停止容器,监控容器运行状态,并汇报给 API Server。(直接跟容器引擎交互实现容器的生命周期管理)

kubelet 在每个Node节点都存在一份,在Node 节点上的资源操作指令由 Kubelet 来执行。

  • kube-proxy : 负责为Pod 创建代理服务,proxy 冲API Server 获取所有的service ,并根据Service 信息创建代理服务。(实现服务映射访问)
  • Docker :容器运行节点,目前也支持Rocker 。
  • Fluentd 日志收集服务。

1.5 Pod

(1)K8s 是用来管理容器,但是不直接操作容器,最小操作单元是 Pod (间接管理容器),一个Pod 代表集群上正在运行的一个进程,由一个或多个容器组成:

  • 一个 Master 有一群 Node 节点与之对应。
  • Master 节点不存储容器,只负责调度、网管、控制器、资源对象存储。
  • 容器的存储在 Node 节点,容器是存储在 Pod 内部的)。
  • Pod 内部可以有一个容器,或者多个容器。
  • Kubelet 负责本地 Pod 的维护。
  • Kube-proxy 负责负载均衡,在多个 Pod 之间来做负载均衡。

(2)Pob特点:

  • Pod 也是一个容器,这个容器中装的是 Docker 创建的容器,Pod 用来封装容器的一个容器,Pod 是一个虚拟化分组。
  • Pod 相当于独立主机,可以封装一个或者多个容器。
  • Pod 有自己的 IP 地址、主机名,相当于一台独立沙箱环境。

(3)K8S 引入Pod 的主要目的

  • 可管理性:有些容器需要紧密联系,一起工作。Pod提供了比容器更高层次的抽象,将它们封装到一个部署单元中。
  • 通信和资源共享:Pod 中所有的容器使用同一网络 namespace,即相同的 IP 地址和Port空间。它们可以使用localhost通信。

Pod中有两个容器:File Puller 定期从外部拉取文件,放在共享的Volume 中,Web Server 从volume 读取文件,响应Consumer 的请求。

1.6 Controller

   k8s 通常不会直接创建Pod,而是通过 Controller 来管理 Pod。Controller 中定义了 Pod 的部署特性,如几个副本,在什么样的 Node 上运行。为了满足不同的业务场景,k8s提供了多种 Controller 。

  •  节点控制器:负责在节点出现故障是发现和响应
  • 复制控制器:负责为系统中的每个复制控制器对象维护正确数量的Pod
  • 端点控制器:填充端点对象
  • 服务账户和令牌控制器:为新的命名空间创建默认账户和API 访问令牌。

1.7 Namespace  

Namespace 可以将一个物理的Cluster 逻辑上划分为多个虚拟Cluster ,每个 Cluster 就是一个 Namespace。 

不同Namespace 里资源是完全隔离的。

从底层实现技术看,Pod 内不同容器之间共享存储和一些namespace。

共享的资源:

  • PID 命令空间:Pod中不同应用程序可以看到其他应用程序的进出ID;
  • 网络命名空间:Pod中的多个容器能够访问同一个IP 和端口范围;
  • IPC 命令空间:
  • UTS 命名空间:Pod中多个容器共享一个主机名;
  • Volumes(共享存储卷):Pod 中各个容器可以访问在Pod中定义的数据卷。

参考文献:

【1】十分钟带来理解 Kubernetes 核心概念:http://www.dockone.io/article/932

【2】K8s中文文档:https://www.kubernetes.org.cn/k8s

【3】etcd : https://www.cnblogs.com/centos-python/articles/11044019.html

【4】尚硅谷K8S 教程: https://www.bilibili.com/video/BV1w4411y7Go

【5】k8s-基于阿里云服务器使用kubeadm搭建k8s集群: https://www.cnblogs.com/gcxblogs/p/13710023.html

【6】知乎-10分钟看懂 docker 与k8s:  https://zhuanlan.zhihu.com/p/53260098

【7】《每天5分钟玩转Kubernetes 》

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/128293
推荐阅读
  

闽ICP备14008679号