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

【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

相关文章:

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

Kubernetes v1.24集群安装配置步骤总结 一、环境准备 (一)系统要求 运行兼容deb/rpm的Linux操作系统(如Ubuntu或CentOS)的计算机,1台或多台。每台机器内存2GB以上,内存不足会限制应用运行。控制平面节点…...

前端开源JavaScrip库

以下内容仍在持续完善中,如有遗漏或需要补充之处,欢迎在评论区指出。感谢支持,如果觉得有帮助,欢迎点赞鼓励。感谢支持 JavaScript 框架Vue.jsVue.js - 渐进式 JavaScript 框架 | Vue.jsReactReactAngularHome • AngularjQueryj…...

【Linux我做主】进度条小程序深度解析

Linux下C语言进度条程序深度解析 进度条小程序GitHub地址 前言前置知识回车换行(CR/LF)的深度解析历史渊源与技术规范在进度条/倒计时中的应用 缓冲区机制的全面剖析缓冲区引入缓冲类型对比进度条开发中的关键控制 进度条实现以小见大——倒计时倒计时最…...

MySQL 使用全局锁会导致的问题?

MySQL 使用全局锁会导致以下核心问题: ‌业务停摆与主从延迟‌ ‌主库备份‌:备份期间所有更新操作被阻塞,业务系统陷入等待状态‌从库备份‌:无法执行主库同步的 binlog,导致主从复制延迟加剧 ‌并发性能急剧下降‌ …...

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew,这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew,请先安装它。安装 Homebrew 后,安装 OpenSSL 只需要一条命令。 步骤 1:安装 Home…...

在Java对象转JSON字符串时不显示无值参数

在Java中,可以通过在展示数据的逻辑中添加判断条件来实现这一需求。以下是一些常见的场景和实现方法: 场景一:在Java对象转JSON字符串时 使用Gson库 代码实现 首先引入Gson依赖,如果使用Maven构建项目,在pom.xml文件中…...

在 Ubuntu 服务器上 下载 Clash 文件使用代理

文件Clash.Verge_1.3.8_x64_portable.zip 在 Ubuntu 服务器上不能使用这个Clash 文件**,我们需要的是 Clash.Meta 而不是 Clash Verge GUI 客户端 也就是 Clash Verge GUI 客户端的 Windows 版本,是给 Windows 桌面环境用的图形界面,不适用…...

微信小程序一次性订阅封装

封装代码如下&#xff1a; export async function subscribeMessage(tmplIds: string[]): Promise<ISubscribeMessagePromise> {// 模板ID// 1、获取设置状态const settings (await wx.getSetting({ withSubscriptions: true })).subscriptionsSetting || {}console.log…...

Spring AI MCP的几个小问题

测试时间&#xff1a;2025/05/29 测试版本&#xff1a;Spring AI 1.0.0 问题1&#xff1a;由于启动顺序问题&#xff0c;MCP的服务器端和客户端不能在一个应用里&#xff0c;不然客户端连不上服务器会报错退出。(实际项目应该没有这样用的) 问题2&#xff1a;现在如果配置了…...

安全帽检测算法AI智能分析网关V4守护工地/矿山/工厂等多场景作业安全

一、方案概述​ 在工业生产与建筑施工场景中&#xff0c;安全帽是保障人员安全的重要装备。但传统人工巡检效率低、易疏漏&#xff0c;难以满足现代安全管理需求。AI智能分析网关V4安全帽检测方案&#xff0c;借助人工智能与计算机视觉技术&#xff0c;实现作业现场安全帽佩戴…...

Pycharm的简单介绍

目录 1. 起源与发展历史 2. 定位与核心作用 3. 主要版本 4. 应用场景 5. 核心功能与优势 6. 优缺点分析 7. 使用入门指南 8. 适用人群 9. 替代工具对比 总结 1. 起源与发展历史 公司背景&#xff1a;由捷克公司 JetBrains&#xff08;成立于2000年&#xff09;开发&a…...

