VMware下安装Ubuntu系统部署k8s集群(保姆级教程)

之前我们已经部署过单机k8s,但是单机k8s总归是有着很大的局限性,今天我们就来学习一下在VMware中创建三台虚拟机部署k8s集群的流程。

VMware的下载以及Ubuntu的安装我就不过多赘述了,网络上的教程已经足够丰富且完善了(下面部署k8s集群使用的Ubuntu版本是24.04)

既然是k8s集群,我们就要先来进行一下我们的规划,以下是我在部署时使用的规划
master IP:192.168.43.3 CIDR:10.244.0.0/16
node01 IP:192.168.43.4 CIDR:10.244.1.0/16
node02 IP:192.168.43.5 CIDR:10.244.2.0/16

在我的规划中有一个master节点,两个node节点,若你想要更多的节点,也可以自由添加。
下面我们先来查看一下你自己的IP是什么
在你创建好第一个虚拟机后,点击最上方的导航栏中的编辑——虚拟网络编辑器,进来之后选择NAT模式,在最下方你能看到自己的IP地址(但这个看到的地址不能作为任何一个节点的地址),你可以选择192.168.xx.1-192.168.xx.254中未被占用的地址,最好是连续的地址来作为你的节点地址

wechat_2025-07-28_132851_603

然后点击NAT设置,你能看到子网掩码和子网网关的信息,记住你自己的信息,不要在这个页面做任何更改,退出

wechat_2025-07-28_133122_275

然后我们就可以进入到虚拟机中来进行初始设置了,我们开始只需要先创建一台虚拟机,后续的节点虚拟机通过克隆来完成

首先,进入终端,设置主机名为master,这里要重启一下终端才会改变
hostnamectl set-hostname master

然后直接通过可视化界面来调整IP

wechat_2025-07-28_145056_718

wechat_2025-07-28_145111_792

wechat_2025-07-28_150930_224

DNS设置为8.8.8.8

设置好之后点击应用,开关一下网络连接,即可生效

后续的操作我们切换为root用户进行操作,防止一些命令因权限问题执行失败
sudo -i
输入密码
········

更新软件源
apt update

下载一些必要的工具

apt install vim
apt install curl
apt install open-vm-tools-desktop -y     #复制粘贴工具
apt install ssh
systemctl start ssh  #启动ssh
systemctl enable ssh #设置开机自启
systemctl status ssh #查看状态
reboot    #重启

每次重启之后重新切换root用户
sudo -i
部署docker(通过脚本部署)
vim docker-install.sh

点击查看代码
#!/bin/bash

# 脚本名称:docker_install.sh
# 功能描述:安装Docker、配置镜像加速器及Docker Compose

# 输出带时间戳的日志信息
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}

# 检查命令执行结果
check_status() {
    if [ $? -ne 0 ]; then
        log "错误:$1 执行失败"
        exit 1
    else
        log "$1 执行成功"
    fi
}

