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