k8s可以理解为容器的操作系统,就像linux操作系统一样。
1. 内核
linux操作系统内核分为进程管理子系统、内存管理子系统、文件子系统、设备子系统、网络子系统,这些模块通过统一的API,也就是系统调用,对上提供服务。
k8s就是一个数据中心的操作系统,主要管理数据中心的四种硬件资源:CPU、内存、存储、网络。
1.1 CPU和内存
对于CPU和内存,这两种计算资源的管理,可以通过docker完成。docker将cpu和内存,通过namespace和cgroup,从大的资源池里隔离出来,并通过镜像技术,实现计算资源在数据中心的拷贝。
linux操作系统上多个进程之间,需要通过文件系统保存持久化数据,并实现共享。
1.2 存储
同样,作用于数据中心的k8s也有类似文件系统的基础设施,分为对象存储、分布式文件系统和分布式块存储。
1.3 网络
k8s有自己的网络模型:
- 每个pod有一个独立的ip地址,pod内所有容器共享网络命名空间。
- 集群内所有pod都可以通过ip直接访问。
实现这样的网络模型,k8s提供了Calico/Flannel,也可以使用openvswitch或linux bridge。
linux操作系统一样,提供了一个统一的网络接口,各个网卡厂商可以依照linux操作系统提供的接口编写驱动。
同样k8s也提供了一个统一的接口,叫做Container Network Interface(CNI),不同的网络模型,只要对接CNI,就可以被k8s管理使用。
2. 用户态
k8s作为数据中心的操作系统,在工作模式上,也类似与linux操作系统的用户态常用机制。
2.1 进程
linux的交互式命令行,在k8s中对应的概念叫做job,job负责处理一次性任务。
linux的后台进程,在k8s对应depoloyment,deployment负责长期运行。
linux的系统服务,在k8s中对应daemonset,daemonset负责部署一些日志、监控类应用。
linux的周期性进程,在k8s中对应cronjob,类似linux中的crontab,负责在指定的时间周期内,运行指定的任务。
2.2 存储
类似linux的文件,是对存储设备的抽象。k8s有volume的概念。
2.3 网络
类似于域名,k8s有service的概念,每个serviceYou一个名字,k8s会将service名字解析成ip,通过负载均衡转发到pod。
虽然pod的ip会变,但是service名字不变。
还有,对应于linux的iptables,k8s也有一个概念叫做network policy,提供了基于策略的网络控制。
3. 总结
参考:https://time.geekbang.org/column/article/117149