Kubernetes 系统资源预留

前言 Kubernetes 的 pod 可以按照节点的资源进行调度,默认情况下 pod 能够使用节点的全部资源,这样往往会出现因为节点自身运行的一些驱动及 Kubernetes 系统守护进程,导致资源不足的问题。 例如有一个应用在运行中使用了大量的系统资源,导致 kubelet 和 apiserver 的心跳出现故障,导致节点处于 Not Ready 的状态,节点出现 Not Ready 的状况后,过一会儿会将 pod 调度到其它 node 节点上运行,往往会导致节点雪崩,一个接一个的出现 Not Ready 状况. 那么如何解决这个问题呢? 这时可以通过 为 Kubernetes 集群配置资源预留,kubelet 暴露了一个名为 Node Allocatable 的特性,有助于为系统守护进程预留计算资源,Kubernetes 也是推荐集群管理员按照每个节点上的工作负载来配置 Node Allocatable。 Node Allocatable Kubernetes 节点上的 Allocatable 被定义为 Pod 可用计算资源量。 调度器不会超额申请 Allocatable。 目前支持 CPU、内存 和 存储 这几个参数。可以通过 kubectl describe node 命令查看节点可分配资源的数据: 可以看到有 Capacity 和 Allocatable 两个内容,Allocatable 这个就是节点可分配资源,由于没有设置,所以默认 Capacity 和 Allocatable 是一致的。 Capacity 是节点所有的系统资源,kube-reserved 是给 kube 组件预留的资源,system-reserved 是给系统进程预留的资源,eviction-hard 是Kubelet 的驱逐阈值。...

March 9, 2024 · 2 min · overstarry

atop工具介绍及使用

前言 最近出现了服务器cpu、内存升高导致服务器宕机的问题,发生宕机后,往往由于对系统资源数据收集的不齐全,导致无法快速查明发生宕机的原因。在通过云厂商客服和网络相关资料帮助下,了解了 atop 这个工具,本机对 atop 的安装及使用进行介绍。 atop 介绍 atop 是一款用于监控 Linux 系统资源与进程的工具,能够报告所有进程的活动。其以一定的频率记录系统和进程活动,采集的数据包含 CPU、内存、磁盘、网络的资源使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中。对于每个进程,会显示CPU使用率、内存增长、磁盘使用率、优先级、用户名、状态和退出码等。当服务器出现问题后,可以根据相应的atop日志文件进行分析。 安装 atop 不是系统的内部自带命令,需要进行安装,接下来以 Ubuntu 系统为例子,介绍如何安装 atop 命令。 1 更新软件源 执行 sudo apt update 进行软件源的更新。 2 安装 atop 执行 sudo apt install atop 命令安装 atop。 配置 安装完 atop 后,可以使用 atop 的默认配置使用,也可根据使用情况修改默认配置,atop 默认配置在 /etc/sysconfig/atop,查看默认配置文件内容: 1 2 3 4 5 6 7 # /etc/default/atop # see man atoprc for more possibilities to configure atop execution LOGOPTS="-R" LOGINTERVAL=600 LOGGENERATIONS=28 LOGPATH=/var/log/atop LOGINTERVAL 是监控周期,默认600s,LOGGENERATIONS是日志文件保留周期,默认是28天,可以根据具体的需求进行修改。...

March 2, 2024 · 1 min · overstarry

Kubernetes ExternalName

前言 我们知道 kubernetes 内部服务之间是通过 service 进行相互访问的, 那么如果现在有一个非 kubernetes 部署的服务,我们可以也通过 service 进行内部交互使用吗?答案是可以,我们可以使用 service 的 ExternalName 类型将service 映射到外部服务上。 最近需要将一个外部服务映射到 kubernetes service 上,通过查找资料学习,本文记录如何将 kubernetes service 映射到外部服务的流程步骤。 外部域名映射内部 service 先讲解如何将外部服务通过域名的方式映射到内部 service 上,通过配置 externalName 字段来配置映射关系.例如,以下 Service 定义将 test 命名空间中的 my-service 服务映射到 my.overstarry.vip: 1 2 3 4 5 6 7 8 apiVersion: v1 kind: Service metadata: name: my-service namespace: test spec: type: ExternalName externalName: my.overstarry.vip 虽然 externalName 也支持填写 ip 地址,但不会被 kubernetes 解析,如果需要使用 ip 地址,可以使用无头服务 Headless ,下文会进行介绍。...

February 24, 2024 · 1 min · overstarry

Go 刷新 cdn

前言 cdn 刷新是 cdn 使用过程中的一项重要的功能,通过刷新功能,您可以删除CDN节点上已经缓存的资源,并强制CDN节点回源站获取最新资源,适用于源站资源更新和发布、违规资源清理、域名配置变更等。 接下来将分别讲述 阿里云CDN、AWS cloudfront 、Cloudflare cdn 使用 go 语言进行 cdn 的刷新操作的。 阿里云刷新 cdn 如何刷新 阿里云 cdn 的缓存呢? 只需使用 阿里云 openapi 的 go sdk 即可,通过查阅文档,我们只需使用 RefreshObjectCaches API即可刷新阿里云 cdn 的缓存,RefreshObjectCaches 有以下参数: 1 2 3 4 5 6 7 ObjectPath: 刷新的url ,多个 url 使用换行符进行分隔 ObjectType: 刷新任务的类型,有以下类型 File(默认值):文件刷新。 Directory:目录刷新。 Regex:正则刷新。 IgnoreParams:去参数刷新。去参数指的是去除请求 URL 中?及?之后的参数,去参数刷新指的是用户先通过接口提交去参数后的 URL,然后用户提交的待刷新 URL 将会与已缓存资源的 URL 进行去参数匹配,如果已缓存资源的 URL 去参数以后与待刷新 URL 匹配,那么 CDN 节点将对缓存资源执行刷新处理。 Force: 当回源内容和源站资源对比后不一致时,是否刷新对应目录下的资源。默认为 false。 下面是一个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 package main import ( cdn20180510 "github....

January 19, 2024 · 2 min · overstarry

Apisix 开启 gzip

最近使用 Apisix 网关时,需要开启 gzip 功能,通过查阅资料学习,了解了几种开启 gzip 的方式,本文记录2种 Apisix 开启 gzip的方式。 gzip插件 我们可以使用 gzip插件 针对某些路由开启 gzip,只需对路由使用 gzip插件并配置一些插件属性即可. 接下来使用一个例子来演示 gzip 插件,使用 apisix admin api 创建一条路由,要注意的是本文的例子是使用 apisix 3.7 版本: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 curl -i http://127.0.0.1:9180/apisix/admin/routes \ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X POST -d ' { "uri": "/get", "plugins": { "gzip": { "buffers": { "number": 8 }, "comp_level": 6, "disable": false, "types": "*" } }, "upstream": { "nodes": [ { "host": "httpbin....

January 13, 2024 · 2 min · overstarry