准备工作
安装wdrip
下载最新版本wdrip.当前版本0.1.1
1 | (base) ➜ curl -sSL --retry 3 https://host-wdrip-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/wdrip/install.sh |bash |
配置wdrip
wdrip 目前仅支持阿里云上管理k8s集群,更多的CloudProvider未来会逐步加入。
wdrip 需要您的阿里云账号信息来帮助您管理您的云上k8s资源。将replace-with-your-own-accessKeyId
及replace-with-your-own-accessKeySecret
替换成您自己的主账号AK信息。
wdrip 会额外为您创建OSS bucket,用来备份集群,用来紧急修复。bucket名称见下面的wdrip-index
1 | (base) ➜ vi ~/.wdrip/config |
如果wdrip get
报错Status Code: 403 Code: AccessDenied Message: The bucket you access does not belong to you.
请换一个bucketName,因为你指定的bucket名称在全局范围内与其他人的名称冲突了。
创建集群
wdrip遵循结构化原则,最小核心原则,模块化设计,因此具有非常高的灵活性。
wdrip会首先在云上初始化一个单Master节点的k8s集群(最小可用原则),这个阶段的速度最快,并且具有最小的故障面,具有最高的系统稳定性。
以下配置为您创建一个最小k8s集群,仅有一个master节点。预计3分钟内完成。
1 | (base) ➜ export CLUSTER_NAME=kubernetes-id-001 \ |
观测集群的创建过程
创建的集群是一个异步的过程,因此我们提供了一个watch命令,用来观测创建的进度。执行watch命令前请将terminal窗口最大化,保证最佳输出效果。
1 | (base) ➜ wdrip watch --name kubernetes-id-001 |
查看集群列表
wdrip提供了命令用来查看本账号的provider所创建的集群列表
1 | (base) ➜ wdrip get |
通过wdrip get -n kubernetes-id-001 -o yaml
可以查看该集群的详细信息
连接集群
当集群创建完成后,可以通过wdrip get命令下载kubeconfig文件来访问我们的集群。 当前wdrip创建的集群通过EIP在公网暴露了apiserver,因此可以通过公网本地访问。
1 | (base) ➜ wdrip get -r kubeconfig -n kubernetes-id-001 -w ~/.kube/config.txt |
添加工作节点
创建节点池
wdrip 提供了NodePool的概念,将一组具有相同的配置的节点组作为一个节点池统一管理。通过以下yaml可以创建具有N个节点的节点池。
1 | (base) ➜ kubectl --kubeconfig ~/.kube/config.txt apply -f - <<EOF |
通过kubectl --kubeconfig ~/.kube/config.txt get no -w
观测节点的创建。 节点的创建及加入过程大约需要等待90s。请等待
同样的方式可以创建多个具有不同配置的节点池。
扩容节点池
节点池的管理规划是完全面向终态的,但目前的实现还在早期阶段,您可以通过edit对应的NodePool的CRD的desiredCapacity的值来调整节点池的节点数量。
观测节点池的加入的过程参考上面方法。可以调大,也可以调小节点池的大小。
自动扩容节点池的功能Coming Soon。
1 | (base) ➜ kubectl --kubeconfig ~/.kube/config.txt edit nodepool default-nodepool |
集群高可用
一切都是面向终态的
构建高可用的k8s集群
单个Master的k8s集群不具备高可用,但已足够用作测试集群,经济适用。wdrip同样提供了灵活简单的方式将已有集群扩展成高可用集群。wdrip适用MasterSet
的CRD资源代表Master节点组。
以下命令扩展当前集群的Master副本数量到3个。
1 | (base) ➜ kubectl --kubeconfig ~/.kube/config.txt edit masterset |
wdrip需要2分钟左右的时间来初始化额外的2个Master节点,请等待。可以通过kubectl --kubeconfig ~/.kube/config.txt get no -w
观测Master节点的加入过程。
大规模集群场景
当你的集群规模进一步扩大后,3个Master已经不能满足你的需求了,那么你也可以通过MasterSet的replicas
方便快速的将Master副本数量调整成您喜欢的任意的数量,不过一般不建议超过7个。
1 | (base) ➜ kubectl --kubeconfig ~/.kube/config.txt -n kube-system edit masterset |
然后通过上面的命令观测Master节点数量的变化,同样需要等待大约2分钟时间。
缩减集群规模
一切都是面向终态的,当您的集群规模降低后,不在需要这么多的Master后,同样可以通过调整MasterSet的replicas
来调整Master的数量。可以调整到3个副本,也可以调整到1个Master副本。Master缩减的过程中需要保持多数quorum,因此缩减是逐步发生的。并且在系统未达到稳态以前,缩减也不会立即发生。
1 | (base) ➜ kubectl --kubeconfig ~/.kube/config.txt -n kube-system edit masterset |
然后通过上面的命令观测Master节点数量的变化。
集群灾难恢复
备份机制
wdrip定期备份您的集群的k8s的etcd数据,用于发生集群级别故障的时候快速恢复。默认每10分钟备份一次,保留最近4个备份副本。
您可用通过wdrip get -r backup
来查看当前的备份信息。
1 | (base) ➜ wdrip get -r backup -n kubernetes-id-001 |
恢复场景一:在原基础设施上恢复
如果k8s因未知因素管控完全故障,wdrip没有能够自行恢复,那么您可以手动触发命令执行恢复。仅需要一行命令即可
1 | # -n 指定恢复的目标集群(本体)。 |
等待大概2到3分钟后,通过kubectl get no 查看节点恢复情况。
恢复场景二:恢复到新的基础设施上
有些情况下,集群所对应的基础设施被损坏,人为的或者灾难性的,以至于无法在原有基础设施上恢复,那么我们可以通过新建一个具有相同规格的基础设施的集群,然后在本基础设施上恢复出原有集群的备份意识。
1 | # 创建具有相同规格的新的集群kubernetes-id-002,步骤参考【创建集群】Section |
节点修复机制
节点是运行负载的工具而已,无需像对待宠物那样对待节点,对于失效的节点,替换是成本最小的方案,替换之前我们会尝试重启来恢复。
自定义集群参数能力
规划中(节点、集群)
运维简化机制
节点故障后快速恢复,定位问题很难。 在wdrip这里,你可以直接删掉故障节点,让系统直接拉起一个新的节点副本即可。
附录
以上示例所涉及到的脚步均保存于wdrip项目中,使用前请git clone
到本地.
1 | (base) ➜ git clone https://github.com/aoxn/wdrip.git |