安装前准备
系统配置
Master, Worker 1, Worker 2 节点配置
创建 /etc/modules-load.d/containerd.conf
配置文件,确保在系统启动时自动加载所需的内核模块,以满足容器运行时的要求:
cat << EOF > /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
执行以下命令使配置生效:
modprobe overlay
modprobe br_netfilter
CNI 配置
创建/etc/sysctl.d/99-kubernetes-cri.conf
配置文件:
cat << EOF > /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
user.max_user_namespaces=28633
EOF
执行以下命令使配置生效:
sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf
在文件名/etc/sysctl.d/99-kubernetes-cri.conf
中,“99”
代表文件的优先级或顺序。sysctl是Linux内核参数的配置工具,它可以通过修改/proc/sys/
目录下的文件来设置内核参数。
在/etc/sysctl.d/
目录中,可以放置一系列的配置文件,以便在系统启动时自动加载这些参数。这些配置文件按照文件名的字母顺序逐个加载。数字前缀用于指定加载的顺序,较小的数字表示较高的优先级。
开启ipvs
由于ipvs已经加入到了内核的主干,所以为kube-proxy开启ipvs的前提需要加载以下的内核模块:
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
创建/etc/modules-load.d/ipvs.conf
文件,保证在节点重启后能自动加载所需模块:
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
EOF
执行以下命令使配置立即生效:
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
使用lsmod | grep -e ip_vs -e nf_conntrack
命令查看是否已经正确加载所需的内核模块。
接下来还需要确保各个节点上已经安装了ipset软件包,为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm。
apt install -y ipset ipvsadm
NFS 共享存储配置
- 在 Master 上安装 NFS 服务器
- 在 Worker 1 / Worker 2 上挂载 NFS 共享目录 如果使用的云服务, 建议使用云平台自带的 nfs, 价格非常便宜而且可靠
[Master] 安装 / 配置 NFS 服务器
在主节点 Master
上安装 nfs-server
sudo apt install nfs-kernel-server
您可以运行cat命令sudo cat /proc/fs/nfsd/versions
来验证正在运行的NFS版本。
root@master:~# sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
[Master] NFS 配置共享目录
创建共享目录 /nfs
mkdir -p /nfs
chmod 777 /nfs
打开/etc/exports
文件,输入以下内容来定义NFS共享。
/nfs *(rw,sync,no_subtree_check)
授权其他节点访问:在终端中输入以下命令以重新加载NFS配置文件。
sudo exportfs -a
[Master] 启动NFS服务器
在终端中输入以下命令以启动NFS服务。
sudo systemctl start nfs-kernel-server
[Worker 1] 验证安装结果
在 Worker 1
节点上验证
- 安装依赖
sudo apt install nfs-common
- 挂载目录
# 192.168.88.101 为 Master 的 ip
mkdir -p /mnt/nfs
mount 192.168.88.101:/nfs /mnt/nfs
- 在
Worker 1
共享目录下创建文件进行验证
root@worker1:/mnt/nfs# echo 'hello, nfs!' > test.txt
- 检查 Master 目录数据
root@master:~# cd /nfs
root@master:/nfs# ls -l
total 4
-rw-r--r-- 1 nobody nogroup 12 May 10 15:11 test.txt
root@master:/nfs# cat test.txt
hello, nfs!
验证成功!!
[Worker 1, Worker 2] 挂载 NFS 并配置开机启动
在 Worker 1 / Worker 2
上分别挂载
- 安装依赖
sudo apt install nfs-common
- 您需要编辑
/etc/fstab
文件并添加一行类似于以下内容的条目:
192.168.88.101:/nfs /mnt/nfs nfs default 0 0
- 重启
Worker 1 / Worker 2
并进行验证
Last login: Wed May 10 15:32:10 2023 from 192.168.88.1
root@worker1:~# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 393M 1.1M 392M 1% /run
/dev/sda3 47G 6.7G 38G 16% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 2.0G 134M 1.7G 8% /boot
192.168.88.101:/nfs 47G 6.8G 38G 16% /mnt/nfs
tmpfs 393M 4.0K 393M 1% /run/user/0
root@worker1:~# cd /mnt/nfs/
root@worker1:/mnt/nfs# ls -l
total 4
-rw-r--r-- 1 nobody nogroup 12 May 10 15:11 test.txt
root@worker1:/mnt/nfs# cat test.txt
hello, nfs!
root@worker1:/mnt/nfs#
禁用 Swap 交换分区
Master, Worker 1, Worker 2 节点均要执行
编辑 /etc/fstab
, 在 /swap.img
一行前面加 #
或者删除此行
# /swap.img none swap sw 0 0
swappiness参数调整,修改/etc/sysctl.d/99-kubernetes-cri.conf
添加下面一行:
swappiness参数调整,修改/etc/sysctl.d/99-kubernetes-cri.conf添加下面一行:
vm.swappiness=0
执行sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf
使修改生效。
重启
安装 helm
Master 节点安装
版本对比
版本对比: https://helm.sh/zh/docs/topics/version_skew/ (opens in a new tab)
安装 helm v3.12.0
see https://helm.sh/zh/docs/intro/install/ (opens in a new tab)
添加仓库
wget https://get.helm.sh/helm-v3.12.0-linux-amd64.tar.gz
tar -zxvf helm-v3.12.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/
执行helm list
确认没有错误输出。
安装 Containerd
Master, Worker 1, Worker 2 节点均要安装
下载最新版本的 Containerd, 截止到目前最新版本是 1.7.2
下载Containerd的二进制包, 需要注意cri-containerd-(cni-)-VERSION-OS-ARCH.tar.gz发行包自containerd 1.6版本起已经被弃用,
在某些 Linux 发行版上无法正常工作,并将在containerd 2.0版本中移除,这里下载containerd-x.tar.gz的发行包,后边在单独下载安装runc和CNI plugins:
wget https://github.com/containerd/containerd/releases/download/v1.7.2/containerd-1.7.2-linux-amd64.tar.gz
> wget
将其解压缩到/usr/local
下:
tar Cxzvf /usr/local containerd-1.7.2-linux-amd64.tar.gz
bin/
bin/containerd-shim-runc-v1
bin/containerd-shim-runc-v2
bin/containerd-stress
bin/containerd
bin/containerd-shim
bin/ctr
接下来从runc的github上单独下载安装runc,该二进制文件是静态构建的,并且应该适用于任何Linux发行版。
wget https://github.com/opencontainers/runc/releases/download/v1.1.7/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin/runc
接下来生成containerd的配置文件:
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
根据文档Container runtimes中的内容,对于使用systemd作为init system的Linux的发行版, 使用systemd作为容器的cgroup driver可以确保服务器节点在资源紧张的情况更加稳定,因此这里配置各个节点上containerd的cgroup driver为systemd。
修改前面生成的配置文件/etc/containerd/config.toml
:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
再修改/etc/containerd/config.toml
中的
[plugins."io.containerd.grpc.v1.cri"]
...
# sandbox_image = "registry.k8s.io/pause:3.8"
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
如果你的containerd版本和操作系统和本文的一致, 也可以直接下载此文件, https://cdn.jansora.com/files/uPic/2023/09/21/config.toml (opens in a new tab)
为了通过systemd启动containerd,请还需要从
https://raw.githubusercontent.com/containerd/containerd/main/containerd.service (opens in a new tab)
下载containerd.service
单元文件,并将其放置在 /etc/systemd/system/containerd.service
中。 配置containerd开机启动,并启动containerd,执行以下命令:
systemctl daemon-reload
systemctl enable containerd --now
下载安装crictl工具:
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.27.0/crictl-v1.27.0-linux-amd64.tar.gz
tar -zxvf crictl-v1.27.0-linux-amd64.tar.gz
install -m 755 crictl /usr/local/bin/crictl
使用crictl测试一下,确保可以打印出版本信息并且没有错误信息输出:
crictl --runtime-endpoint=unix:///run/containerd/containerd.sock version
Version: 0.1.0
RuntimeName: containerd
RuntimeVersion: v1.7.2
RuntimeApiVersion: v1
安装 kubeadm,kubectl,kubelet 1.28.2
Master, Worker 1, Worker 2 节点均要安装
加入阿里云镜像源, 并安装
apt-get update
apt-get install -y apt-transport-https ca-certificates curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
安装 kubeadm,kubectl,kubelet 软件包 1.28.2 版本。
apt-get update
apt install kubeadm=1.28.2-00 kubelet=1.28.2-00 kubectl=1.28.2-00
apt-mark hold kubelet kubeadm kubectl
上面的命令在安装kubeadm, kubectl, kubelet 时,会自动安装依赖项conntrack, cri-tools, ebtables, kubernetes-cni, soca
运行kubelet --help可以看到原来kubelet的绝大多数命令行flag参数都被DEPRECATED了,官方推荐我们使用--config指定配置文件,并在配置文件中指定原来这些flag所配置的内容。具体内容可以查看这里Set Kubelet parameters via a config file。最初Kubernetes这么做是为了支持动态Kubelet配置(Dynamic Kubelet Configuration),但动态Kubelet配置特性从k8s 1.22中已弃用,并在1.24中被移除。如果需要调整集群汇总所有节点kubelet的配置,还是推荐使用ansible等工具将配置分发到各个节点。