使用kubeadm部署一套高可用k8s集群 for Ubuntu
基于 ubuntu 使用 kubeadm 搭建集群, centos部署文档, 有疑问的地方可以看 官方文档
准备机器
我的机器详情如下, 配置至少为 4C4G
hostname | IP | 作用 |
---|---|---|
public | 10.0.0.3 | ingress、apiserver 负载均衡,nfs 存储 |
master1 | 10.0.0.11 | k8s master 节点 |
master2 | 10.0.0.12 | k8s master 节点 |
master3 | 10.0.0.13 | k8s master 节点 |
worker1 | 10.0.0.21 | k8s worker 节点 |
worker2 | 10.0.0.22 | k8s worker 节点 |
每台机器都做域名解析,或者绑定 hosts(可选但建议)
1 | vim /etc/hosts |
基础环境配置
基础环境是不管 master 还是 worker 都需要的环境
- 禁用 swap
- 确保每个节点上 MAC 地址和 product_uuid 的唯一性
sudo cat /sys/class/dmi/id/product_uuid
- 修改 hostname
- 允许 iptables 检查桥接流量
- 关闭防火墙
1 | sudo systemctl disable --now ufw |
安装 runtime
先决条件
1 | cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf |
安装
1 | # 安装依赖 |
配置
生成默认配置
1 | sudo mkdir -p /etc/containerd |
结合 runc 使用 systemd cgroup 驱动,在 /etc/containerd/config.toml
中设置
1 | [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] |
sudo systemctl restart containerd
crictl 配置
之前使用 docker 的时候,docker 给我们做了很多好用的工具,现在用了 containerd,管理容器我们用 cri 管理工具 crictl,创建配置文件
vim /etc/crictl.yaml
1 | runtime-endpoint: unix:///run/containerd/containerd.sock |
安装 Docker
1 | curl -fsSL get.docker.com | bash |
配置 Doker
1 | sudo mkdir /etc/docker |
安装 kubeadm、kubelet 和 kubectl
这一步需要科学上网, 不能科学上网的可以看看国内的源。
更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:
1 | sudo apt update |
下载 Google Cloud 公开签名秘钥:
1 | curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg |
添加 Kubernetes apt 仓库:
1 | echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list |
更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
1 | sudo apt update |
1 | apt-get update && apt-get install -y apt-transport-https |
准备高可用方案
创建集群
kubeadm init
在 init 之前先将镜像拉取到本地(可选步骤)
1 | kubeadm config images pull --kubernetes-version 1.21.10 |
在 k8s-master0 上执行
1 | sudo kubeadm init \ |
在 init 之前先将镜像拉取到本地(可选步骤)
1 | kubeadm config images pull --kubernetes-version 1.21.10 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers |
在 k8s-master0 上执行
1 | sudo kubeadm init \ |
也可以用
kubeadm config print init-defaults > init.yaml
生成 kubeadm 的配置,并用kubeadm init --config=init.yaml
来创建集群。
安装网络插件
1 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
1 | 待补充 |
常见问题
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 杂烩饭!
评论