如何使用运行手册自动化 Kubernetes 中的重复性任务?

Photo by 马库斯·温克勒 on 不飞溅

如何使用运行手册自动化 Kubernetes 中的重复性任务?

介绍

使用 Runbook 可以通过自动化可重复的任务来简化和改进 Kubernetes 的工作。奖励点,我们可以只使用开源工具来做到这一点。

如果您从事运维工作、是平台或 DevOps 团队的一员,或者只是想了解更多关于使用自动化更轻松地使用 Kubernetes 的经验,那么您将从这篇博客中受益匪浅。

请继续关注涵盖该主题的视频和互动场景。

Kubernetes 复杂性

在了解了 pod 和部署、服务、配置映射和秘密之后,Kubetneres 似乎并没有那么可怕。

正如一句著名的谚语所说。

你不知道的不会伤害你。

一段时间后,您的需求超出了 Kubetneres 的基本资源所能提供的范围,您会发现表面之下有一座巨大的复杂“冰山”。

https://www.reddit.com/r/kubernetes/comments/u9b95u/kubernetes_iceberg_the_bigger_picture_of_what_you/

操作手册

一个 PagerDuty 的方便定义 告诉我们什么是运行手册:

操作手册是详细的“操作方法”指南,用于完成公司 IT 运营流程中经常重复的任务或程序。创建运行手册的目的是为团队中的每个人(无论是新人还是经验丰富的人)提供快速准确地解决给定问题的知识和步骤。例如,运行手册可以概述例行操作任务,例如修补服务器或更新网站的 SSL 证书。

运行手册有什么用?

使用 Runbook 自动执行 3 种常见类别的任务

  • 处理 事件
  • 表演 可重复的 任务
  • 问题 诊断

下图显示了从事件缓解和诊断开始以收集有关新问题或可重复任务的信息的流程。

Source: Author

当然,Runbook 不仅限于 Kubernetes,这也是我们今天要关注的内容。

诊断

诊断是 Runbook 的一个特例,其中有许多探索性步骤尚未以 Runbook 的形式捕获。

使用和维护专用调试容器,尤其是使用临时容器功能有助于在团队中共享最佳诊断实践和工具。然而,这是一个单独的博客的主题!

[

debug/Dockerfile at master · Piotr1215/debug

此文件包含双向 Unicode 文本,其解释或编译方式可能与下面显示的不同……

github.com

](https://github.com/Piotr1215/debug/blob/master/Dockerfile)

自动化目标

为什么不使用脚本或程序自动执行所有操作?

Runbook 是一种支持工具和指南,适用于需要人工干预且根据定义无法自动化的任务。它们获取运营知识并为改进提供重要来源。

从构建和执行运行手册中学到的东西可以而且应该成为提高它们所指系统的自动化水平的灵感。

Runbooks 自动化如何提供帮助?

  • 能够在 可重复的 方式
  • 离开 审计追踪 以事件处理文件的形式
  • 每个人 具有访问权限应该能够执行运行手册

实践中的自动化运行手册

首先,创建一个文件夹结构,每个文件夹对应一个单独的 Kubernetes 集群。这样我们可以保持集群连接干净地分开。

随着时间的推移,.kube/config 文件将包含 dev、test 和 prod 集群引用的混合。例如,很容易忘记从 prod 集群上下文中关闭并出错并运行 kubectl 删除 ns 交叉平面系统 .

使用 direnv 加载 k8s 配置

使用以下设置来避免此类错误并保持集群分离。

  1. 安装 direnv

Direv 在大多数 Linux 发行版上,在 Mac 上设置很容易

 冲泡安装direnv  
 echo eval "$(direnv hook bash)" >> ~/.bashrc # 或 ~/.zshrc

2.为每个集群创建一个目录

尤其是连接到重要的 prod 集群时,使用专用目录要安全得多。

mkdir prod-cluster-xxx && cd prod-cluster-xxx

3.创建.envrc文件

该文件包含 KUBCONFIG 仅作用于当前目录和所有子目录的变量

回声导出 KUBECONFIG="$PWD"/config >> .envrc

大多数云提供商提供一个命令,将凭据合并到活动配置文件中。例如,添加一个命令

 gcloud 容器集群 get-credentials ...

设置后 KUBCONFIG 变量将使用 Google Cloud 中远程 GKE 集群的凭据进行更新。

.envrc 文件还可以包含需要为每个文件夹加载的静态变量,例如命名空间名称、部署名称等。

4.在目录中启用direnv

direnv 允许

文件夹 = 集群

每次进入文件夹时,KUBECONFIG 变量都会改变并指向文件夹本地的配置文件。通过离开文件夹, 目录 将卸载本地 KUBCONFIG 变量并设置前一个 shell 变量。

运行手册

每个 Runbook 只是一个 markdown 文件,其中包含与我们要执行的操作相关的代码块。将它们视为您运行的操作的蓝图。

每个 Runbook 都从模板文件中复制而来,并且可以存储在带有专用 .envrc 文件的单独文件夹中,以更好地捕获执行步骤的结果。

专用文件夹允许存储笔记、故障排除步骤等,并且可以在需要时轻松转换为 git 存储库。

示例运行手册

该文件本身是一个简单的降价代码,其中包含由代码运行程序执行的围栏代码块,并在命令下方收集结果。

使用完运行手册后,命令输出将直接位于命令下方。您可以/应该添加有关执行步骤的注释和其他信息。

最后,将新文件提交到 运行手册存储库 并使用 PR 流程将其合并,并从您的同事那里获得反馈和改进建议。

Source: Author

结论

我们已经看到如何使用开源工具(例如 neovim、direnv、git 和 kubectl)创建可重用的自动化运行手册。

自动化运行手册库将不断增长,并有助于以更清洁、更快的方式处理事件、更优化的手动配置任务并帮助捕获探索性诊断的结果。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/30448/00151210

posted @ 2022-09-12 10:00  哈哈哈来了啊啊啊  阅读(49)  评论(0编辑  收藏  举报