安装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

系统环境准备

  • 关闭防火墙

    1
    2
    3
    4
    // 停止
    systemctl stop firewalld
    // 禁用开机自启
    systemctl disable firewalld
  • 关闭SELinux

    1
    2
    3
    4
    // 临时
    setenforce 0
    // 永久
    sed -i 's/enforcing/disabled/' /etc/selinux/config
  • 关闭swap

    1
    2
    3
    4
    // 临时
    swapoff -a
    // 永久, 注释掉swap那一行
    vim /etc/fstab
  • 配置文件

    1
    2
    3
    4
    5
    6
    7
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    overlay
    br_netfilter
    EOF

    modprobe overlay
    modprobe br_netfilter
  • 设置所需的 sysctl 参数,参数在重新启动后保持不变

    1
    2
    3
    4
    5
    6
    7
    8
    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
  • 设置每台电脑名称

    1
    2
    3
    4
    5
    6
    // master执行
    hostnamectl set-hostname master
    // node节点执行,如果多个子节点则每个节点按顺序递增
    hostnamectl set-hostname node1
    hostnamectl set-hostname node2
    ...
  • 设置hosts解析

    1
    2
    3
    4
    5
    6
    7
    vim /etc/hosts

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

安装docker

  • 安装docker
    安装docker参考链接
  • daemon.json
    daemon.json参考文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    方式一: 下载文件移动至/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安装包
    1
    2
    3
    // 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
    1
    2
    // 后面的文件名以当时下载最新为准
    rpm -ivh cri-dockerd-0.2.6-3.el7.x86_64.rpm
  • 修改配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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

  • 设置仓库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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

    1
    2
    3
    4
    5
    6
    7
    //默认安装仓库内最新版本,也可以指定版本
    // 建议使用第一个命令安装
    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节点执行)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //自己根据需要参考说明进行修改,不建议原样执行
    // 如果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节点执行)

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

    # 永久
    # 加入变量
    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    source ~/.bash_profile
    1
    2
    3
    4
    5
    //方式二
    # 意思是,初始化成功,要开始使用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节点执行)

    1
    2
    wget https://docs.projectcalico.org/manifests/calico.yaml
    kubectl apply -f calico.yaml
  • node节点加入master集群
    该命令会在 master init命令执行成功后获得

    1
    2
    3
    4
    5
    6
    // 该命令会在 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节点执行命令,查看集群下的所有节点,会输出节点列表和状态

1
kubectl get nodes