Kubernetes 生产化集群管理 操作系统选择
生产化集群的考量
操作系统的评估和选择
ubuntu作为主的操作系统,但是很多人都喜欢使用centos,因为centos马上就不支持了,它没有centos免费支持了,开源社区没有centos的免费支持了,那么就需要考虑后续的操作系统如何管控。
在去定义整个集群的操作系统使用什么样的维度。
专为容器优化的操作系统是专门为容器所作的一些优化,
背后有没有成熟的生态,一项技术如果被人广泛的使用,说明它是活跃的,生命力是强的,那么它后续的版本会一直迭代的,它就会变的越来越好。
如果你用的技术都没有什么人使用,没有一个完整的生态,那么这个技术会一直越来越落寞。
内核版本一般影响到我们的支撑能力。
生态系统与成熟度
通用的操作系统是Ubuntu和centos,它本身的生态是比较成熟的,还有面向容器优化的一些小型操作系统。
云原生
过去很多的生产化运维,它是比较随意的,比如说操作系统有各种各样的工具,然后所有的文件目录都是可以修改配置的,那么这种架构下面,管理员或者用户习惯性的去登入这些节点上面,去做一些配置的更改,这样改来改去,积年累月,那么可能一个事件的迁移就会搞出大问题。
所以生产系统很多大的问题都是这样的,可变架构的风险是问题不可追溯的,大家不知道它发生了什么样的事情,然后就会造成重大的事故。
或者当我节点出现问题的时候,我要紧急替换的时候,我根本不知道要恢复什么,我可能从标准镜像去构建,但是后面所作的这些配置,在基础镜像里面是没有体现的,我是不知道的,这样花费的时间和人力就会非常的高。
不可变架构就是希望主机的操作系统是不可变的,然后运行在主机上面的容器镜像也是不可变的,那么就让主机的大部分文件目录都是只读的,我只做必要的变更,然后再通过某些机制从流程上面管控这些变更的可能性,那么就使得整个基础架构是不可变的。起来之后什么样,那么一直就是什么样,如果节点出现问题,将其换掉,那么问题就解决了。
Atomic
如何实现这个目的呢?
redhat本身提供了软件包的安装系统,叫做Automic,通过Automic这个工具它可以支持多种发布版,比如centos rhel。
它的优势是不可变的操作系统,它是面向容器,基于这个工具可以去构建面向容器优化的基础设施,rpm-ostree可以为我们提供一堆rpm包让我们很方便的构建一个操作系统镜像。
最小化主机操作系统
操作系统构建流程
社区有一个一个的rpm的repo,会在rpm的repo基础之上,创建自己的rpm的snapshot,我们在公司会去拉取社区rpm的镜像,然后构建我们自己的snapshot,这个snapshot除了镜像之外,还会去看社区有哪些patch,以及生产系统发现的问题,这些问题修复一并会通过rpm rebuilder变成一个rpm包,放在rpm的snapshot里面。
这样其实我们自己维护了一套rpm的repo,有了这个repo之后,有个工具叫做rpm-ostree,这个工具做的事情就是将rpm包编译成一个ostree的格式。
我们追求的是最小的操作系统镜像,所以这里面只安装最核心的服务,需要辅助的工具怎么办?这里面有buildah,它的输出就是docker image。
所以这里面会构建两种,一种是基本的操作系统镜像,通过ostree保持最小的集合,一些utility一些辅助的工具,我们通过docker build构建成docker的镜像,提供后续做整个操作系统的问题排查。
有了ostree之后,它可以通过http的形式暴露出来,那这里面会有两条线,一条就是裸金属的这条线,我们启的是bare mental,bare mental里面有kick start,kick start可以直接去调用ostree直接加载这个操作系统,完成操作系统的启动。
ostree这种模式对于虚拟机来说,是不能完全支持的,所以还有另外一条线,对于虚拟化的技术栈上面我们会有packer builder,通过这个builder将ostree构建成一个一个的存在glance的一个一个操作系统镜像,openstack在启动虚拟机的时候会去读取这些镜像,然后将虚拟机启动起来。
所以以用户最后在使用的时候,无论是裸金属,还是虚拟机,它的感受是一样的,
ostree
ostree其实就是redhat提供的一系列的工具,ostree本身会有libostree的共享库,还有一些命令行,它的命令行工具的使用和git命令行使用非常相近,你可以提供ostree的命令加载一个repo,还可以pull这些工具。
构建ostree
加载ostree
操作系统加载
生产环境遭遇的陷阱
如果需要自己去定制化操作系统,那么可以通过rpm-ostree这些机制来实现操作系统的定制化。
相关文章
- 从概念、部署到优化,Kubernetes Ingress 网关的落地实践
- 实践:Kubernetes 集群中 DNS 故障的可观测性与根因诊断
- [Kubernetes] Kubectl and Pod
- Kubernetes详解(二十八)——DaemonSet控制器
- Kubernetes详解(二十二)——Deployment控制器
- kubernetes 服务发现 Node_Exporter 监控 Kubernetes 集群节点
- 没有Kubernetes怎么玩Dapr?
- Kubernetes 外部访问集群内部服务
- y32.第三章 Kubernetes从入门到精通 -- k8s集群环境搭建(五)
- Kubernetes基础自学系列 | Secret 存在意义
- 【云原生之kubernetes实战】kubernetes集群的检测工具——popeye
- Kubernetes集群数据存储Volume资源核心概念(三十一)
- Kubernetes集群Pod资源污点及容忍详解(二十)
- 二进制方式搭建Kubernetes高可用集群(超丰富的组件概念理论总结)
- Kubernetes 环境部署 docker离线包准备
- Kubernetes 调度过程
- Kubernetes 集群权限管理RBAC
- 【云原生 | Kubernetes 系列】----使用Prometheus监控K8s集群
- 【云原生 | Kubernetes 系列】---Ceph集群安装部署
- Kubernetes二进制部署高可用集群
- kubernetes集群版本升级