Kubernetes附加组件可实现更高效的计算

如果说“启动” Kubernetes集群是一项相对容易的工作。部署应用程序以在Kubernetes之上工作需要更多的努力,特别是如果您不熟悉容器。对于使用Docker的人来说,这也是一项相对简单的工作,但当然,您需要掌握Helm等新工具。然后,当你把所有的东西放在一起,当你试图在生产中运行你的应用程序时,你会发现有很多缺失的部分。可能Kubernetes做的不多,对吧?好吧,Kubernetes是可扩展的,并且有一些插件或附件可以让您的生活更轻松。

原文档:https://akomljen.com/kubernetes-add-ons-for-more-efficient-computing/

什么是Kubernetes附加组件?

简而言之,附加组件扩展了Kubernetes的功能。它们中有很多,很有可能你已经使用了一些。例如,网络插件或CNI,如Calico或Flannel,或CoreDNS(现在是默认的DNS管理器),或着名的Kubernetes仪表板。我说有名,因为这可能是集群运行后你将尝试部署的第一件事:)。上面列出的是一些核心组件,CNI必须具有,DNS相同,以使您的集群正常运行。但是,一旦开始部署应用程序,您就可以做更多事情。输入Kubernetes附加组件以实现更高效的计算!

如果您是Kubernetes的新手,请先阅读本书Kubernetes in Action

Cluster Autoscaler - CA.

Cluster Autoscaler根据利用率扩展您的群集节点。如果您有待处理的pod,CA将扩展群集,如果未充分利用节点,则将其缩小 - 默认设置为0.5并可配置--scale-down-utilization-threshold。你绝对不希望pod处于挂起状态,同时,你不想运行未充分利用的节点 - 浪费金钱!

使用案例: AWS集群中有两个实例组或自动调节组。它们在两个可用区域1和2中运行。您希望根据利用率扩展群集,但是您希望在两个区域中具有相似数量的节点。此外,您还希望使用CA自动发现功能,因此您无需在CA中定义最小和最大节点数,因为这些节点已在自动缩放组中定义。并且您希望在主节点上部署CA.

以下是通过Helm的CA示例安装,以匹配上述用例:

⚡ helm install --name autoscaler \
    --namespace kube-system \
    --set autoDiscovery.clusterName=k8s.test.akomljen.com \
    --set extraArgs.balance-similar-node-groups=true \
    --set awsRegion=eu-west-1 \
    --set rbac.create=true \
    --set rbac.pspEnabled=true \
    --set nodeSelector."node-role\.kubernetes\.io/master"="" \
    --set tolerations[0].effect=NoSchedule \
    --set tolerations[0].key=node-role.kubernetes.io/master \
    stable/cluster-autoscaler

您需要进行一些其他更改才能实现此目的。有关更多详细信息,请查看此帖子 - AWS上的Kubernetes Cluster Autoscaling

Horizo​​ntal Pod Autoscaler - HPA

Pod水平自动伸缩自动缩放基于观察到的CPU使用率在复制控制器,部署或副本集豆荚的数目。通过自定义指标支持,还可以使用其他一些应用程序提供的指标。

HPA在Kubernetes世界并不是什么新东西,但Banzai Cloud最近发布了HPA Operator,简化了它。您需要做的就是为您的部署或StatefulSet提供注释,HPA操作员将完成剩下的工作。在这里查看支持的注释。

使用Helm安装HPA操作员非常简单:

⚡ helm repo add akomljen-charts https://raw.githubusercontent.com/komljen/helm-charts/master/charts/

⚡ helm install --name hpa \
    --namespace kube-system \
    akomljen-charts/hpa-operator

⚡ kubectl get po --selector=release=hpa -n kube-system
NAME                                  READY     STATUS    RESTARTS   AGE
hpa-hpa-operator-7c4d47dd4-9khpv      1/1       Running   0          1m
hpa-metrics-server-7766d7bc78-lnhn8   1/1       Running   0          1m

部署Metrics Server后,您还可以使用kubectl top pods命令。监视pod的CPU或内存使用情况可能很有用!;)

