安装1.25.3最新版本k8s,基于docker容器

原因

  1. k8s在1.24版本之后删除了使用docker容器的兼容包,需要手动安装使用容器的接口
  2. k8s最新版本更新了很多的其他语法

基于环境(2022.10.25时最新版本)

  1. 服务器版本:CENTOS STREAM8(语法兼容centos7, stream 9,同样可以运行)
  2. docker版本: 20.10.21
  3. cri-docker版本: v0.2.6
  4. k8s版本: 1.25.3

系统环境准备

  • 关闭防火墙
// 停止
systemctl stop firewalld
// 禁用开机自启
systemctl disable firewalld
  • 关闭SELinux
// 临时
setenforce 0                                        
// 永久
sed -i 's/enforcing/disabled/' /etc/selinux/config  
  • 关闭swap
// 临时
swapoff -a     
// 永久, 注释掉swap那一行
vim /etc/fstab 
  • 配置文件
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter
  • 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

// 立即生效
sysctl --system
  • 设置每台电脑名称
// master执行
hostnamectl set-hostname master
// node节点执行,如果多个子节点则每个节点按顺序递增
hostnamectl set-hostname node1
hostnamectl set-hostname node2
...
  • 设置hosts解析
vim /etc/hosts

# 内容按照上方执行的实际数量增加
172.19.213.38 master
172.19.213.39 node1
172.19.213.40 node2
...

安装docker

方式一: 下载文件移动至/etc/docker/daemon.json
方式二: 将下方内容复制到/etc/docker/daemon.json内,文件不存在则进行创建
------------------------------------
{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com",
    "https://registry.docker-cn.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
-------------------------------------
  "exec-opts": ["native.cgroupdriver=systemd"] 修改docker配置,是为了docker与cri统一
 
 
 // 重新加载配置
 systemctl daemon-reload
 // 重新启动docker
 systemctl restart docker

安装cri-docker

  • 下载cri-docker安装包
// 2022.11.02最新版本为0.26.3
方式一: wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.6/cri-dockerd-0.2.6-3.el7.x86_64.rpm
方式二: 在本机下载,使用ftp上传到服务器(可以使用科学上网,速度会快一些),下载地址: https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.6/cri-dockerd-0.2.6-3.el7.x86_64.rpm
  • 安装 cri-docker
// 后面的文件名以当时下载最新为准
rpm -ivh cri-dockerd-0.2.6-3.el7.x86_64.rpm
  • 修改配置
vim /usr/lib/systemd/system/cri-docker.service

注释原
# ExecStart=xxxxxxxxxx
新增
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8 --container-runtime-endpoint fd://


//启动服务,设置开机自启
systemctl start cri-docker && systemctl enable cri-docker

安装kubernetes

  • 设置仓库
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
  • 安装kubernetes
//默认安装仓库内最新版本,也可以指定版本
// 建议使用第一个命令安装
yum install -y kubelet kubeadm kubectl
yum install -y kubelet-1.25.3-0 kubeadm-1.25.3-0 kubectl-1.25.3-0

// 启用 kubelet
systemctl enable kubelet
  • 创建主节点(仅在master节点执行)
//自己根据需要参考说明进行修改,不建议原样执行
// 如果init命令执行错误,需要每次支持命令进行重置
kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

// init命令
kubeadm init \
--apiserver-advertise-address=172.19.213.38 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.25.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all \
--cri-socket unix:///var/run/cri-dockerd.sock

// 说明
apiserver-advertise-address 一般是当前电脑ip,如果集群是内网,可以使用内网IP,其他建议是公网IP
image-repository 设置 镜像地址
kubernetes-version kubelet当前版本,如果不知道,可以使用  kubelet --version 进行获取
service-cidr 默认不修改
pod-network-cidr 默认不修改
ignore-preflight-errors 默认忽略所有错误,一般是有一个CPU的错误
cri-socket 指定使用容器类型

执行成功之后会得到 kubeadm join 开头的加入命令,请保存,是后续node节点加入集群的命令

  • 开始使用集群(master节点执行)
// 方式一
# 对于root用户, 直接添加变量即可开始使用集群(如果有多个master节点,每个都需要执行)
# 临时
export KUBECONFIG=/etc/kubernetes/admin.conf

# 永久
# 加入变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
//方式二
# 意思是,初始化成功,要开始使用K8S集群的话,需要执行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装 Pod 网络插件(CNI) (master节点执行)
wget https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml
  • node节点加入master集群
    该命令会在 master init命令执行成功后获得
// 该命令会在 master init命令执行成功后获得
// 最后要加上  --cri-socket=unix:///var/run/cri-dockerd.sock (指定使用容器类型)

kubeadm join 172.19.213.38:6443 --token v2zeh2.kmutrq7yo82fm6sv \
  --discovery-token-ca-cert-hash sha256:8e2819da8d969467717c37ac222ba9bb56656c549c3ac5b340e2d9c68cb13549 \
  --cri-socket=unix:///var/run/cri-dockerd.sock

每个node节点都需要执行该命令,等待执行成功

查看节点状态

在master节点执行命令,查看集群下的所有节点,会输出节点列表和状态

kubectl get nodes