本文描述4节点k8s 集群搭建过程。
服务器搭建可跳过本节
multipass 安装虚拟机
Multipass是一种简单的虚拟机工具。它不仅使启用虚拟机变得快速简易,还使管理那些虚拟机变得异常简单,因此可以立即开始针对云、边缘、物联网或任何一种类型的技术进行开发。
详细使用可参考官方文档
- macOS 安装 multipass
brew install multipass --cask
其他操作系统参考 官方安装方式。
- 启动虚拟机
multipass launch -n ubuntu-1 -c 2 -d 5G -m 3G -vvv release:lts
-
-c 指定2核cpu
-
-d 指定5G硬盘
-
-m 指定3G内存 特别注意: k8s 启动检查最低需要2G内存
同样方法启动其他三个虚拟机,最终得到ubuntu-1、ubuntu-2、ubuntu-3、ubuntu-4四个虚拟机
下面可以通过 multipass shell ubuntu-x进入虚拟机
- 更改软件源
修改 /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
sudo apt update
安装docker
以下内容参考 docker 文档
- 删除旧版本,若未安装过可以跳过
sudo apt-get remove docker docker-engine docker.io containerd runc
- 设置docker仓库源 首次使用docker 建议使用,方便后续更新等。
- 更新apt包索引并安装包以允许apt通过 HTTPS 使用存储库
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release \
software-properties-common
- 添加清华源Docker的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 添加清华源仓库源
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 安装 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
修改docker
使用 systemd 来管理容器的 cgroup
sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": [
"https://u56erzji.mirror.aliyuncs.com"
]
}
EOF
建议同时修改镜像仓库,以加速镜像拉取。
重新启动 Docker 并在启动时启用
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
安装K8S
- 允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
- 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
- 导入 gpg key
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
- 添加 Kubernetes apt 仓库
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
建议使用清华源代替
deb https://mirrors.tuna.tsinghua.edu.cn/kubernetes/apt kubernetes-xenial main
- 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。
使用Kubeadm 创建集群
首先了解 Kubeadm 操作
- kubeadm init 用于搭建控制平面节点
- kubeadm join 用于搭建工作节点并将其加入到集群中
- kubeadm upgrade 用于升级 Kubernetes 集群到新版本
- kubeadm config 如果你使用了 v1.7.x 或更低版本的 kubeadm 版本初始化你的集群,则使用 - kubeadm upgrade 来配置你的集群
- kubeadm token 用于管理 kubeadm join 使用的令牌
- kubeadm reset 用于恢复通过 kubeadm init 或者 kubeadm join 命令对节点进行的任何变更
- kubeadm certs 用于管理 Kubernetes 证书
- kubeadm kubeconfig 用于管理 kubeconfig 文件
- kubeadm version 用于打印 kubeadm 的版本信息
- kubeadm alpha 用于预览一组可用于收集社区反馈的特性
在执行前, 我们可以使用 kubeadm config images pull 预先拉取需要的镜像。避免后续操作耗时。
- 对机器先执行
kubeadm init phase --preflight用于前置检查,没有问题我们可以使用kubeadm init --dry-run来先了解下需要执行哪些操作。
- 在ububtu-1节点执行
kubeadm init --pod-network-cidr 10.244.0.0/16
当出现如下提示的时候就可以进行下一步操作
如果是非root用执行kubelet我们需要执行
mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 在另外三个节点执行join
kubeadm join 172.16.46.8:6443 --token qe23c9.qiwewj73vtu9qlej \
--discovery-token-ca-cert-hash sha256:e69bf29e914c6f8d6e6f1b423a932160493eceddceec789be860010aa4c6b685
稍作休息,执行kubectl get nodes
这个时候我们看到,节点都是NotReady 状态。
因为必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。 在安装网络之前,集群 DNS (CoreDNS) 将不会启动。
- 安装
flannel插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安装 Pod 网络后,您可以通过在 kubectl get pods --all-namespaces 输出中检查 CoreDNS Pod 是否 Running 来确认其是否正常运行。
再次执行 kubectl get nodes
到此我们一主三从的集群环境就搭建好了