HPA可以从一系列的API聚集(的取度量metrics.k8s.iocustom.metrics.k8s.ioexternal.metrics.k8s.io)。但是,通常,HPA将使用metrics.k8s.ioHeapster提供的API(不再使用Kubernetes 1.11)或Metrics Server。

向部署添加注释后,您应该能够使用以下方法对其进行监控:

⚡ kubectl get hpa
NAME       REFERENCE             TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
test-app   Deployment/test-app   0%/70%    1         4         1          10m

请记住,您在上面看到的CPU目标是基于此特定pod的已定义CPU请求,而不是节点上可用的总CPU。

Addon Resizer

Addon resizer是一个有趣的插件,您可以在上面的场景中使用Metrics Server。在将更多pod部署到群集时,最终Metrics Server将需要更多资源。Addon resizer容器监视Deployment(例如Metrics Server)中的另一个容器,并向上和向下垂直缩放依赖容器。Addon resizer可以根据节点数线性扩展Metrics Server。有关详细信息,请查看官方文档。

Vertical Pod Autoscaler - VPA

您需要为将在Kubernetes上部署的服务定义CPU和内存请求。如果您没有将默认CPU请求设置为100m0,1可用CPU。资源请求有助于kube-scheduler确定运行特定pod的节点。但是,很难定义适合更多环境的“足够好”的值。Vertical Pod Autoscaler根据pod使用的资源自动调整CPU和内存请求。它使用Metrics Server获取pod指标。请记住,您仍需要手动定义资源限制。

我不会在这里详述,因为VPA确实需要专门的博客文章,但有一些事情你应该知道:

  • VPA仍然是一个早期项目,所以要注意
  • 您的群集必须支持MutatingAdmissionWebhooks,默认情况下自Kubernetes 1.9启用
  • 它不能与HPA一起使用
  • 当资源请求更新时,它将重新启动所有pod,这是预期的类型

Descheduler

kube-scheduler是负责Kubernetes调度的组件。但是,由于Kubernetes的动态性,有时pod可能会在错误的节点上结束。您可能正在编辑现有资源,添加节点亲和性或(反)pod亲和性,或者您在某些服务器上有更多负载,而某些服务器几乎在空闲时运行。一旦pod运行,kube-scheduler将不会尝试再次重新安排它。根据环境的不同,您可能会有很多活动部件。

Descheduler会检查可以移动的pod,并根据定义的策略将其驱逐出去。Descheduler不是默认的调度程序替代品,取决于它。该项目目前在Kubernetes孵化器中尚未准备好生产。但是,我发现它非常稳定并且效果很好。Descheduler将作为CronJob在您的集群中运行。

我写了一篇专门的文章Meet a Kubernetes Descheduler,你应该查看更多细节。

k8s Spot Rescheduler

我试图解决在AWS上管理多个自动扩展组的问题,其中一个组是按需实例,另一个竞争实例。问题是,一旦您扩展了竞争实例,您想要从按需实例移动容器,以便您可以将其缩小。k8s spot recheduler试图通过将pod驱逐到可用的点来减少on-demand实例的负载。 实际上,重新调度程序可用于将任何节点组的负载移除到不同的节点组上。他们只需要贴上适当的标签。

我还创建了一个Helm图表,以便于部署:

⚡ helm repo add akomljen-charts https://raw.githubusercontent.com/komljen/helm-charts/master/charts/

⚡ helm install --name spot-rescheduler \
    --namespace kube-system \
    --set image.tag=v0.2.0 \
    --set cmdOptions.delete-non-replicated-pods="true" \
    akomljen-charts/k8s-spot-rescheduler

对于一个完整列表cmdOptions检查这里

要使k8s spot recheduler正常工作,您需要标记您的节点:

  • 按需节点 - node-role.kubernetes.io/worker: "true"
  • 点节点 - node-role.kubernetes.io/spot-worker: "true"

PreferNoSchedule在点播实例上添加污点,以确保k8s点重定时器在做出调度决策时更喜欢点。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342