当前位置: 首页 > backend >正文

【Kubernetes】ubuntu20.04通过kubeadm + Docker安装k8s

Kubernetes v1.24集群安装配置步骤总结

一、环境准备

(一)系统要求

  • 运行兼容deb/rpm的Linux操作系统(如Ubuntu或CentOS)的计算机,1台或多台。
  • 每台机器内存2GB以上,内存不足会限制应用运行。
  • 控制平面节点的计算机至少有2个CPU。
  • 集群中所有计算机之间有完全的网络连接,可使用公共网络或专用网络。

(二)主机环境配置(以Ubuntu 20.04为例)

  1. 系统安装
    • 下载Ubuntu 20.04.4镜像:https://mirrors.aliyun.com/ubuntu-releases/20.04.4/ubuntu-20.04.4-live-server-amd64.iso。
  2. 修改镜像源
    • 将默认镜像源http://cn.archive.ubuntu.com/ubuntu修改为清华大学镜像源https://mirrors.tuna.tsinghua.edu.cn/ubuntu
    • 修改方式
      • 安装虚拟机时直接修改镜像地址。
      • 已安装系统时,修改/etc/apt/sources.list文件,替换地址后执行sudo apt-get update(修改前先备份文件)。
  3. 安装Docker 20.10.17

二、安装cri-dockerd容器运行时

(一)方式一:二进制文件下载安装

  1. 查看内核信息
    cat /proc/version
    
  2. 下载对应版本
    • 根据内核信息从GitHub Release页面选择文件,例如:https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1.amd64.tgz。
    • 下载并解压:
    wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1.amd64.tgz
    tar -zxvf cri-dockerd-0.3.1.amd64.tgz -C /tmp
    sudo cp /tmp/cri-dockerd/cri-dockerd /usr/bin/
    

(二)方式二:通过Docker构建

  1. 下载源码并编译
    git clone https://github.com/Mirantis/cri-dockerd.git
    cd cri-dockerd
    git tag  # 查看可用tag
    git checkout v0.3.1  # 切换到目标版本
    
  2. 创建Dockerfile并构建
    FROM golang:1.18
    ADD ./ /go/src/cri-dockerd
    WORKDIR /go/src/cri-dockerd
    RUN go env -w GOPROXY=https://proxy.golang.com.cn,https://goproxy.cn,direct
    RUN go build -o cri-dockerd
    
    docker build -t cri-dockerd:latest .
    docker run --rm -d -it --name cri-dockerd cri-dockerd:latest bash
    docker cp cri-dockerd:/go/src/cri-dockerd/cri-dockerd ./
    sudo cp cri-dockerd /usr/bin/
    