# 主函数
main() {
    log "开始执行Docker安装与配置脚本"
    
    # 关闭swap分区
    log "关闭swap分区"
    swapoff -a
    check_status "关闭swap分区"
    
    # 备份hosts文件
    log "备份hosts文件"
    cp /etc/hosts /etc/hosts.bak
    check_status "备份hosts文件"
    
    # 配置hosts文件
    log "配置hosts文件"
    echo "185.199.111.133 raw.githubusercontent.com">> /etc/hosts
    check_status "配置hosts文件"
    
    # 更新软件包索引
    log "更新软件包索引"
    apt update
    check_status "更新软件包索引"
    
    # 安装Docker
    log "安装Docker"
    apt install -y docker.io
    check_status "安装Docker"
    
    # 启动Docker服务
    log "启动Docker服务"
    systemctl start docker
    check_status "启动Docker服务"
    
    # 设置Docker服务开机自启
    log "设置Docker服务开机自启"
    systemctl enable docker
    check_status "设置Docker服务开机自启"
    
    # 创建Docker配置目录
    log "创建Docker配置目录"
    mkdir -p /etc/docker
    check_status "创建Docker配置目录"
    
    # 配置Docker镜像加速器
    log "配置Docker镜像加速器"
    tee /etc/docker/daemon.json <<EOF > /dev/null
{
    "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.anyhub.us.kg",
        "https://dockerhub.jobcher.com",
        "https://dockerhub.icu"
    ]
}
EOF
    check_status "配置Docker镜像加速器"
    
    # 重新加载Docker配置
    log "重新加载Docker配置"
    systemctl daemon-reload
    check_status "重新加载Docker配置"
    
    # 重启Docker服务
    log "重启Docker服务"
    systemctl restart docker
    check_status "重启Docker服务"
    
    # 安装Docker Compose
    log "安装Docker Compose"
    curl -L "https://1ms.run/install/docker-compose/latest/$(uname -s)/$(uname -m)" -o /usr/local/bin/docker-compose
    check_status "下载Docker Compose"
    
    # 设置Docker Compose执行权限
    log "设置Docker Compose执行权限"
    chmod +x /usr/local/bin/docker-compose
    check_status "设置Docker Compose执行权限"
    
    # 创建Docker Compose软链接
    log "创建Docker Compose软链接"
    ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    check_status "创建Docker Compose软链接"
    
    log "Docker安装与配置脚本执行完成"
}

# 执行主函数
main


授予脚本权限
chmod +x docker-install.sh
执行脚本
./docker-install.sh

wechat_2025-07-28_141836_238

wechat_2025-07-28_141908_423

docker version
看到Client和Serverdocker即安装成功

wechat_2025-07-28_141948_065

安装好docker之后就可以开始安装kubelet kubeadm kubectl

sudo apt-get update && sudo apt-get install -y ca-certificates curl software-properties-common apt-transport-https curl
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF 
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl #阻止自动更新

wechat_2025-07-28_142740_507

修改containerd配置,使其从阿里云拉取镜像
先创建containerd目录
mkdir -p /etc/containerd
生成config.toml文件

containerd config default | sudo tee /etc/containerd/config.toml

编辑修改配置
vim /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri"]
..................................
# 搜索sandbox_image,把原来的k8s.gcr.io/pause:3.6改为"registry.aliyuncs.com/google_containers/pause:3.9" 
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"	 
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
..........................
SystemdCgroup = true					#搜索SystemdCgroup,把这个false改为true		

# 搜索config_path,配置镜像加速地址(这是一个目录下面创建)
[plugins."io.containerd.grpc.v1.cri".registry]
     config_path = "/etc/containerd/certs.d"

三处修改
微信截图_20250630104403
微信截图_20250630104316
微信截图_20250630104503
配置加速
创建镜像加速目录
mkdir /etc/containerd/certs.d/docker.io -pv

cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://b9pmyelo.mirror.aliyuncs.com"]
  capabilities = ["pull", "resolve"]
EOF

加载containerd的内核模块

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

重启containerd

systemctl restart containerd 
systemctl status containerd

至此,在master节点上的部署要先告一段落了,因前面的所有部署是需要在所有节点上同步进行的,所以我们先在master节点上完成,然后克隆到其他节点
现在来进行克隆工作
右键虚拟机——管理——克隆,按照以下图片步骤完成克隆(要克隆多个节点,重复克隆第一个虚拟机即可)

wechat_2025-07-28_144138_186

wechat_2025-07-28_144256_007

wechat_2025-07-28_144307_143

wechat_2025-07-28_144311_882

wechat_2025-07-28_144331_345

wechat_2025-07-28_144352_802

克隆完成之后打开新的虚拟机
同样的,先修改主机名
hostnamectl set-hostname node01

然后修改ip

wechat_2025-07-28_150937_286

