0. Kubernetes (multipass + k3s + helm) + ChaosMesh
本文参考了 极客网(GeekHours-Kubernetes) 的笔记, 配置环境采用 macOS Sequoia + m3 (Silicone) 如果电脑配置不同, 建议参考上述网址进行下载配置
环境配置及基本原理讲解
单节点 k8s 环境部署
1 | brew install minikube |
多节点 k8s 环境部署
在单物理机上部署多个节点, 要么采用 docker 容器思路, 要么采用 虚拟机思路, 由于 kubernetes 本身并不是 docker 衍生品, 这里采用 虚拟机思路来实现 (想要利用 docker 实现的可以参考 kind 项目), 但是我们配置的虚拟机目的也应该是达到类似容器的轻量级, 命令行访问环境的条件即可, 因此我们采用 multipass 项目和 k3s 项目进行配置
multipass 轻量级虚拟机
这是由 Canonical 公司 (Ubuntu 母公司) 开发的一个项目, 支持通过命令行设置来进行控制虚拟机的配置和 vm 集群状态查询
1 | 下载这个指令 |
k3s 边缘环境小型集群实现 k8s 部署
k3s 是由 Rancher Lab 开发的一个轻量级 k8s 发行版, 主要目的是在受限的硬件资源中 (也叫 边缘环境, 例如 rasperberry-Pi) 实现 kubernetes 的部署, 往往部署的集群范围规模比较小
1 | 下载指令, 这一步执行在 master 机器上 |
接下来需要在这个master节点上获取一个token, 用来作为创建worker节点时的一个认证凭证, 它保存在/var/lib/rancher/k3s/server/node-token这个文件里面, 我们可以使用sudo cat命令来查看一下这个文件中的内容,
1 | 首先查看这个 token 是否存在且合理 |
至此单 master + 2 worker nodes 部署完成
如果想在宿主机上查询是否部署成功, 可以执行以下指令:
1 | multipass exec master -- sudo cat /etc/rancher/k3s/k3s.yaml > kubeconfig.yaml |
上述指令的执行目的大概是, 首先将 k3s 集群本身生成的 kubeconfig 拷贝到本地, 然后让 kubectl 去读它
helm k8s 包管理器
这个命令行工具能方便地管理 k8s 指令
1 | brew install helm |
helm 作为包管理器, 常常需要从网络上 add 一些网络源并且接着 update 到本地 helm 环境中, 然后下载到本地 (相当于部署好了)
1 | helm repo add pfisterer-hadoop https://pfisterer.github.io/apache-hadoop-helm/ |
配置 Chaos-Mesh 环境
使用 helm 辅助环境配置
第 1 步: 添加 Chaos Mesh 仓库
在 Helm 仓库中添加 Chaos Mesh 仓库:
1 | helm repo add chaos-mesh https://charts.chaos-mesh.org |
第 2 步: 查看可以安装的 Chaos Mesh 版本
执行如下命令显示可以安装的 charts:
1 | helm search repo chaos-mesh |
注意
上述命令会输出最新发布的 chart, 如需安装历史版本, 请执行如下命令查看所有的版本:
1 | helm search repo chaos-mesh -l |
在上述命令完成后, 接下来开始安装 Chaos Mesh;
第 3 步: 创建安装 Chaos Mesh 的命名空间
推荐将 Chaos Mesh 安装在 chaos-mesh 命名空间下, 也可以指定任意命名空间安装 Chaos Mesh:
1 | kubectl create ns chaos-mesh |
第 4 步: 在 k3s 环境下安装
1 | helm install chaos-mesh chaos-mesh/chaos-mesh -n=chaos-mesh --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/k3s/containerd/containerd.sock --version 2.7.2 |
验证安装
1 | kubectl get pods -n chaos-mesh -l app.kubernetes.io/instance=chaos-mesh |
使用 Chaos-Mesh 注入失效代码 (Pod-Failure)
此部分参考了官网上的信息
yaml 配置文件的写入
首先明确 yaml 文件在这里相当于是用新的 k8s 配置数据来更新网络, 更新 yaml 之后采用 kubectl apply -f cfg.yaml 来应用配置更新
这里的测试配置如下
1 | apiVersion: chaos-mesh.org/v1alpha1 |
如果部署成功, 会显示以下文字:
1 | podchaos.chaos-mesh.org/pod-failure-example created |
然后等待 30 s 之后 (即过了 duration 设定的时间之后) 再读取 k8s 下的 pod 集群数据, 得到部分主机重启 (RESTART)
1 | kubectl get pods -n chaos-mesh |
这就说明在官方给的 chaos 注入环境下试验成功
Troubleshoot
如果在 apply 一步执行之后会出现问题 ERROR from server (Forbidden)...admission webhook "vpodchaos.kb.io" denied the request: Cannot update chaos spec ... 就有可能是配置更新起冲突了, 应当先删除对应的配置环境然后重新 apply
1 | kubectl -n chaos-mesh delete podchaos pod-failure-example |
如果出现 STATUS==ImagePullBackOff 的情况, 登录到 master 节点上查看其是否连接互联网, 即 ping google.com 会不会丢包, 如果丢包再检查 ping 192.168.64.1 即对应以太网中宿主机的 ip 地址 (mac 中默认好像就是这个地址)
如果没有问题就是 宿主机发生了桥接 (NAT) 失败, 换个网络可能就好了, 或者手动配置一下 桥接网络来实现
Chaos Mesh 部署在本地 Kubernetes + HDFS 环境中
首先添加 hdfs 在 helm 中的源
1 |
