kubeadm 搭建k8s 1.28.2版本集群

kubeadm 搭建k8s 1.28.2版本集群

1、kubuadm介绍:

kubeadm 是官方社区推出的一个用于快速部署kubernetes 集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:

  • 创建一个Master 节点kubeadm init
  • 将Node 节点加入到当前集群中$ kubeadm join <Master 节点的IP 和端口>

2、安装要求:

在开始之前,部署Kubernetes 集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统CentOS7.x-86_x64

    在这里插入图片描述

  • 硬件配置:2GB 或更多RAM,2 个CPU 或更多CPU,硬盘30GB 或更多

    CPU:2核

    内存:2G以上

    磁盘:30G以上

  • 集群中所有机器之间网络互通

  • 可以访问外网,需要拉取镜像

  • 禁止swap 分区

3、环境初始化:(每个节点)

1)使用主机名解析:

# 每个节点都添加master、worker
echo '''
192.168.80.10 node01
192.168.80.20 node02
192.168.80.30 node03
''' >> /etc/hosts

2)关闭防火墙,selinux,swap分区、时间同步

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
# 关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 时间同步:
yum install ntpdate -y
ntpdate ntp.ntsc.ac.cn
# 或
# crontab -l
0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com

3)添加网桥过滤和地址转发功能:

#将桥接的IPv4,IPV6流量传递到iptables的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0
EOF

# 重新加载配置
sysctl -p
# 加载网桥过滤模块
modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter

4)配置ipvs功能

在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块。

yum install ipset ipvsadmin -y

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_ipv4
EOF

# 3.为脚本添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.执行脚本文件
bash /etc/sysconfig/modules/ipvs.modules
# 5.查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

在这里插入图片描述

5)搭建国内yum源

cat > /home/soft/yum.sh <<EOF
#!/bin/bash
# 备份初始源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

# 下载yum源
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 更新缓存
yum clean all
yum makecache
EOF

# 使用脚本:
bash /home/soft/yum.sh

4、部署docker

1)编写脚本进行安装:

cat > /home/soft/docker_install.sh <<EOF
#!/bin/bash 
#file:docker_install.sh 
echo "--检查内核版本......--"
yum -y install bc &> /dev/null
kenel=`uname -r`
ken=`echo ${kenel:0:4}`
if [ $(echo "${ken} >= 3.10" | bc) = 1 ]
then
  echo "--检查Docker......!--"
  docker -v &> /dev/null
  a=`echo $?`
  while [ $a -ne 0 ]; do
    echo "--安装docker环境...--"
    echo "--安装基础依赖...--"
    yum install yum-utils device-mapper-persistent-data lvm2 -y &> /dev/null
    echo "--安装docker-ce.repo--"
    cd /etc/yum.repo.d
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo &> /dev/null
    echo "--安装docker环境...--"
    yum install docker-ce -y
    docker -v &> /dev/null
    a=`echo $?`
  done
  echo "--安装完成!启动Docker--"
  systemctl start docker
  systemctl enable docker
  echo "----网络优化----"
  sed -i '$a net.ipv4.ip_forward=1' /etc/sysctl.conf
  sysctl -p
  systemctl restart network
  systemctl restart docker
  docker version
else
  echo "--内核版本太低,请您升级内核版本!--"
fi
EOF

# 使用脚本:
bash /home/soft/docker_install.sh

2)配置镜像加速

vi /home/soft/docker_net.sh
#!/bin/bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://mirror.ccs.tencentyun.com",
        "https://nolrm62o.mirror.aliyuncs.com",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn"
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

# 使用脚本:
bash /home/soft/docker_net.sh

5、部署cri-dockerd 组件

**Kubernetes1.24 之后, ** 在k8s中使用docker,除了安装docker 以外,还需要安装cri-dockerd 组件; 不然就使用Containerd。

在这里插入图片描述

1)项目下载地址:

cri-docker:https://github.com/Mirantis/cri-dockerd

在这里插入图片描述
在这里插入图片描述

手动下载再上传包,或者直接下载:

# 下载
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14.amd64.tgz
tar -xf cri-dockerd-0.3.14.amd64.tgz
cp cri-dockerd/cri-dockerd /usr/bin/
chmod +x /usr/bin/cri-dockerd

# 配置启动文件
cat <<"EOF" > /usr/lib/systemd/system/cri-dockerd.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify

ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

# 生成socket 文件

cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=root

[Install]
WantedBy=sockets.target

EOF