重新安装解决mac vscode点击不能跳转问题

依次执行以下过程 删除vscode程序 删除vscode的缓存文件夹(xxx表示你的用户名) /Users/xxx/Library/Application Support/Code 重新安装vscode 这时候你会反向可以跳转项目内的import 文件以及自定义函数。但是import安装的包还不能点击跳转 配置python环境 如果你电脑没有安…...

Go语言中flag包的用法详解

在Go语言编程中&#xff0c;flag包是标准库中用于解析命令行参数的强大工具。它提供了一种简单且灵活的方式来定义和处理命令行标志&#xff08;flag&#xff09;&#xff0c;使得程序能够从命令行接收用户输入的参数。本文将详细介绍flag包的用法&#xff0c;包括基本概念、常…...

Python自动化之selenium语句——打开、关闭浏览器和网页

目录 一、打开谷歌浏览器 1.双击桌面的Pycharm工具 2.新建Python文件&#xff0c;输入文件名 3.新建的Python文件如下 4.安装selenium库 5.导入包 二、打开网页、关闭网页、关闭浏览器 1.导入增加一个时间包 2.使用函数打包之前写的浏览器的配置 3.调用 4.打开百度网…...

【数据结构】--二叉树--堆(上)

一、树的概念和结构 概念&#xff1a; 树是一种非线性的数据结构&#xff0c;他是由n(n>0)个有限结点组成一个具有层次关系的集合。其叫做树&#xff0c;是因为他倒过来看就和一棵树差不多&#xff0c;其实际上是根在上&#xff0c;树枝在下的。 树的特点&#xff1a; 1…...

Rust 学习笔记:使用迭代器改进 minigrep

Rust 学习笔记&#xff1a;使用迭代器改进 minigrep Rust 学习笔记&#xff1a;使用迭代器改进 minigrep不使用 clone&#xff0c;而使用迭代器使用迭代器适配器使代码更清晰在循环或迭代器之间进行选择 Rust 学习笔记&#xff1a;使用迭代器改进 minigrep 前情提要&#xff1…...

多线程(5)——单例模式,阻塞队列

目录 单例模式饿汉模式懒汉模式—单线程版懒汉模式—多线程版&#xff08;经典面试题&#xff09;懒汉模式—多线程版&#xff08;改进&#xff09; 阻塞队列阻塞队列是什么生产者消费者模型标准库中的阻塞队列-BlockingQueue阻塞队列实现 单例模式 单例模式是一种设计模式&am…...

React整合【ECharts】教程004:饼图的构建和基本设置

文章目录 6、饼图6.1 开启圆角环形6.2 设置扇区间隙6.3 开启深色模式6.4 开启南丁格尔玫瑰图6.5 修改数据重绘饼图6.6 完整代码下载6、饼图 6.1 开启圆角环形 1️⃣添加圆角环形开关: <div style={{marginTop:10px}}>圆角环形:<Switch checkedChildren="开启…...

视频监控汇聚平台EasyCVR工业与安全监控:防爆摄像机的安全应用与注意事项

石油、化工、煤矿等行业存在易燃易爆气体、粉尘&#xff0c;普通监控设备易因电火花、高温引发爆炸火灾。随着工业规模扩大&#xff0c;安全生产监控需求激增&#xff0c;防爆摄像机成为保障安全的关键。加之国家法规与行业标准对危险环境监控设备要求严格&#xff0c;规范其应…...

Android 倒计时总结

