0. 前言
k8s从1.24版本开始不再直接支持docker,但可以自行调整相关配置,实现1.24版本后的k8s还能调用docker。其实docker自身也是调用containerd,与其k8s通过docker再调用containerd,不如k8s直接调用containerd,以减少性能损耗。
除了containerd,比较流行的容器运行时还有podman,但是podman官方安装文档要么用包管理器在线安装,要么用包管理器下载一堆依赖再编译安装,内网离线环境下安装可能会比较麻烦,而containerd的安装包是静态二进制文件,解压后就能直接使用,离线环境下相对方便一点。
本文将在内网离线环境下用二进制文件部署一个三节点集群+harbor镜像仓库。集群中部署了三个apiserver,并配置nginx反向代理,提升master的高可用性(如对高可用有进一步要求,可以再加个keepalive)。
相关软件信息:
名称版本说明containerdcri-containerd-cni-1.7.2-linux-amd64容器运行时harbor2.8.2容器镜像仓库etcd3.4.24键值对数据库kubernetes1.26.6容器编排系统nginx1.25.1负载均衡,反向代理apiserver服务器信息:
IP操作系统硬件配置Hostname说明192.168.3.31Debian 11.6 amd644C4Gk8s31nginx+etcd+master+node192.168.3.32Debian 11.6 amd644C4Gk8s32etcd+master+node192.168.3.33Debian 11.6 amd644C4Gk8s33etcd+master+node192.168.3.43Debian 11.6 amd644C4G无harbor,内网域名registry.atlas.cn1. 系统初始化
初始化部分需要三台k8s节点主机都执行, 根据实际情况修改参数。
- # 3.31服务器
- hostnamectl set-hostname k8s31
- # 3.32服务器
- hostnamectl set-hostname k8s32
- # 3.33服务器
- hostnamectl set-hostname k8s33
复制代码- 192.168.3.31 k8s31
- 192.168.3.32 k8s32
- 192.168.3.33 k8s33
复制代码- # 1. 安装chrony时间同步应用
- apt install -y chrony
- # 2. 添加内网的ntp服务器地址。如果在公网,可配置阿里云的ntp服务器地址:ntp.aliyun.com
- echo 'server 192.168.3.41 iburst' > /etc/chrony/sources.d/custom-ntp-server.sources
- # 3. 启动
- systemctl start chrony
- # 如果已经启动过了, 可以热加载配置: chronyc reload sources
复制代码
- 关闭swap。如果安装系统时创建了swap,则需要关闭。
- # 添加配置
- cat << EOF > /etc/modules-load.d/containerd.conf
- overlay
- br_netfilter
- EOF
- # 立即装载
- modprobe overlay
- modprobe br_netfilter
- # 检查装载。如果没有输出结果说明没有装载。
- lsmod | grep br_netfilter
复制代码- # 1. 添加配置文件
- cat << EOF > /etc/sysctl.d/k8s-sysctl.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
- vm.swappiness = 0
- EOF
- # 2. 配置生效
- sysctl -p /etc/sysctl.d/k8s-sysctl.conf
复制代码
- 启用ipvs。编写system配置文件,实现开机自动装载到内核。
[code]# 1. 安装依赖apt install -y ipset ipvsadm# 2. 新建文件并添加配置, 文件路径可任意tee /root/scripts/k8s.sh |