![Kubernetes 1.20+ 在 Ubuntu 20.04 LTS 上的管理节点初始化插图 Kubernetes 1.20+ 在 Ubuntu 20.04 LTS 上的管理节点初始化插图](https://blog.eswlnk.com/wp-content/uploads/wpcy/9e1bb482a510468de4f724b3665fd008.jpg)
前言
想要部署自己的私有容器了,听说 Kubernetes(后文可能简称“K8S”) 大红大紫,当然要试试。然而,2021 年年初的 K8S 版本已经开始弃用 Docker。在了解了社区 这么做的理由 后,当然要跟一把风弃用 Docker 了(反正早晚会被逼迫迁移)。
环境:Hyper-V 下的 Ubuntu 20.04 LTS amd64; 6GB RAM
步骤
1. 前期准备
# 更新软件源与系统
# sudo su -
apt update
apt upgrade
# 安装容器运行时(containerd)
apt install containerd
# 初始化容器运行时
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
重要:我在这里遇到了一个坑,为了后续使 K8S 管理节点初始化正常,我们还需让 containerd 使用 systemd 的 cgroups,否则可能会初始化失败。这一点在网上很多 guide 中没有被提及。
来自 Wiki 的解释:
When systemd is chosen as the init system for a Linux distribution, the init process generates and consumes a root control group (
cgroup
) and acts as a cgroup manager. Systemd has a tight integration with cgroups and allocates a cgroup per systemd unit. It’s possible to configure your container runtime and the kubelet to usecgroupfs
. Usingcgroupfs
alongside systemd means that there will be two different cgroup managers.
2. 让 containerd 使用 systemd cgroups
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true
3. 安装 Kubernetes
# 增加 Google 的软件源
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add
apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
apt update
# 安装 K8S
apt install kubeadm kubelet kubectl
4. 安装前的准备
# 要使 K8S 正常初始化,我们必须做一些前期准备工作。这可能包括开启转发,允许 iptables 监测桥接流量,关闭 swap 等等。
# 配置网络
nano /etc/sysctl.conf
# 设置
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
# 保存
sysctl -p
# 加载内核模块(层叠网络与适用于桥接流量的 netfilter)
modprobe overlay
modprobe br_netfilter
5. 设置 IP 与主机名
# K8S 的节点须具备一个内部可以被解析的域名
nano /etc/hosts
# 加入一行:<IP 地址> <主机名 / 域名>
hostnamectl set-hostname <主机名>
6. 关闭 Swap
# 在 fstab 中找到 swap 字眼的条目注释掉
nano /etc/fstab
# 关闭 swap
swapoff -a
7. 初始化 K8S 管理节点
kubeadm config images pull
kubeadm init --pod-network-cidr=<IP 地址 / 前缀>
# IP 地址可以是 IPv6,默认前缀为 /64;IPv4 的前缀默认是 /24。
8. 如果没有报错的话,即代表管理节点成功初始化了。在使用前,我们可能还需要进一步准备。
# sudo su -
# 在 “控制平面 / 管理节点”,使用这个命令来创建集群目录:
mkdir -p $HOME/.kube
# 将配置文件拷贝到这个目录
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 设置权限
chown $(id -u):$(id -g) $HOME/.kube/config
# 部署 Pod 网络到集群中(案例中使用 weave-net)
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
📮评论