文章目录 Android 倒计时总结Handler方案CountDownTimer方案Timer方案Flow方案总结源码下载 Android 倒计时总结 Handler方案 class MyHandler(private val intervalTime: Long, // 间隔private val totalTime: Long, // 总时长onTick: (Long) -> Unit, // 每秒回调onFini…...

基于 Redis 实现分布式锁:原理及注意事项

文章目录 基于 Redis 实现分布式锁&#xff1a;原理及注意事项基于 Redis 实现分布式锁的原理Redis 分布式锁的过期时间和锁续期机制如何防止锁被其他 goroutine 删除&#xff1f;Redis 分布式锁存在的单点故障问题&#xff1a;基于 RedLock 的解决方案高并发场景中 Redis 分布…...

手机设备多?怎样设置IP保证不关联

在移动互联网时代&#xff0c;多设备运营&#xff08;如电商、游戏工作室、社交媒体矩阵&#xff09;常面临IP关联风险&#xff0c;轻则账号受限&#xff0c;重则封禁。以下提供6种高效设置独立IP的方法&#xff0c;结合技术原理与实操建议&#xff0c;助您打造稳定合规的运营环…...

Linux 中常见的安全与权限机制

Linux 中常见的安全与权限机制主要包括以下几类&#xff0c;从文件系统权限到系统级访问控制&#xff0c;构建了多层次的安全保障体系。 &#x1f510; 一、文件权限与用户管理 1. 基本权限&#xff08;rwx&#xff09; r&#xff08;read&#xff09;&#xff1a;读取文件内…...

Golang|单例模式

单例模式定义&#xff1a;在程序运行期间&#xff0c;某个结构体只创建一个实例。适用场景&#xff1a;如数据库连接池&#xff0c;在整个程序运行期间只需要一个连接池实例。 方案一&#xff1a;通过加锁的方式&#xff0c;如读写锁&#xff0c;确保在并发情况下只创建一个实…...

哈尔滨工业大学计算机系统大作业程序人生-Hello’s P2P

摘 要 文章以C语言程序设计经典案例hello.c为研究对象&#xff0c;系统解析程序在计算机系统中的完整生命周期。剖析源代码通过预处理、编译、汇编、链接四阶段演化为可执行目标程序的编译系统工作机制&#xff0c;继而从进程视角揭示程序运行时计算机体系结构的协同运作&…...

小程序定制开发:从需求到落地,打造企业专属数字化入口

在移动互联网时代&#xff0c;小程序已成为企业连接用户的核心载体。定制开发因能深度匹配企业需求&#xff0c;正成为各行业数字化转型的优选方案。以下从优势、流程、技术、案例四方面展开&#xff0c;助你快速掌握关键要点。 一、定制开发的核心优势 1. 高度个性化&#x…...

【C/C++】基于 Docker 容器运行的 Kafka + C++ 练手项目

文章目录 基于 Docker 容器运行的 Kafka C 练手项目1 项目目的2 项目框架3 代码4 编译运行5 功能与接口说明5.1 Producer 接口&#xff1a;producer.cpp关键调用流程参数说明 5.2 Consumer 接口&#xff1a;consumer.cpp关键调用流程消费流程中注意 5.3 工程技术点 基于 Docke…...

Linux系统管理与编程24:基础条件准备-混搭“本地+阿里云”yum源

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1.添加宿主机共享文件夹 Linux虚拟机可以和宿主机共享文件夹&#xff0c;这样有利于工具文件的共享。具体操作如下&#xff1a; 1&#xff09;vmware workstation共享文件夹 虚拟机…...

新一代Python管理UV完全使用指南|附实际体验与效果对比

简介 uv是新一代的Python项目管理工具&#xff0c;具备开发一个完整项目的所有功能点&#xff1a; 功能点描述包管理完全替代pip的功能&#xff0c;支持包的安装、升级、卸载等操作虚拟环境管理内置虚拟环境创建和管理&#xff0c;无需额外安装virtualenv或venv依赖解析与锁定…...

如何在 Windows 10 PC 上获取 iPhone短信

您可以轻松地将媒体数据从 iPhone 传输到 Windows 计算机&#xff0c;并直接访问计算机上的数据。但是&#xff0c;您可以在 Windows 10 PC 上接收 iPhone 短信吗&#xff1f;有什么功能或工具支持它吗&#xff1f;如果您发现在 Windows 10 PC 上接收 iPhone 消息很困难&#x…...