一、Kubernetes 的特性/功能
自动装箱
:基于容器对应用运行环境的资源配置,要求自动部署应用容器,无需太多人工干预。
自我修复
:也就是自愈能力,容器启动失败时自动重启容器;当部署的 Node 节点出现问题时,会对容器进行重新部署和调度;当容器未通过监控检查时,会关闭此容器,直到容器正常运行才会对外提供服务。
水平拓展
:伸缩性强,通过简单的命令、用户 UI 界面或 CPU 等资源使用情况,对应用容器进行规模扩大或缩减。
服务发现
:也就是负载均衡,用户无需使用额外的服务发现机制,就可以基于 k8s 自身能力实现服务发现和负载均衡。
滚动更新
:可以通过应用的变化,对容器中运行的应用进行一次性或批量更新。
版本回退
:可根据应用部署情况,对容器中运行的应用进行历史版本即时回退。
密钥和配置管理
:在无需重新构建镜像的情况下,可部署和更新密钥和应用配置,类似于热部署。
存储编排
:自动实现存储系统挂载及应用,对有状态的应用实现数据持久化,存储系统可以来自于本地目录、网络存储(NFS、ceph、Gluster 等)。
批处理
:可提供一次性任务、定时任务,满足批量数据处理和分析。
以上 k8s 特性,如果仅使用 docker 容器技术是很难实现或者根本无法实现的。k8s 的目的就是让部署容器化应用更加简洁、更加高效。
二、Kubernetes 集群架构介绍
搭建一个 k8s 集群,需要包含 master-node
和 worker-node
两大部分。
master-node:主控节点,专门管理各个工作节点。
worker-node:工作节点,做具体操作事务的节点。
以下将具体介绍各部分中所包含的具体组件,后续在实操搭建 k8s 集群的过程中这些组件都需要我们手动安装。
1. master node 节点
API server
:集群的一个对外统一入口,可以将它理解为 master 节点中各个组件的协调者,通过 apiserver 可将获取到的请求分发至各组件;需要知道,apiserver 是以 restful 请求方式提供服务的,所有请求也就是以 restful 风格通过 apiserver 进入集群后进行相关操作,最后 apiserver 将所有操作数据存储于 etcd当中。
etcd
:分布式,可靠的键值存储,可用于分布式系统中存储关键核心数据。从简单的应用程序到 Kubernetes 再到任何复杂性的应用程序都可以从 etcd 中读写数据。此处专用于保存集群相关的数据。
scheduler
:致力于节点调度,它会选择某一个 node 节点进行应用的部署。
controller-manager
:顾名思义它主要做的就是集中的处理控制管理,集群中后台的一个统一控制组件。处理集群中常规后台任务,一个资源对应一个控制器(controller)。
2. worker node 节点
kubelet
:可以理解为 master 派到 node 节点的一个“代表”,管理当前节点中容器的各种操作。
kube-proxy
:提供网络代理,实现负载均衡等操作。docker
:参见往期文章,此处不再赘述。
三、Kubernetes 核心概念
在操作 kubernetes 的过程中,难免会遇到一些概念性的问题,以下可以说是 kubernetes 中最重要的三个核心即Pod
、Controller
、Service
。
1. Pod
kubernetes 中最小的部署单元;是一组容器的集合,每一个 pod 中的容器都是共享网络的;pod 的生命周期是短暂的,并非一直存在,会随着服务器的重新启动或者重新部署而更新。
2. Controller
可以确保预期的 pod 副本数量;当我们在 k8s 中部署容器或应用时,可以无状态部署或有状态部署;可以确保所有 node 都运行同一个 pod;可以支持一次性任务和定时任务。
无状态:容器或应用内无任何约定,即使迁移之后也可以直接使用。
有状态:容器或应用内包含约定,如该容器/应用网络 IP 需要唯一等。
3. Service
定义一组 pod 的访问规则。
总体流程就是,通过 service 统一入口访问,由 controller 创建 pod 进行部署。
本章学习目标:
- 掌握 k8s 的具体功能和特性;
- 掌握 k8s 集群架构理论体系;
- 掌握 k8s 中的核心概念点。