操作系统的功能和模块与 Kubernetes 的功能和模块做了一个对比:
Kubernetes 作为数据中心的操作系统还是主要管理数据中心里面的四种硬件资源:CPU、内存、存储、网络。
对于 CPU 和内存这两种计算资源的管理,我们可以通过 Docker 技术完成。它可以将 CPU 和内存资源,通过 namespace 和 cgroup,从大的资源池里面隔离出来,并通过镜像技术,实现计算资源在数据中心里面的自由漂移。
Kubernetes 里面有一个调度器 Scheduler,你只需要告诉它,你想运行 10 个 4 核 8G 的 Java 程序,它会自动帮你选择空闲的、有足够资源的服务器,去运行这些程序。
Kubernetes 里面有 Controller 的概念,可以控制 Pod 们的运行状态以及占用的资源。如果 10 个变 9 个了,就选一台机器添加一个;如果 10 个变 11 个了,就随机删除一个。
Kubernetes 的 Scheduler 也是有亲和性功能的,你可以选择两个 Pod 永远运行在一台物理机上,这样本地通信就非常方便了;你也可以选择两个 Pod 永远不要运行在同一台物理机上,这样一个挂了不影响另一个。
统一的存储常常有三种形式:
1、对象存储:这种方式是将文件作为一个完整对象的方式来保存。每一个文件对我们来说,都应该有一个唯一标识这个对象的 key,而文件的内容就是 value。对象可以分门别类地保存在一个叫作存储空间(Bucket)的地方,有点儿像文件夹。
2、分布式文件系统:这种是最容易习惯的,因为使用它和使用本地的文件系统几乎没有什么区别,只不过是通过网络的方式访问远程的文件系统。多个容器能看到统一的文件系统,一个容器写入文件系统,另一个容器能够看到,可以实现共享。
3、分布式块存储:这就相当于云硬盘,也即存储虚拟化的方式,只不过将盘挂载给容器而不是虚拟机。块存储没有分布式文件系统这一层,一旦挂载到某一个容器,可以有本地的文件系统。
这三种形式,对象存储使用 HTTP 进行访问,当然任何容器都能访问到,不需要 Kubernetes 去管理它。而分布式文件系统和分布式块存储,就需要对接到 Kubernetes,让 Kubernetes 可以管理它们。Kubernetes 提供 Container Storage Interface(CSI)接口,这是一个标准接口,不同的存储可以实现这个接口来对接 Kubernetes。
Kubernetes 同样是提供统一的接口 Container Network Interface(CNI,容器网络接口)。无论你用哪种方式实现网络模型,只要对接这个统一的接口,Kubernetes 就可以管理容器的网络。
使用操作系统,运行一个进程是最常见的需求。第一种进程是交互式命令行,运行起来就是执行一个任务,结束了马上返回结果。在 Kubernetes 里面有对应的概念叫作 Job,Job 负责批量处理短暂的一次性任务 (Short Lived One-off Tasks),即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。
第二种进程是 nohup(长期运行)的进程。在 Kubernetes 里对应的概念是 Deployment,使用 Deployment 来创建 ReplicaSet。ReplicaSet 在后台创建 Pod。
第三种进程是系统服务。在 Kubernetes 里面对应的概念是 DaemonSet,它保证在每个节点上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。
第四种进程是周期性进程,也即 Crontab,常常用来设置一些周期性的任务。在 Kubernetes 里面对应的概念是 CronJob(定时任务),就类似于 Linux 系统的 Crontab,在指定的时间周期运行指定的任务。
Kubernetes Volume 的生命周期与 Pod 绑定在一起,容器挂掉后,Kubelet 再次重启容器时,Volume 的数据依然还在,而 Pod 删除时,Volume 才会真的被清理。
Kubernetes Service 是一个 Pod 的逻辑分组,这一组 Pod 能够被 Service 访问。每一个 Service 都一个名字,Kubernetes 会将 Service 的名字作为域名解析成为一个虚拟的 Cluster IP,然后通过负载均衡,转发到后端的 Pod。虽然 Pod 可能漂移,IP 会变,但是 Service 会一直不变。
对应到 Linux 操作系统的 iptables,Kubernetes 在有个概念叫 Network Policy,Network Policy 提供了基于策略的网络控制,用于隔离应用并减少攻击面。它使用标签选择器模拟传统的分段网络,并通过策略控制它们之间的流量以及来自外部的流量。
这个数据中心操作系统的功能如下:
此文章为12月Day6学习笔记,内容来源于极客时间《趣谈Linux操作系统》,推荐该课程。