Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群

news2025/5/20 21:07:36

Ubuntu Desktop QEMU/KVM中使用Ubuntu Server 22.04配置k8s集群

1.本机部署个代理

这里我是自己用docker+sing-box 部署的 http://192.168.2.105:10808

如果 用v2rayN等软件部署的,记得开启局域网共享

2.安装虚拟机

我本机使用的是Ubuntu Desktop ,这里在QEMU/KVM 中安装 Ubuntu Server 22.04

可以去官网下载:https://cn.ubuntu.com/download/server/step1

具体安装步骤参照:https://blog.csdn.net/u010080562/article/details/127708329

安装后拷贝三个供安装集群使用

在这里插入图片描述

3. 通用配置

  1. 参照上边的教程 把ssh配置好
  2. ssh远程链接
  3. 配置hostname
hostnamectl set-hostname $host_name
hostname
sudo reboot
  1. 配置网络
# 网关
gateway4=192.168.122.1
# 静态IP地址
ip=192.168.122.4
# 上边的根据自己实际情况改

apt update && apt install iputils-ping vim net-tools netplan.io wget -y
sudo tee /etc/netplan/01-network-manager-all.yaml > /dev/null <<EOF
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      addresses: [$ip/24]
      gateway4: $gateway4
      nameservers:
        addresses: [8.8.8.8]
EOF

chmod 600 /etc/netplan/01-network-manager-all.yaml
netplan apply
  1. 配置防火墙
echo "配置防火墙"
sudo ufw allow 6443/tcp
sudo ufw allow 2379-2380/tcp
sudo ufw allow 10250-10259/tcp
  1. 安装docker

echo "==> 卸载旧版本 Docker(如果存在)..."
sudo apt remove -y docker docker-engine docker.io containerd runc || true

echo "==> 安装依赖工具..."
sudo apt update
sudo apt install -y ca-certificates gnupg lsb-release

echo "==> 添加 Docker GPG 密钥..."
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "==> 添加阿里云 Docker 软件源..."
UBUNTU_CODENAME=$(lsb_release -cs)
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://mirrors.aliyun.com/docker-ce/linux/ubuntu ${UBUNTU_CODENAME} stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

echo "==> 更新软件源并安装 Docker..."
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin


echo "==> 启动并设置 Docker 开机自启..."
sudo systemctl enable docker
sudo systemctl start docker

echo "==> 配置国内镜像加速器(阿里云)..."
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.imgdb.de",
        "https://docker-0.unsee.tech",
        "https://docker.hlmirror.com",
        "https://docker.1ms.run",
        "https://func.ink",
        "https://lispy.org",
        "https://docker.xiaogenban1993.com"
    ]
}
EOF

# 配置拉取镜像的网络
sudo mkdir -p /etc/systemd/system/docker.service.d && \
echo -e \
"[Service]\nEnvironment=\"HTTP_PROXY=$proxy\"\nEnvironment=\"HTTPS_PROXY=$proxy\"\nEnvironment=\"NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,192.168.0.0/16\"" \
| sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf && \
sudo systemctl daemon-reexec && \
sudo systemctl daemon-reload && \
sudo systemctl restart docker && \
docker info | grep -i proxy


echo "==> 重新加载配置并重启 Docker..."
sudo systemctl daemon-reexec
sudo systemctl restart docker

echo " Docker 安装完成!版本信息如下:"
docker --version
  1. 安装k8s
echo "==> 设置 kubeadm 软件源"
sudo apt-get update
sudo apt install -y apt-transport-https ca-certificates
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

echo "==> 安装 kubelet、kubeadm 和 kubectl,并锁定其版本"
sudo apt-get update
sudo apt-get install -y kubelet=1.23.15-00 kubeadm=1.23.15-00 kubectl=1.23.15-00
sudo apt-mark hold kubelet kubeadm kubectl