# 启动CRI-DOCKER
systemctl daemon-reload
systemctl start cri-docker
systemctl enable cri-docker
systemctl is-active cri-docker

6、安装k8s组件(所有节点,master、worker)

  • 下面使用阿里云镜像

Kubernetes是一个开源系统,用于容器化应用的自动部署、扩缩和管理。它将构成应用的容器按逻辑单位进行分组以便于管理和发现。

1)新版 kubernetes :

新版 kubernetes 源使用方法和之前有一定区别,请求按照如下配置方法配置使用。

其中新版 kubernetes 源按照安装版本区分不同仓库,该文档示例为配置 1.28 版本,如需其他版本请在对应位置字符串替换即可。

(比如需要安装 1.29 版本,则需要将如下配置中的 v1.28 替换成 v1.29)

(目前该源支持 v1.24 - v1.29 版本,后续版本会持续更新)

# Debian / Ubuntu
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
# CentOS / RHEL / Fedora
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF

yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

ps: 由于官网未开放同步方式, 可能会有索引gpg检查失败的情况, 这时请用 yum install -y --nogpgcheck kubelet kubeadm kubectl 安装

2)旧版配置方法:

目前由于kubernetes官方变更了仓库的存储路径以及使用方式,旧版 kubernetes 源只更新到 1.28 部分版本,后续更新版本请使用 新源配置方法 进行配置。

  • Debian / Ubuntu
    apt-get update && apt-get install -y apt-transport-https
    curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
    EOF
    apt-get update
    apt-get install -y kubelet kubeadm kubectl
    
  • CentOS / RHEL / Fedora
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
    yum install -y kubelet kubeadm kubectl
    systemctl enable kubelet && systemctl start kubelet
    

3)指定版本安装:

由于版本更新频繁,可以指定版本号部署:

# 查看所有的可用版本
$ yum list  kubeadm  kubelet kubectl --showduplicates | sort -r

#在所有节点安装
$ yum install -y kubelet-1.28.2-0 kubeadm-1.28.2-0 kubectl-1.28.2-0

$ systemctl enable kubelet && systemctl start kubelet

4)准备集群镜像

在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看。

kubeadm config images list

images=$(kubeadm config images list |awk -F'/' '{print $NF}')
for imageName in ${images[@]};do
	docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
	docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
	docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
done

7、初始化集群:(以下操作只在master节点)

下面的操作只需要在master节点上执行即可

kubeadm init \
	--apiserver-advertise-address=192.168.80.10 \
	--image-repository registry.aliyuncs.com/google_containers \
	--kubernetes-version=1.28.2 \
	--service-cidr=10.96.0.0/12 \
	--pod-network-cidr=10.244.0.0/16 \
	--cri-socket=unix:///var/run/cri-dockerd.sock
	
# 创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 在master上查看节点信息
kubectl get nodes
NAME    STATUS   ROLES     AGE   VERSION
master  NotReady  master   6m    v1.28.2
node1   NotReady   <none>  22s   v1.28.2
node2   NotReady   <none>  19s   v1.28.2

8、worker几点加入master节点:

注意:要配置–cri-socket

kubeadm join 192.168.80.10:6443 --token scpmy7.b041n8xajn3oumt8 \
> --discovery-token-ca-cert-hash sha256:92ad0ffcbd4db9cec5f1f6f2bee80067290ca627f5667c4656a84ace9f8aa9b7 --cri-socket=unix:///var/run/cri-dockerd.sock

9、k8s命令tab补全(以下操作只在master节点)

kubectl 依赖于 bash-completion 来实现命令补全。

# 安装 bash-completion 包
yum install -y bash-completion

# 配置 bash-completion
source /usr/share/bash-completion/bash_completion
echo 'source <(kubectl completion bash)' >>/root/.bashrc

10、安装网络插件:(以下操作只在master节点)

由于外网不好访问,如果出现无法访问的情况,可以直接用下面的 记得文件名是kube-flannel.yml,位置:/root/kube-flannel.yml内容:

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

如果下不下来,可以先下载到本地再上传到服务器。

使用配置文件启动fannel。

kubectl apply -f kube-flannel.yml

# 等待它安装完毕 发现已经是 集群的状态已经是Ready
kubectl get nodes

在这里插入图片描述

上一篇:闪电麦昆 语音控制齿轮行进轨迹,ESP32搭配语音控制板,串口通信,附视频演示地址


下一篇:java项目之科研工作量管理系统的设计与实现源码(springboot+vue+mysql)