kubeadm安装单集群k8s1.24.3版本

 参考地址:https://cdn.modb.pro/db/410049

                   https://blog.csdn.net/u012562943/article/details/124998093

视频:https://www.bilibili.com/video/BV1q54y1Z7L8/?p=4&spm_id_from=pageDriver&vd_source=9d96f7928edfce665cdee42b44679e20

1.1、系统配置
在安装之前,需要先做好如下准备。3 台 CentOS 7.9 主机如下:

cat /etc/hosts
192.168.96.151 k8s-master01
192.168.96.152 k8s-work01
192.168.96.153 k8s-work02

关闭防火墙

systemctl disable --now firewalld

时间同步

yum install chrony -y

vim /etc/chrony.conf

server time1.aliyun.com iburst

server time2.aliyun.com iburst

systemctl start chronyd

systemctl enable chronyd
 

 升级内核版本4.18以上(必须)!!!需要重启系统,注意

查看内核版本 uname -r

centos7.x :

yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y ; yum  --disablerepo="*"  --enablerepo="elrepo-kernel"  list  available -y ; yum  --enablerepo=elrepo-kernel  install  kernel-ml -y ; grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo) ; grubby --default-kernel  ; reboot

centos8.x :(注意会重启)

yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm -y ; yum  --disablerepo="*"  --enablerepo="elrepo-kernel"  list  available -y ; yum  --enablerepo=elrepo-kernel  install  kernel-ml -y ; grubby --default-kernel ; reboot

在各个主机上完成下面的系统配置。如果各个主机启用了防火墙策略,需要开放 Kubernetes 各个组件所需要的端口,可以查看 Ports and Protocols 中的内容, 开放相关端口或者关闭主机的防火墙。

禁用SELINUX:

setenforce 0
vi /etc/selinux/config
SELINUX=disabled


创建 /etc/modules-load.d/containerd.conf 配置文件:

cat << EOF > /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF


执行以下命令使配置生效:

modprobe overlay
modprobe br_netfilter


创建 /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
1.2、配置服务器支持开启ipvs的前提条件
由于 ipvs 已经加入到了内核的主干,所以为 kube-proxy 开启 ipvs 的前提需要加载以下的内核模块:

ip_vs

ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack

在各个服务器节点上执行以下脚本:

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF


chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack


上面脚本创建了的 /etc/sysconfig/modules/ipvs.modules 文件,保证在节点重启后能自动加载所需模块。 使用 lsmod | grep -e ip_vs -e nf_conntrack命令查看是否已经正确加载所需的内核模块。接下来还需要确保各个节点上已经安装了 ipset 软件包,为了便于查看 ipvs 的代理规则,最好安装一下管理工具 ipvsadm。

yum install -y ipset ipvsadm

如果不满足以上前提条件,则即使 kube-proxy 的配置开启了 ipvs 模式,也会退回到 iptables 模式。

1.3、部署容器运行时 Containerd
在各个服务器节点上安装容器运行时 Containerd。下载Containerd的二进制包:

wget https://github.com/containerd/containerd/releases/download/v1.6.4/cri-containerd-cni-1.6.4-linux-amd64.tar.gz

备用地址:wget https://d.frps.cn/file/kubernetes/containerd/cri-containerd-cni-1.6.4-linux-amd64.tar.gz


cri-containerd-cni-1.6.4-linux-amd64.tar.gz 压缩包中已经按照官方二进制部署推荐的目录结构布局好。 里面包含了 systemd 配置文件,containerd 以及 cni 的部署文件。 将解压缩到系统的根目录 / 中:

tar -zxvf cri-containerd-cni-1.6.4-linux-amd64.tar.gz -C /

以下为自动解压过程。。。。
etc/
etc/systemd/
etc/systemd/system/
etc/systemd/system/containerd.service
etc/crictl.yaml
etc/cni/
etc/cni/net.d/
etc/cni/net.d/10-containerd-net.conflist
usr/
usr/local/
usr/local/sbin/
usr/local/sbin/runc
usr/local/bin/
usr/local/bin/critest
usr/local/bin/containerd-shim
usr/local/bin/containerd-shim-runc-v1
usr/local/bin/ctd-decoder
usr/local/bin/containerd
usr/local/bin/containerd-shim-runc-v2
usr/local/bin/containerd-stress
usr/local/bin/ctr
usr/local/bin/crictl
......
opt/cni/
opt/cni/bin/
opt/cni/bin/bridge
......

注意经测试 cri-containerd-cni-1.6.4-linux-amd64.tar.gz 包中包含的 runc 在 CentOS 7 下的动态链接有问题,这里从 runc 的 github 上单独下载 runc,并替换上面安装的 containerd 中的 runc:

wget https://github.com/opencontainers/runc/releases/download/v1.1.2/runc.amd64

runc.amd64 改成同名替换/usr/local/sbin/runc

在给个执行权限

  chmod +x 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 = "k8s.gcr.io/pause:3.6"
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.7"


配置 containerd 开机启动,并启动 containerd

systemctl enable containerd --now
使用 crictl 测试一下,确保可以打印出版本信息并且没有错误信息输出:

crictl version
Version: 0.1.0
RuntimeName: containerd
RuntimeVersion: v1.6.4
RuntimeApiVersion: v1alpha2
二、使用 kubeadm 部署 Kubernetes


2.1、安装 kubeadm 和 kubelet、kubectl
下面在各节点安装 kubeadm 和 kubelet、kubectl:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum makecache fast

注意不带版本的时候是部署最新版,1.24以后需要部署垫片cri-containerd(推荐)和cri-dockerd,上面已经部署了。
yum install kubelet kubeadm kubectl


Kubernetes 1.8 开始要求关闭系统的 Swap,如果不关闭,默认配置下 kubelet 将无法启动。 关闭系统的 Swap 方法如下:

swapoff -a
修改 /etc/fstab 文件,注释掉 SWAP 的自动挂载,使用 free -m 确认 swap 已经关闭。swappiness 参数调整,修改 /etc/sysctl.d/99-kubernetes-cri.conf 添加下面一行:

vm.swappiness=0


执行 sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf 使修改生效。

2.2、使用 kubeadm init 初始化集群


在各节点开机启动 kubelet 服务:

systemctl enable kubelet.service
 

在开始初始化集群之前可以使用 kubeadm config images list 查看你要安装的版本信息。

 kubeadm config images list版本要和下面kubernetes-version一致。 

初始化(只在master01节点上执行)

kubeadm init \
--cri-socket unix:///var/run/containerd/containerd.sock \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.24.3 \
 --service-cidr=10.96.0.0/12 \
 --pod-network-cidr=10.244.0.0/16

初始化结束会有相同提示,输入

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

工作节点加入集群的命令

kubeadm join 192.168.88.63:6443 --token xrz138.e02xe2nruuxoioy6 \
--discovery-token-ca-cert-hash sha256:6eca7e639aff09b811d6a3995c594b781fc8cbea3d20d124fb0f65ec3c428e2e

--cri-socket unix:///var/run/containerd/containerd.sock

集群初始化如果遇到问题,可以使用 kubeadm reset  --cri-socket unix:///var/run/containerd/containerd.sock命令进行清理,重置初始化。

kubectl get no 查看节点的时候  ROLES列显示的是<none>

这是一个标签显示 可以修改成以下 #以worker01举例,在msater01节点上执行:

kubectl label no k8s-work01 kubernetes.io/role=k8s-work01

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值