# 加载 br_netfilter 内核模块
sudo modprobe br_netfilter
sudo sysctl -w net.bridge.bridge-nf-call-iptables=1
sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=1
echo "br_netfilter" | sudo tee /etc/modules-load.d/br_netfilter.conf
echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee /etc/sysctl.d/k8s.conf
echo "net.bridge.bridge-nf-call-ip6tables=1" | sudo tee -a /etc/sysctl.d/k8s.conf
sudo sysctl --system


sudo kubeadm reset -f
sudo rm -rf /etc/kubernetes/pki/  # 强制删除残留证书
sudo rm -rf /var/lib/kubelet/
sudo rm -f $HOME/.kube/config
sudo sed -i '/\/swap.img/ { /^[^#]/ s/^/#/ }' /etc/fstab
sudo swapoff -a
free -h

至此 通用配置完成

4. master配置

ip=192.168.122.4
# 加载 br_netfilter 内核模块
sudo modprobe br_netfilter
# 设置 sysctl 参数
sudo sysctl -w net.bridge.bridge-nf-call-iptables=1
sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=1
# 持久化配置(重启后生效)
echo "br_netfilter" | sudo tee /etc/modules-load.d/br_netfilter.conf
echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee /etc/sysctl.d/k8s.conf
echo "net.bridge.bridge-nf-call-ip6tables=1" | sudo tee -a /etc/sysctl.d/k8s.conf
# 应用 sysctl 配置
sudo sysctl --system

# 使用阿里云镜像仓库拉取镜像
kubeadm config images pull \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.15
  
# 初始化集群
sudo kubeadm init \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.15 \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=$ip \
  --ignore-preflight-errors=FileContent--proc-sys-net-bridge-bridge-nf-call-iptables,SystemVerification
 
# 配置 kubectl 
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装 Pod 网络
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

5. worker 添加到集群里

在master节点执行 命令 将结果粘贴到worker节点执行

kubeadm token create --print-join-command

如成功 则输出如图

在这里插入图片描述

如出错 重新执行 命令 清理缓存 处理问题 重新执行上边master输出的命令

# 清理之前的残留配置
sudo kubeadm reset -f
sudo rm -rf /etc/kubernetes/pki/  # 强制删除残留证书
sudo rm -rf /var/lib/kubelet/
sudo rm -f $HOME/.kube/config
sudo sed -i '/\/swap.img/ { /^[^#]/ s/^/#/ }' /etc/fstab
sudo swapoff -a
free -h

至此 所有安装配置完成,重复worker安装步骤在其他节点上即可

成果展示

在这里插入图片描述

常用命令记录:

# 查看集群节点
kubectl get nodes
# 删除集群节点
kubectl delete nodes 节点名
#  修改节点标签名
kubectl label node worker02 node-role.kubernetes.io/worker02=


shell脚本中加入 set -e 启动严格模式 碰到命令输出错误直接终止

问题记录:

  1. KVM 虚拟机 网卡问题
sudo virsh net-list --all
sudo virsh net-start default
sudo virsh net-list --all
  1. master not ready 问题处理 ----CNI 未正确启动(一般都是 kube-flannel 里的镜像拉取有问题)
# 配置代理
sudo mkdir -p /etc/systemd/system/docker.service.d && \
echo -e \
"[Service]\nEnvironment=\"HTTP_PROXY=http://192.168.2.105:10808\"\nEnvironment=\"HTTPS_PROXY=http://192.168.2.105:10808\"\nEnvironment=\"NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,192.168.0.0/16\"" \
| sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf && \
sudo systemctl daemon-reexec && \
sudo systemctl daemon-reload && \
sudo systemctl restart docker && \
docker info | grep -i proxy

# 安装 CNI
wget https://github.com/containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz && \
mv cni-plugins-linux-amd64-v0.8.6.tgz /opt/cni/bin/ && \
tar -zxvf cni-plugins-linux-amd64-v0.8.6.tgz

# 手动拉取镜像
docker pull ghcr.io/flannel-io/flannel:v0.26.7  && \
docker tag ghcr.io/flannel-io/flannel:v0.26.7 quay.io/coreos/flannel:v0.26.7 && \
docker images | grep flannel && \
wget https://raw.githubusercontent.com/flannel-io/flannel/v0.26.7/Documentation/kube-flannel.yml -O kube-flannel.yml

