云原生 · · By/蜜汁炒酸奶

使用 Kubeadm 安装 Kubernetes 集群

集群安装方式有三种 minikube, kubead, kind:

  • minikube 可以在单机环境下快速搭建可用的k8s集群,非常适合测试和本地开发。
  • 对于机器配置不够好的,可以自行尝试 kind 。
  • 对于机器性能不错的,建议用 kubeadm 。

这里介绍 基于 Debian 的发行版的 kubeadm 安装方式。其余系统的步骤大同小异,可直接看官网的安装教程

安装Kubeadm

1.准备工作

1.1 允许 iptables 检查桥接流量

该步骤是 Kubernetes 官方安装指南中的步骤,有些简介教程中无此步骤,请自行选择尝试。

br_netfilter 模块用于做网桥的网络转发。

确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter

为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。例如:

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

1.2 禁用 swap

kubernetes 在1.21.4 中仍需要关闭 swap 才能正常运行,虽然kubeadm init 时可以通过 --ignore-preflight-errors=Swap 忽略错误初始化成功,但最终运行时不关闭仍旧无法启动 kubernetes 相关服务。

  1. 临时关闭
sudo swapoff -a
  1. 永久关闭

编辑/etc/fstab,用# 注释里面涉及 swap 行

sudo vim /etc/fstab

永久关闭无效时,在启动脚本中添加临时关闭的语句,并赋予所有人执行权限即可。具体操作可见:
Linux关闭swap

1.2 安装运行时

自行安装Docker 或者 containerd

Docker安装官方地址

之前有写过一篇 Ubuntu 安装 Docker 的踩坑记录,各位有兴趣也可以看一下:
Ubuntu18安装Docker

2.基于 Debian 的发行版

  1. 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl
  1. 下载 Google Cloud 公开签名秘钥(可选)

由于国内环境问题,不是所有人都能下载下来,此步骤可以跳过。

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
  1. 添加 Kubernetes apt 仓库:

此处用的国内中科大的源,也可自行更换自己的

sudo cat <<EOF > /etc/apt/sources.list.d/kubernetes.list deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main EOF

若提示权限不足,可先创建 kubernetes.list,然后通过sudo chmod 777 kubernetes.list修改权限后再重试等方式实现。

  1. 添加源所需签名秘钥

该key不同时期可能值不相同,报错缺失时,更换对应缺失的即可。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B57C5C2836F4BEB sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071

或者执行如下写法的添加,两种写法效果相同:

# 有几个PUBKEY执行几个 gpg --keyserver keyserver.ubuntu.com --recv-keys 8B57C5C2836F4BEB gpg --export --armor 8B57C5C2836F4BEB | sudo apt-key add - # 第二个缺失的key gpg --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071 gpg --export --armor FEEA9169307EA071 | sudo apt-key add -

如果之后报如下类似错误,将上面语句中的key换成缺失的即可:

错误:1 http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial InRelease 由于没有公钥,无法验证下列签名: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB
  1. 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
    这里指定了版本1.21.4的版本,若不指定则默认安装最新版本。更多可用版本列表,通过 sudo apt-cache policy kubelet 查看
sudo apt-get update sudo apt-get install -y kubelet=1.21.4-00 kubeadm=1.21.4-00 kubectl=1.21.4-00 \ sudo apt-mark hold kubelet kubeadm kubectl

Kubeadm_kubelet_01.png

3. 初始化集群

3.1 kubeadm init

# --kubernetes-version 需要设置成自己环境的版本号, # --apiserver-advertise-address 需要设置成自己环境中的ip,ip地址可通过 ip a 或者 ifconfig -a 获得 sudo kubeadm init \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.21.4 \ --apiserver-advertise-address=192.168.49.1 \

Kubeadm_kubelet_02.png
若之后出现某些问题,可通过journalctl -xeu kubelet 查看kubelet日志。

3.2 copy kubeconfig(可选)

要使非 root 用户可以运行 kubectl,运行以下命令:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

如果不设置该配置,当使用kubectl get nodes 时,也可能会报如下错误:

connection to the server localhost:8080 was refused - did you specify the right host or port

3.3 允许master节点调度(可选)

通过设置污点来控制节点调度,如下可允许 master 调度:

kubectl taint nodes --all node-role.kubernetes.io/master-

若需禁用调度,可执行:

kubectl taint nodes k8s-master node-role.kubernetes.io/master=true:NoSchedule

默认情况下 master 上不会部署 pod ,当 pod 被调度上 master时会出现节点不允许部署 pod 的问题,作为测试环境可通过上面的方式允许部署。

卸载 kubeadm

有时需要安装其他版本的 kubeadm 等组件,可以通过如下方式卸载当前的

# 查找已安装的特定应用 dpkg --get-selections | grep kube # 卸载查询到的应用 sudo apt-get --purge remove kubeadm kubectl kubelet kubernetes-cni

Kubeadm_kubelet_dpkg_grep.png

评论已关闭

example
C
蜜汁炒酸奶

当前处于试运行期间,可能存在不稳定情况,敬请见谅。

欢迎点击此处反馈访问过程中出现的问题