(三)配置和启动cri-dockerd服务

  1. 获取systemd配置文件
    git clone https://github.com/Mirantis/cri-dockerd.git
    sudo cp cri-dockerd/packaging/systemd/* /etc/systemd/system/
    
  2. 修改服务配置
    • /etc/systemd/system/cri-docker.serviceExecStart字段中添加:
    --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
    
  3. 启动服务
    sudo systemctl daemon-reload
    sudo systemctl enable cri-docker
    sudo systemctl start cri-docker
    sudo systemctl status cri-docker  # 检查状态
    

三、安装kubeadm、kubelet、kubectl

  1. 更新包管理器并安装依赖
    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
  2. 下载gpg密钥
    curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
    
  3. 设置Kubernetes镜像源
    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
  4. 安装指定版本(示例:1.24.1)
    sudo apt-get update
    sudo apt-get install -y kubelet=1.24.1-00 kubeadm=1.24.1-00 kubectl=1.24.1-00
    
  5. 锁定版本(防止自动升级)
    sudo apt-mark hold kubelet kubeadm kubectl
    
  6. 检查kubelet状态
    systemctl status kubelet
    

四、主机环境调整

  1. 修改Docker的cgroup driver为systemd
    • 创建或修改/etc/docker/daemon.json,添加:
    {"exec-opts": ["native.cgroupdriver=systemd"]
    }
    
    • 重启Docker:
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
  2. 关闭防火墙
    sudo systemctl stop firewalld
    sudo systemctl disable firewalld
    
  3. 禁用SELinux
    sudo apt install selinux-utils
    getenforce  # 查看状态
    sudo setenforce 0  # 临时禁用
    
  4. 禁用swap
    free  # 查看交换区
    sudo swapoff -a  # 临时关闭
    # 修改/etc/fstab,注释掉swap相关行
    
  5. 修改主机名(以k8s-master1为例)
    • 添加IP映射到/etc/hosts
    127.0.1.1 k8s-master1
    
    • 修改系统主机名:
    sudo hostnamectl set-hostname k8s-master1
    hostname  # 查看主机名
    

五、初始化Master节点

  1. 生成默认配置文件
    kubeadm config print init-defaults > init.default.yaml
    
  2. 修改配置文件init.default.yaml
    • 添加或修改以下内容:
    localAPIEndpoint:advertiseAddress: 192.168.239.146  # 替换为实际IP
    nodeRegistration:criSocket: unix:///var/run/cri-dockerd.sockname: k8s-master1  # 替换为主机名
    imageRepository: registry.aliyuncs.com/google_containers  # 国内镜像源
    kubernetesVersion: 1.24.1
    networking:podSubnet: 10.244.0.0/16  # flannel默认网络段
    
  3. 拉取镜像
    sudo kubeadm config images pull --config=init.default.yaml
    
  4. 初始化集群
    sudo kubeadm init --config=init.default.yaml
    # 或通过参数初始化
    kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.24.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.239.146 --cri-socket unix:///var/run/cri-dockerd.sock
    
  5. 配置kubectl
    • 普通用户执行:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    • root用户执行:
    export KUBECONFIG=/etc/kubernetes/admin.conf
    source /etc/profile  # 立即生效
    

六、添加网络组件(以flannel为例)

  1. 下载或应用配置文件
    • 方法一:下载到本地后应用
    wget https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
    kubectl apply -f kube-flannel.yml
    
    • 方法二:直接应用远程文件(若域名可解析)
    kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
    
  2. 解决域名解析异常(若出现)
    • 查询raw.githubusercontent.com的IP地址(如185.199.108.133),添加到/etc/hosts
    185.199.108.133 raw.githubusercontent.com
    
  3. 开启kube-proxy的ipvs模式
    kubectl edit -n kube-system cm kube-proxy
    # 修改mode: "ipvs"
    kubectl rollout restart -n kube-system daemonset kube-proxy
    
  4. 查看集群状态
    kubectl get pod --all-namespaces
    kubectl get node
    kubectl get cs
    

七、Node节点初始化与加入集群

(一)环境安装(同Master节点)

  1. 安装Docker和cri-dockerd并启动服务。
  2. 安装kubeadm、kubelet、kubectl。

(二)节点环境修改(同Master节点)

  1. 修改Docker的cgroup driver。
  2. 关闭防火墙、禁用SELinux和swap。

(三)加入集群

  1. 在Master节点获取加入命令
    sudo kubeadm token create --print-join-command
    
  2. 在Node节点执行加入命令(附加cri-socket参数)
    kubeadm join 192.168.239.146:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:bac9b53b18b0bfcb3b923f970771e48d489ed7c77625c8fa3785608c6f191a79 --cri-socket unix:///var/run/cri-dockerd.sock
    

八、重置节点(可选)

sudo kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
sudo rm -rf /var/lib/kubelet /var/lib/dockershim /var/run/kubernetes /var/lib/cni /etc/cni/net.d $HOME/.kube/config
sudo ipvsadm --clear
sudo ifconfig cni0 down
sudo ip link delete cni0

https://github.com/0voice

http://www.xdnf.cn/news/9833.html

相关文章:

  • 进程间通信(共享内存)
  • Maven 仓库类型与镜像策略
  • aws instance store 的恢复
  • 【仿生系统】爱丽丝的“内在”或“灵魂”:概念与形式
  • C语言进阶--字符串+内存函数
  • R语言在生物群落数据统计分析与绘图中的实践应用
  • 【电拖自控】转速检测数字测速(脉冲计数测速)
  • SSH免密登录其它用户脚本
  • Hadoop MapReduce:大数据处理利器
  • 25 字符数组与字符串及多维数组详解:定义与初始化、访问与遍历、%s 格式符、内存剖析、编程实战
  • 什么是单片机?
  • Axure设计案例——科技感对比柱状图
  • 小白的进阶之路系列之五----人工智能从初步到精通pytorch张量
  • kibana解析Excel文件,生成mapping es导入Excel
  • Telegram平台分发其聊天机器人Grok
  • openfeignFeign 客户端禁用 SSL
  • 机顶盒CM311-5s纯手机免拆刷机,全网通,当贝桌面
  • 小表驱动大表更快吗,不是
  • RuoYi前后端分离框架集成手机短信验证码(一)之后端篇
  • 车载通信网络 --- 车载通信网络槪述
  • 计算机网络全维度解析:架构协议、关键设备、安全机制与新兴技术深度融合
  • Mysql中索引B+树、最左前缀匹配
  • LVS+KeepAlived
  • 【在线五子棋对战】一、项目简介 环境搭建
  • HTML实战:爱心图的实现
  • 本地Markdown开源知识库选型指南
  • 算法日记32:埃式筛、gcd和lcm、快速幂、乘法逆元
  • 基于esp32,控制IO1高低电平 和读取IO0按键的c程序
  • ByteBuddy入门:静态方法增强实战
  • 4.1.3 操作数据帧