# vim进去修改
'''
containers:
  - name: kube-flannel
    image: quay.io/coreos/flannel:v0.26.7
'''
kubectl apply -f kube-flannel.yml && \
kubectl get pods -n kube-flannel -o wide && \
kubectl get nodes

检查代理网络是否可用 执行命令看输出即可

curl https://www.youtube.com/

代理不好使会一直卡住

在这里插入图片描述

代理好使会输出一堆html信息

在这里插入图片描述

第一次ssh链接 不知道ip可以在KVM中查看
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2380246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8 在单片机上的几种部署方案

YOLOv8 在单片机上的部署方案 单片机资源&#xff08;如内存、计算能力&#xff09;有限&#xff0c;直接部署完整的 YOLOv8 模型并不现实。不过&#xff0c;我们可以通过模型量化、优化和使用轻量级框架来实现简化版的目标检测。下面为你介绍几种可行的方案&#xff1a; 方案…

后端框架(1):Mybatis

什么是框架&#xff1f; 盖高楼&#xff0c;框架结构。 框架结构就是高楼的主体&#xff0c;基础功能。 把很多基础功能已经实现了(封装了)。 在基础语言之上&#xff0c;对各种基础功能进行封装&#xff0c;方便开发者&#xff0c;提高开发效率。 mybatis&#xff1a;对jd…

linux下tcp/ip网络通信笔记1,

本文章主要为博主在学习网络通信的笔记一个Udp_echo_server,和client的代码实现 1&#xff0c;网络发展&#xff0c;网络协议&#xff0c;意识到网络通信——不同主机的进程间通信&#xff0c; 2&#xff0c;学习如何在应用层调用系统提供的接口进行通信&#xff0c;echo_Udp…

语音识别——声纹识别

通过将说话人的声音与数据库中的记录声音进行比对&#xff0c;判断说话人是否为数据库白名单中的同一人&#xff0c;从而完成语音验证。目前&#xff0c;3D-Speaker 声纹验证的效果较为出色。 3D-Speaker 是一个开源工具包&#xff0c;可用于单模态和多模态的说话人验证、说话…

window 显示驱动开发-报告图形内存(三)

图形内存报告示例 示例 1&#xff1a;笔记本电脑上的 128 MB 专用板载图形内存 以下屏幕截图显示了使用 Intel Iris 离散图形适配器运行 Windows 11 的 Surface 笔记本电脑的计算图形内存数。 适配器的可用内存总数为 16424 MB&#xff0c;用于图形用途&#xff0c;细分如下&…

UE5 GAS框架解析内部数据处理机制——服务器与客户端

当&#xff0c; gas通过点击鼠标光标触发事件时&#xff0c;内部的处理机制。 当通过点击事件&#xff0c;命中中目标时&#xff0c; 可获取到对应的TargetData 目标数据。处理相应的操作。 仅有本地的客户端的情况下。命中并不会有什么异常。 当存在服务器时&#xff0c; 服…

开源GPU架构RISC-V VCIX的深度学习潜力测试:从RTL仿真到MNIST实战

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 一、开篇&#xff1a;AI芯片架构演变的三重挑战 &#xff08;引述TPUv4采用RISC-V的行业案…

Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七)

Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;七&#xff09; 在 Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;六&#xff09;-CSDN博客 的基础上改进&#xff0c;主要是…

【工具】Windows|外接的显示器怎么用软件调亮度(Brightness Slider)

文章目录 工具安装及使用Twinkle Tray&#xff1a;Brightness Slider补充背景知识1. DDC/CI&#xff08;Display Data Channel Command Interface&#xff09;2. WMI&#xff08;Windows Management Instrumentation&#xff09;3. Twinkle Tray如何结合两者&#xff1f;对比总…

【Nextcloud】使用 LNMP 架构搭建私有云存储:Nextcloud 实战指南

