如何快速修复重装系统后的 Kubernetes Master 节点

公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

9ddd51039808da8d4cb0fa82edef8ba5.png

最近碰到两次,因故障需要重装主机系统。其中一次 Etcd 只剩下一个节点,导致整个集群宕机半个小时才恢复。

本篇主要记录的是新系统 Ubuntu 20.04 初始化的过程,完成初始化之后采用优秀的集群安装工具 Kubekey 的 add nodes 命令,无需修改配置文件,一键就将节点重新加入了集群。

1. 恢复 Etcd

三个节点的 Etcd 集群,只有一个节点运行是无法工作的。因此,务必首先修复 Etcd 集群。这里比较幸运的是,系统重装之后 Ip 没有发生变化,否则需要重新生成证书,具体操作见另外一篇博文,《如何修复变更 IP 之后的 Kubernetes 集群》[1]

  • 在重装节点上,拷贝其他节点的 Etcd 二进制文件、配置文件、启动文件

scp etcd-node1:/usr/local/bin/etcd /usr/local/bin/
scp etcd-node1:/etc/etcd.env /etc/
scp etcd-node1:/etc/systemd/system/etcd.service /etc/systemd/system/
scp -r etcd-node1:/etc/ssl/etcd /etc/ssl/

通常,一个 Etcd 集群的所有节点启动方式一样,只需要完全拷贝另外一个节点的即可。

  • 在重装节点上,编辑配置文件,替换主机信息

vim /etc/etcd.env

这里需要替换的主要是 IP、NodeName 信息,将这些信息替换为当前节点的即可。因为这些会涉及到证书、Etcd WAL 数据中的节点信息数据的有效性。保持与之前一样,有助于快速恢复 Etcd 集群。

  • 启动 Etcd

systemctl start etcd
  • 设置开机启动 Etcd

systemctl enable etcd

三个节点的 Etcd 有两个能运行,集群就能正常工作。剩下的就是初始化节点,并将节点重新添加到集群。这里有些特殊的是集群主要用于持续集成,需要挂载一块额外的存储盘,安装指定的 Docker 版本。

2. 初始化数据盘并格式化

  • 安装 SSD 盘驱动

由于采用的是宝存企业级 SSD,还需要安装驱动。根据提供的文档,安装驱动有两种安装方式,一种是 deb 安装,另一种是编译安装。但是提供的 deb 版本没有匹配上 Ubuntu 20.04,而编译安装有奇怪报错无法解决。

可行的安装方式是,先编译生成 deb 驱动包,再安装 deb 驱动包。宝存的 SSD 下面会给出一个测速以供参考。

  • 查看磁盘

安装完成 SSD 驱动之后,操作系统就能识别到磁盘了。

lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 558.4G  0 disk 
├─sda1   8:1    0     1M  0 part 
└─sda2   8:2    0 558.4G  0 part /
dfa    252:0    0   2.9T  0 disk

其中的 /dev/dfa 就是额外的 SSD 数据盘。

  • 使用 parted 创建 GPT 分区表

由于硬盘超过了 2TB,fdisk 无法处理,需要使用 parted

parted /dev/dfa
mklabel gpt
  • 格式化分区为 btrfs

mkfs.btrfs /dev/dfa
  • 挂载分区到 /data 目录

mkdir /data
mount /dev/dfa /data
  • 修改 /etc/fstab 开启自动挂载磁盘

新增如下内容:

/dev/dfa  /data btrfs defaults  0  0

修改完成之后,一定要测试以下步骤,否则可能无法开机。

  1. 卸载 /data 挂载的设备

umount /data
  1. 自动挂载设备

mount -a
  1. 查看是否成功自动挂载

df -h
  • 使用 fio 测试随机读写速度

4K 随机写: (groupid=0, jobs=1)
  write: IOPS=78.2k, BW=306MiB/s (320MB/s)(3072MiB/10051msec)
4K 随机读: (groupid=0, jobs=1)
  read: IOPS=120k, BW=468MiB/s (490MB/s)(3072MiB/6571msec)

3. 设置软链接指向数据盘

  • Docker

mkdir /data/docker
ln -s /data/docker /var/lib/docker 
ls -al /var/lib/docker
  • Kubelet

mkdir /data/kubelet
ln -s /data/kubelet /var/lib/kubelet 
ls -al /var/lib/kubelet
  • Openebs

mkdir /data/openebs
ln -s /data/openebs /var/openebs 
ls -al /var/openebs
  • Longhorn

mkdir /data/longhorn
ln -s /data/longhorn /var/lib/longhorn 
ls -al /var/lib/longhorn

4. 安装指定版本 Docker

  • 卸载 Docker

apt-get autoremove docker docker-ce docker-engine  docker.io  containerd runc
  • 添加 Docker 源

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  • 更新系统源

apt-get update
  • 查看 Docker 版本

apt-cache madison docker-ce

 docker-ce | 5:20.10.22~3-0~ubuntu-focal | https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal/stable amd64 Packages
 docker-ce | 5:20.10.12~3-0~ubuntu-focal | https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal/stable amd64 Packages
  • 安装指定版本

apt-get install docker-ce=5:20.10.12~3-0~ubuntu-focal

至此,新系统初始化完成,剩下的交给 Kubekey,由于 IP 未变,可以直接使用安装时的配置文件一键添加 Master 节点到集群。

sudo ./kk add nodes -f config.yaml

参考资料

[1]

《如何修复变更 IP 之后的 Kubernetes 集群》: https://www.chenshaowen.com/blog/how-to-repair-the-kubernetes-cluster-after-changing-ip.html

本文转载自:「陈少文」,原文:https://url.hi-linux.com/ppWwr,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

f546fc242a632105cdc64dadbca02d38.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

2f570ca89292309416c85f862cf29a49.png

你可能还喜欢

点击下方图片即可阅读

3e499f163a0f0f3e647e98682888ac69.png

如何在 Kubernetes 中快速启用 Cgroup V2 支持

7b23d7268fd035bded942b7ac5ba4781.png
点击上方图片,『美团|饿了么』外卖红包天天免费领

b699e82cc2d64fe78e554761bb02c3aa.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值