kubernetes生产化集群管理

2022-04-06  本文已影响0人  LegendGo

生产化集群管理

计算节点相关

生产化集群的考量

计算节点
控制平面

操作系统的选择

操作系统的评估和选择

云原生的原则

atomic
最小华操作系统

原则

Ostree

提供一个共享库和一些列命令行,提供和git命令行一致的体验,可以提交或是下载一个完整的可启动的文件系统树,提供将ostree部署到bootloader的机制

操作系统加载

节点资源管理

状态上报

kubelet周期调度周期性向API Server进行汇报,更新节点的相关信息

图片.png
lease

通过lease对象来保存健康信息,在默认的40s的nodeLeaseDurationSeconds周期呢,如果lease对象没有被更新,则对应的节点被判定为不健康

资源预留

计算节点除了用户容器外,还有很多支撑系统运行的基础服务,为了保证服务进程可以正常运行,在确保他们任务任何时候都可以获取足够的资源,需要对这些进程预留资源

kubele可以通过众多启动参数为系统服务预留出CPU,内存,PID等资源,比如:SystemReserved,KubeReserved等

Capacity 和Allocatable

节点磁盘管理

驱逐管理

资源可用额的监控

检查类型 说明
Memory.available 节点当前的可用内存说明
Nodefs.available 节点根分区的可用磁盘大小
nodefs.inodesFree 节点根分区的可使用的inode
Images.inodesFree 节点运行时分区的可使用inode
Images.available 节点运行时饿分区的可使用大小,如果节点没有运行时分区,就没有想过监控

驱逐策略

Kubelet获得节点的可用额信息后,会结合节点的容量信息来判断当前节点运行的Pod是否满足驱逐条件。

驱逐条件可以是绝对值或是百分比,当监控资源的可使用额度少于设定的百分比的时候,kubelet就会发起驱逐操作

kubelet参数evictionMinimumReclaim可以设置每次回收的资源的最小值,以防止小资源多次被回收

kubelet参数 分类 驱逐方式
evictionSoft 软驱逐 当检测到当前资源达到软驱逐的阈值的时候,并不会立刻启动驱逐哦操作,而是要等待一个宽限期,这个宽限期选取evictionSoftGracePeriod和Pod指定的TerminationGracePeriodSeconds中较小的值
evictionHard 硬驱逐 没有宽限期,一旦检测到满足硬件驱逐的条件,就直接终止容器来释放紧张的资源

基于内存压力的驱逐

基于磁盘压力的驱逐

以下任何一项满足驱逐条件时,它会将节点的DiskPressure的状态设置为true,调度器不会在调度任何Pod到节点上

驱逐行为

容器资源配置

针对不同的Qos class的pod,kubenetes按照如下Hierarchy组织cgroup的cpu子系统

Cpu 的cgroup的配置

Cgroup 参数 Qos类型
容器cgroup Cpu.shares bestEffort 2
Burstable Requests.cpu *1024
Guaranteed Requests.cpu *1024
Cpu.cfs_quota_us bestEffort -1
Burstable Limit.cpu*100
Guaranteed Limit.cpu*100
pod的Group Cpu.shares bestEffort 2
Burstable pod中容器的合集
Guaranteed pod中容器的合集
Cpu.cfs.quota_us bestEffort -1
Burstable pod中容器的合集
Guaranteed pod中容器的合集

针对不同的Qos class的pod,kubenetes按照如下Hierarchy组织cgroup的memory子系统

类型 参数 Qos类型
容器的group Memory.limit_in_bytes bestEffort 9223372036854771712
Burstable Limits.memory
Guaranteed Limits.memory
pod的cgroup Memory.limit_in_bytes bestEffort 9223372036854771712
Burstable pod中容器的合集
Guaranteed pod中容器的合集

日志管理

节点上需要通过运行logrotate的定时任务对系统服务日志进行rotate清理,以防止系统日志占用大量磁盘空间。

Docker卷管理

网络资源

由网络插件通过linux Traffic Control为Pod限制带宽,可以利用CNI社区提供的bandwith插件

进程数

kubelet默认不限制pode可以创建的子进程数,但是可以通过启动参数的podPidsLimit开启限制,还可以由reserved参数为系统进程预留进程数。

节点异常检测

kubernetes集群可能存在以下的问题

Node-problem-detector

为了解决节点检测的问题,社区引入了守护进程node-problem-detector,从各个守护进程收集节点问题,并使它们对上游层可见。

kubernetes节点诊断的工具,可以将节点的异常进行上报

Problem daemon types nodeCondition Description Configs
系统日志监控 KernelDeadLock,ReadOnlyFileSystem FrequentKubeletRestart FrequentDockerRestart FrequentContainerRestart 通过系统监控日志来汇报问题并输出系统指标 Filelog,kmsg, kernel abre systemd
customPluginsMonitor 按需定义 自定义插件监控运行用户自定义监控脚本 比如NTP服务
healthCheck KubeletUnhealthy ContainerRuntimeUnhealthy 针对kubelet和运行时的健康检查 kubelet docker
问题汇报手段

Node-proble-detector通过nodeCondition或者创建event对象来汇报问题

安装过程

常用节点问题排查手段

查看日志

针对使用systemd拉起服务

对于标准的容器日志

基于extended resources 扩展节点资源

扩展资源时kubernetes.io域名之外的标准资源名称,它们使得集群管理员能够颁布非kubernetes内置资源,而用户可以使用他们

自定义扩展资源无法使用kubernetes.io作为资源域名。

管理扩展资源

为节点配置资源

构建和管理高可用集群

图片.png

高可用数据中心

Node的生命周期管理

运营kubernetes集群,除了搭建外,还需要对所有节点的生命周期负责

生产化集群管理

企业公共服务

控制平面高可用

高可用集群

图片.png

集群安装方法

安装工具 方式 优势 缺点
二进制 下载二进制文件,并通过设置systemd来管理 灵活度高 需要关心每一个组件
Kubeadm kubeadm是一个搭建集群的命令行的工具 控制版面组件的安装和配置被封装起来,管理集群的生命后期,比如升级,证书管理 操作系统层面的配置无自动化运行时安装等复杂步骤的,CNI插件需要手动安装
Kubespray 通过sensible-playbook安装 自动完成操作系统层面的配置,利用了kubeadm作为集群管理工具 缺少声明式API的支持
KOPS 基于声明式API的集群管理工具 基于社区标准的clusterAPI进行集群管理,节点的操作系统安装等完全自动化 同云环境高度集成,灵活性差

kubespray 搭建高可用集群

图片.png

基于声明式API管理集群

集群管理部只是包括集群搭建,还需要支持以下功能

kubernetes cluster api
图片.png
参与角色
涉及模型

Cluster Autoscaler

工作机制

cluster autoscaler 架构

图片.png

架构

扩展机制

为了自动创建和初始化Node,Cluster Autoscaler要求node必须属于某个node group

当集群中有多个node group时,可以通过 --expander=<option>选项配置选择node group的策略,支持如下四种方式

多租户集群管理

租户

隔离

隔离手段

权限隔离

节点资源隔离

通过为节点设置不同的taint来识别不同的租户的计算资源

上一篇 下一篇

猜你喜欢

热点阅读