K8S基础

一、K8S是什么?

1.1 概述

K8S全名Kubernetes。因k与s之间有8个字符,故缩写为K8S。

K8S是一个可自动实施 Linux 容器管理的可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

二、为什么需要K8S?

要了解这个问题,需要回顾一下应用程序的部署方式。

2.1 传统部署

传统部署直接在物理服务器上运行应用程序。存在缺陷:

  • 无法为服务器中的应用程序定义资源边界,导致资源分配出现问题(一个程序占用大部分资源,其它程序性能下降)。
  • 若将应用程序运行在不同物理服务器上,一方面导致资源浪费,另一方面提高成本。

2.2 虚拟化部署

虚拟化技术允许我们在单个的物理服务器上运行多个虚拟机(VM),应用程序在VM之间完全隔离。

每个VM是一个完整的计算机,在虚拟化硬件上运行包括自己的操作系统在内的所有组件。VM共享主机硬件资源。

但因为VM需要运行硬件虚拟副本和完整的操作系统副本,会占用大量的系统资源。

2.3 容器部署

容器将应用程序软件代码和所需的所有组件打包在一起,使得容器内的用意可以在任何基础架构上一致的运行。

  • 隔离性:容器同样可以虚拟化基础计算机,应用程序可在不同容器间实现进程级隔离。

  • 轻量性:每个容器共享物理服务器的OS内核,二进制文件和库,但具有自己的文件系统、CPU、内存、进程空间等。这样的共享可以大大减少重现操作系统代码的需求。因此容器非常轻量,容量小且启动快。

  • 可移植:容器与基础架构分离,可以实现跨云和OS发行版本进行移植。

K8S即是在大规模服务器环境中,负责部署和管理容器组,用于解决容器的复制,扩展,健康,启动,负载均衡等问题。只需告诉 Kubernetes 您希望在哪里运行软件,该平台就会负责执行部署和管理容器所需的几乎一切工作。

三、K8S有哪些组件?

我们会在一组用于运行容器化应用的节点计算机(Node)的上部署K8S,这一组节点计算机即称为K8S集群。正常运行的K8S集群包含以下组件。

3.1 集群相关术语

  • 控制平面(Control Plane):控制 Kubernetes 节点的进程的集合。所有任务分配都来自于此。

  • 节点(Node):这些机器负责执行由控制平面分配的请求任务。

  • 容器集(Pod):部署到单个节点上且包含一个或多个容器的容器组。容器集是最小、最简单的 Kubernetes 对象。

  • 服务(Service):一种将运行于一组容器集上的应用开放为网络服务的方法。它将工作定义与容器集分离。

  • 卷(Volume):一个包含数据的目录,可供容器集内的容器访问。Kubernetes 卷与所在的容器集具有相同的生命周期。卷的生命周期要长于容器集内运行的所有容器的生命周期,并且在容器重新启动时会保留相应的数据。

  • 命名空间(Namespace):一个虚拟集群。命名空间允许 Kubernetes 管理同一物理集群中的多个集群(针对多个团队或项目)。

3.2 控制平面组件

控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件。控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器

  • kube-apiserver:该组件开放 Kubernetes API。API服务器是K8S控制平面的前端。
  • etcd:etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库
  • kube-scheduler:该组件负责监视新创建的、为指定运行节点(node)的Pods,并选择节点让Pod在上面运行。
  • kube-controller-manager:运行控制器进程的控制平面组件。多中控制器被编译到一个可执行文件,并在一个进程中进行运行。
  • cloud-controller-manager:云控制器管理器是指嵌入特定云的控制逻辑的 控制平面组件。 云控制器管理器使得你可以将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。

3.3 Node组件

节点组件在每个节点上运行,维护运行的Pod并提供Kubernetes 运行环境。

  • Kubelet:每个节点上运行的代理。它保证容器都运行在Pod中。
  • kube-proxy:kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。它维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

3.4 容器运行时

容器运行环境是负责运行容器的软件。支持包括像Docker,iSula以及任何实现k8s CRI的容器运行环境。

3.5 其它可用插件

插件并非严格意义上的必须组件。仅列举以下常用的两种。

  • DNS:几乎所有 Kubernetes 集群都应该有集群DNS。
  • Web界面:Dashboard 是 Kubernetes 集群的通用的、基于 Web 的用户界面。
posted on 2021-11-13 22:02  一只特立独行的羊  阅读(111)  评论(0)    收藏  举报