1.先理清层级关系(由底层到上层)

硬件服务器 >Linux操作系统>docker/containerd容器引擎>k8s

linux是底层地基;k8s是跑在Linux之上的容器编排管理软件,它本身不是操作系统,只是一套应用程序。

Linux做什么

linux管理服务器硬件:CPU,内存,磁盘,网卡。

可以在Linux上跑普通进程,也可以跑容器(容器的本质就是被Namespace+Cgroup隔离的Linux进程)。

容器离不开Linux内核提供的namespace和cgroup这两套内核能力。

docker/containerd

利用Linux内核能力,把应用打包成容器,负责单台机器上容器的创建,启动,停止。

问题来了:一台机器好办,如果十几上百台服务器,成千上百个容器,手动一个个docker命令管,根本管不住。

k8s就是用来解决这个痛点

k8s=多机器大规模容器的调度管理平台

2.通俗理解

Linux:一栋栋楼房(服务器),楼房提供水电(CPU内存网络)

docker容器:楼房里面一个个独立单间,每个房间跑一个软件应用

docker:只能管理单独一栋楼里面的房间

k8s:小区物业,统一管理整片小区几十栋楼房

物业k8s能干这些事情:

1)调度:哪里房子有空,就把应用容器放到哪台Linux机器上运行

2)自愈:某台Linux机器宕机,自动把上面的容器挪到别的正常机器重启

3)扩缩容:流量暴涨,自动多开一批容器;流量下降自动关掉多余容器

4)网络:跨机器的容器相互通信,对外暴露访问入口

5)存储:给容器挂载磁盘,容器漂移数据不丢失

6)滚动更新:应用升级,分批替换旧容器,业务不中断

3.k8s和Linux的强绑定关系

1)k8s必须跑在Linux上  

k8s所有组件(kube-apiserver,kubelet,scheduler)都是Linux上面的程序。

Windows也可以跑k8s,但生产环境几乎全部用Linux。

2)容器能力来自Linux内核

容器的隔离Namespace,资源限制Cgroup都是Linux内核原生功能,k8s只是调用这套内核能力。

没有Linux内核,就没有容器,也就没有k8s。

3)kubelet(k8s节点代理)运行在每一台Linux节点上,负责跟Linux系统交互,操作本机容器,磁盘,网络。

4)k8s只管容器应用层,底层操作系统的安装,调优,磁盘扩容,网络配置,还是需要你懂Linux来维护。

4.分清边界(很容易搞混)

Linux:管机器,内核,硬件,底层网络磁盘

Docker/containerd:管单节点容器生命周期

k8s:跨多台机器,批量编排,调度,自愈,发布,运维容器

一句话总结:Linux提供地基,容器是隔离的进程,k8s就是大规模管理成千上万的“大管家”。

5.实验

你有三台Ubuntu(linux)虚拟机,搭建k8s集群:

1)每一台机器底层都是Ubuntu Linux;

2)Linux内核提供Cgroup,Namespace;

3)k8s把pod(容器)调度到这三台Linux节点;

4)如果某个节点挂掉,k8s自动把pod调度到另外一台正常的Linux机器

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