目录 一、环境准备与基础配置 1. 系统环境要求 2. 初始化系统配置 二、搭建 LNMP 基础架构 1. 一键安装 LNMP 组件 2. 启动数据库服务 三、部署 Nextcloud 存储服务 1. 上传并解压安装包 2. 设置目录权限&#xff08;测试环境配置&#xff09; 3. 配置 MariaDB 数据库…

【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最小化Vscode界面

背景说明&#xff1a; 每次把教学照片上传csdn&#xff0c;都需要打开相册&#xff0c;一张张截图&#xff0c;然后ctrlV黏贴到CSDN内&#xff0c;我觉得太烦了。 改进思路&#xff1a; 是否可以先把所有照片都上传到csdn&#xff0c;然后再一张张的截图&#xff08;去掉幼儿…

uniapp-商城-60-后台 新增商品(属性的选中和页面显示,数组join 的使用)

前面添加了属性&#xff0c;添加属性的子级项目。也分析了如何回显&#xff0c;但是在添加新的商品的时&#xff0c;我们也同样需要进行选择&#xff0c;还要能正常的显示在界面上。下面对页面的显示进行分析。 1、界面情况回顾 属性显示其实是个一嵌套的数据显示。 2、选中的…

[c语言日寄]数据结构:栈

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…

WEB安全--Java安全--LazyMap_CC1利用链

一、前言 该篇是基于WEB安全--Java安全--CC1利用链-CSDN博客的补充&#xff0c;上篇文章利用的是TransformedMap类&#xff0c;而CC链的原作者是利用的LazyMap类作为介质进行的触发。 所以本文将分析国外原作者在ysoserial commonscollections1中给出的CC1利用链。 二、回顾梳…

黑马k8s(六)

1.Deployment&#xff08;Pod控制器&#xff09; Selector runnginx 标签选择&#xff1a;会找pod打的标签 执行删除之后&#xff0c;pod也会删除&#xff0c;Terminating正在删除 如果想要访问其中的一个pod借助&#xff1a;IP地址端口号访问 假设在某一个瞬间&#xff0c;…

【OpenGL学习】(一)创建窗口

文章目录 【OpenGL学习】&#xff08;一&#xff09;创建窗口 【OpenGL学习】&#xff08;一&#xff09;创建窗口 GLFW OpenGL 本身只是一套图形渲染 API&#xff0c;不提供窗口创建、上下文管理或输入处理的功能。 GLFW 是一个支持创建窗口、处理键盘鼠标输入和管理 OpenGL…

AI大语言模型评测体系演进与未来展望

随着人工智能技术的飞速发展,大语言模型(LLMs)已成为自然语言处理领域的核心研究方向。2025年最新行业报告显示,当前主流模型的评测体系已从单一任务评估转向多维度、全链路的能力剖析。例如,《全球首个大语言模型意识水平”识商”白盒DIKWP测评报告》通过数据、信息、知识…

微服务项目->在线oj系统(Java版 - 5)

相信自己,终会成功 微服务代码: lyyy-oj: 微服务 目录 C端代码 用户题目接口 修改后用户提交代码(应用版) 用户提交题目判题结果 代码沙箱 1. 代码沙箱的核心功能 2. 常见的代码沙箱实现方式 3. 代码沙箱的关键问题与解决方案 4. 你的代码如何与沙箱交互&#xff1f; …

get请求使用数组进行传参

get请求使用数组进行传参,无需添加中括号 mvc接口要添加参数名&#xff0c;使用array承接。不能用list, 否则会报错 这里是用apifox模拟前端调用。 前端调用代码 // 根据项目ID和角色ID查询相关审批人 export function findRelativeApproverByProjectIdAndRoleId(roleIds, p…

【MySQL成神之路】MySQL常用语法总结

目录 MySQL 语法总结 数据库操作 表操作 数据操作 查询语句 索引操作 约束 事务控制 视图操作 存储过程和函数 触发器 用户和权限管理 数据库操作 创建数据库&#xff1a; CREATE DATABASE database_name; 选择数据库&#xff1a; USE database_name; 删除数…