修改好之后我们就可以将几台虚拟机进行dns解析,进行相互连通了
修改每台虚拟机的hosts文件,加入ip解析(每台虚拟机上都要运行以下代码!!!这里我就用了三台虚拟机,如果你有更多的,请自行添加)

echo "192.168.43.3 master" | tee -a /etc/hosts
echo "192.168.43.4 node01" | tee -a /etc/hosts
echo "192.168.43.5 node02" | tee -a /etc/hosts

然后你就可以在任意一台虚拟机上使用ping命令查看是否已经联通

ping master
ping node01
ping node02

以上工作都完成之后,我们就可以回到第一台虚拟机master来继续部署了
由于我们使用的是临时关闭swap分区,故在部署过程中,如果有任何的重启都需要重新关闭一下
swapoff -a

创建默认的kubeadm-config.yaml文件并修改

sudo kubeadm config print init-defaults  > kubeadm-config.yaml
vim kubeadm-config.yaml

四处修改

apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.43.3 # 修改ip
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock 
  imagePullPolicy: IfNotPresent
  name: master # 修改成自定义的名称
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # 使用阿里源
kind: ClusterConfiguration
kubernetesVersion: 1.22.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.244.0.0/16  # 修改成10.244.0.0/16 
scheduler: {}

运行kubeadm-config.yaml配置文件
sudo kubeadm init --config kubeadm-config.yaml --v=5
看到Your Kubernetes control-plane has initialized successfully!说明配置成功
微信截图_20250630110433
此时根据他下面的提示,继续运行他提供的代码

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

然后在其他的node节点上运行初始化结束显示在最下方的代码(每个人的token是不一样的,不要直接复制我的)

kubeadm join 192.168.43.6:6443 --token abcdef.0123456789abcdef \
	--discovery-token-ca-cert-hash sha256:fc81e2f99ed76008b75515d64abbde93970cdfd286810a24eed926d6a82d8a34

wechat_2025-07-28_152103_979

wechat_2025-07-28_152341_813

运行结束之后回到master节点,查看是否已经加入集群
kubectl get node

wechat_2025-07-28_152801_238

接下来就可以进行网络部署了,只需要在master节点部署
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
这里我遇到了一个问题,我在虚拟机上连接不到raw.githubusercontent.com,所以我是现在主机上下载了kube-flannel.yml文件,然后将它上传到虚拟机
主机运行:
curl https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
然后回到虚拟机master运行
scp root@1.94.2.33:/root/kube-flannel.yml .
kubectl apply -f kube-flannel.yml
由于它配置文件中的镜像我们还是拉取不到,故这里采用手动拉取

拉取 Flannel CNI 插件镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/flannel-io/flannel-cni-plugin:v1.7.1-flannel1

# 拉取 Flannel 主镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel:v0.26.3

执行

docker save swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/flannel-io/flannel-cni-plugin:v1.7.1-flannel1 -o flannel-cni-plugin.tar
docker load -i flannel-cni-plugin.tar
docker save swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel:v0.26.3 -o flannel-main.tar
docker load -i flannel-main.tar

为每个节点分配CIDR

kubectl patch node master -p '{"spec":{"podCIDR":"10.244.0.0/16"}}'
kubectl patch node node01 -p '{"spec":{"podCIDR":"10.244.1.0/16"}}'
kubectl patch node node02 -p '{"spec":{"podCIDR":"10.244.2.0/16"}}'

然后,我们删除掉现有的Flannel Pod使其重新启动
kubectl delete pods -n kube-flannel -l app=flannel
等待大概3-5分钟
查看所有pod
kubectl get pods --all-namespaces
都处于running状态即网络部署成功
wechat_2025-07-28_155004_580
kubectl get node
看到所有节点都处于ready状态
wechat_2025-07-28_155828_643

至此k8s全部部署完成

posted @ 2025-07-28 16:04  努力成为OM大师  阅读(240)  评论(0)    收藏  举报