使用 Kubeadm 安装 Kubernetes 集群
集群安装方式有三种 minikube, kubead, kind:
- minikube 可以在单机环境下快速搭建可用的k8s集群,非常适合测试和本地开发。
- 对于机器配置不够好的,可以自行尝试 kind 。
- 对于机器性能不错的,建议用 kubeadm 。
这里介绍 基于 Debian 的发行版的 kubeadm 安装方式。其余系统的步骤大同小异,可直接看官网的安装教程
安装Kubeadm
1.准备工作
1.1 允许 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
2
3
4
5
6
7
8
9
10
该步骤是 Kubernetes 官方安装指南中的步骤,有些简介教程中无此步骤,请自行选择尝试。
br_netfilter
模块用于做网桥的网络转发。
确保 br_netfilter
模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter
来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter
。
为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl
配置中将 net.bridge.bridge-nf-call-iptables
设置为 1。
1.2 禁用 swap
kubernetes 在1.21.4 中仍需要关闭 swap 才能正常运行,虽然kubeadm init
时可以通过 --ignore-preflight-errors=Swap
忽略错误初始化成功,但最终运行时不关闭仍旧无法启动 kubernetes 相关服务。
- 临时关闭
$ sudo swapoff -a
- 永久关闭
编辑/etc/fstab,用# 注释里面涉及 swap 行
$ sudo vim /etc/fstab
永久关闭无效时,在启动脚本中添加临时关闭的语句,并赋予所有人执行权限即可。具体操作可见:
Linux关闭swap
1.2 安装运行时
自行安装Docker 或者 containerd
之前有写过一篇 Ubuntu 安装 Docker 的踩坑记录,各位有兴趣也可以看一下:
Ubuntu18安装Docker
当为Docker时,更新 Docker 的 cgroupdriver 为 systemd
$ sudo vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
$ systemctl daemon-reload
$ systemctl restart docker
2
3
4
5
6
7
8
2.基于 Debian 的发行版
- 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl
2
3
- 下载 阿里的 公开签名秘钥
$ sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
失效部分
2. 下载 Google Cloud 公开签名秘钥(可选)
由于国内环境问题,不是所有人都能下载下来,此步骤可以跳过。
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
- 添加 Kubernetes apt 仓库:
$ sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
2
3
失效部分
此处用的国内中科大的源,也可自行更换自己的
$ sudo cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
EOF
2
3
若提示权限不足,可先创建 kubernetes.list,然后通过sudo chmod 777 kubernetes.list
修改权限后再重试等方式实现。
更推荐通过如下方式(官方命令,已替换为中科大的源,此种不会提示权限问题):
$ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
4. 添加源所需签名秘钥
该key不同时期可能值不相同,报错缺失时,更换对应缺失的即可。
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B57C5C2836F4BEB
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FEEA9169307EA071
2
3
或者执行如下写法的添加,两种写法效果相同:
# 有几个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 -
2
3
4
5
6
7
如果之后报如下类似错误,将上面语句中的key换成缺失的即可:
错误:1 http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial InRelease
由于没有公钥,无法验证下列签名: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB
2
- 更新 apt 包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:
$ sudo apt-get update
$ sudo apt-get install -y kubelet=1.22.6-00 kubeadm=1.22.6-00 kubectl=1.22.6-00
$ sudo apt-mark hold kubelet kubeadm kubectl
2
3
4
5
这里指定了版本1.21.4的版本(更新为 1.22.6),若不指定则默认安装最新版本。更多可用版本列表,通过 sudo apt-cache policy kubelet
查看
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.22.6 \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-advertise-address=192.168.0.132
2
3
4
5
6
7
8
9
若之后出现某些问题,可通过journalctl -xeu kubelet
查看kubelet日志。
成功之后提示类似如下信息:
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.0.132:6443 --token d3wgb2.qscs1wq0wfb14mfm \
--discovery-token-ca-cert-hash sha256:d2d04a1ea07f9daec945bfdc9fe85ce7cc342e4f8d20e18d4c5d4d9bc2fbb177
2
3
4
如果需要在启动过程中启用containerd,请在“kubeadm init”过程中设置cri-socket
参数:
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.22.6 \
--pod-network-cidr=192.168.0.0/16 \
--cri-socket /run/containerd/containerd.sock \
--apiserver-advertise-address=192.168.0.132
2
3
4
5
6
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
2
3
如果不设置该配置,当使用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
2
3
4
5
清理必要的集群文件,便于重新初始化
$ kubeadm reset -f
$ sudo rm -rf ~/.kube/
$ sudo rm -rf /etc/kubernetes/
2
3
除特别注明外,本站所有文章均为 windcoder 原创,转载请注明出处来自: shiyong-kubeadm-anzhuang-kubernetes-jiqun

暂无数据