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

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中查看
在这里插入图片描述

<think>好的,我现在需要回答用户关于在Ubuntu 22.04配置KVM桥接网络的问题。用户已经提供了一些引用资料,我需要结合这些资料,按照系统级指令来生成结构清晰的回答和相关问题。 首先,我要理解用户的需求。他们想知道如何在Ubuntu 22.04上设置KVM的桥接网络,以便从外部访问虚拟机。根据提供的引用,我需要整理出步骤,确保符合格式要求,比如使用行内数学表达式和独立公式,但这里可能更多是代码块和配置示例。 接下来,我需要检查引用的内容。引用1提到需要创建网桥br0,而不是使用默认的virbr0。引用2提到了通过图形化界面选择桥接网络,但用户可能需要命令行步骤。引用3和4提到了安装KVM、启用服务以及用户组配置,这些可能是前置条件。 步骤可能包括: 1. 安装KVM和相关工具。 2. 将用户添加到kvm和libvirt组。 3. 配置网桥br0,修改Netplan配置文件。 4. 重启服务和应用配置。 5. 验证桥接网络。 我需要确保每个步骤都有对应的引用标注,例如在修改Netplan时引用[^1]和[^4]。同时,要生成相关问题,如优化方法、故障排除等。 要注意使用正确的LaTeX格式,虽然问题可能涉及代码和配置,但数学表达式可能较少。需要检查代码块的语法是否正确,如网桥配置的YAML格式。 最后,确保回答结构清晰,分步骤说明,并在末尾添加相关问题。可能的问题包括如何测试桥接、性能优化、安全注意事项等。</think>### 如何在 Ubuntu 22.04配置 KVM 桥接网络 以下是分步配置流程: --- #### **1. 安装 KVM 及相关组件** 首先确保已安装 KVM 和虚拟化管理工具: ```bash sudo apt update sudo apt install qemu-kvm libvirt-daemon-system virt-manager bridge-utils ``` 启用并启动 libvirtd 服务: ```bash sudo systemctl enable --now libvirtd sudo systemctl start libvirtd # [^3] ``` --- #### **2. 用户权限配置** 将当前用户加入 `kvm` 和 `libvirt` 用户组以获取权限: ```bash sudo usermod -aG kvm $USER sudo usermod -aG libvirt $USER # [^4] ``` 执行后需重新登录使配置生效[^1]。 --- #### **3. 配置桥接网络(br0)** **步骤 3.1:修改 Netplan 配置文件** 编辑 Netplan 配置文件(通常为 `/etc/netplan/*.yaml`),示例配置如下: ```yaml network: version: 2 renderer: networkd ethernets: enp3s0: # 原物理网卡名称(通过 `ip a` 查询) dhcp4: no optional: true bridges: br0: interfaces: [enp3s0] # 绑定物理网卡 dhcp4: yes # 或手动设置静态 IP parameters: stp: false forward-delay: 0 ``` **说明**: - `enp3s0` 需替换为实际物理网卡名称(通过 `ip a` 命令查看)。 - 若使用静态 IP,替换 `dhcp4: yes` 为: ```yaml addresses: [192.168.1.100/24] routes: - to: default via: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] ``` **步骤 3.2:应用配置** ```bash sudo netplan apply ``` --- #### **4. 验证桥接网络** 检查桥接接口 `br0` 是否生效: ```bash ip a show br0 ``` 输出应包含 `br0` 的 IP 地址及绑定的物理网卡信息[^2]。 --- #### **5. 虚拟机使用桥接网络** 在 Virt-Manager 或 `virt-install` 中创建虚拟机时,选择网络源为 **Bridge: br0**。虚拟机将直接通过桥接网卡接入物理网络,实现外部访问[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值