MicroK8s 多节点集群部署与测试指南

MicroK8s 多节点集群部署与测试指南

本文记录了从创建虚拟机、安装 MicroK8s、替换镜像文件、创建 Kubernetes 集群、部署 Nginx 副本到一系列测试操作的完整步骤。

1. 创建虚拟机

使用 Multipass 创建虚拟机,用于安装 MicroK8s。

multipass launch --name microk8s-vm --cpus 2 --mem 4G --disk 20G
multipass launch --name microk8s-vm2 --cpus 2 --mem 4G --disk 20G
  • microk8s-vmmicrok8s-vm2 是虚拟机的名称。
  • 为每台虚拟机指定了 2 个 CPU,4GB 内存,20GB 磁盘。

2. 安装 MicroK8s

进入虚拟机并安装 MicroK8s。

multipass shell microk8s-vm
sudo apt update && sudo apt upgrade -y
sudo snap install microk8s --classic --channel=1.31/stable
  • 更新系统并安装 MicroK8s。
  • 安装完成后,MicroK8s 会自动启动。

3. 替换镜像源

为了提高下载速度,可以将 MicroK8s 的镜像源替换为国内镜像源。

sudo nano /var/snap/microk8s/current/args/containerd-template.toml

[plugins."io.containerd.grpc.v1.cri".registry.mirrors] 下添加国内镜像源,例如:

# Use config version 2 to enable new configuration fields.
version = 2
oom_score = 0

[grpc]
  uid = 0
  gid = 0
  max_recv_message_size = 16777216
  max_send_message_size = 16777216

[debug]
  address = ""
  uid = 0
  gid = 0

[metrics]
  address = "127.0.0.1:1338"
  grpc_histogram = false

[cgroup]
  path = ""


# The 'plugins."io.containerd.grpc.v1.cri"' table contains all of the server options.
[plugins."io.containerd.grpc.v1.cri"]

  stream_server_address = "127.0.0.1"
  stream_server_port = "0"
  enable_selinux = false
  sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"
  stats_collect_period = 10
  enable_tls_streaming = false
  max_container_log_line_size = 16384

  # 'plugins."io.containerd.grpc.v1.cri".containerd' contains config related to containerd
  [plugins."io.containerd.grpc.v1.cri".containerd]

    # snapshotter is the snapshotter used by containerd.
    snapshotter = "${SNAPSHOTTER}"

    # no_pivot disables pivot-root (linux only), required when running a container in a RamDisk with runc.
    # This only works for runtime type "io.containerd.runtime.v1.linux".
    no_pivot = false

    # default_runtime_name is the default runtime name to use.
    default_runtime_name = "${RUNTIME}"

    # 'plugins."io.containerd.grpc.v1.cri".containerd.runtimes' is a map from CRI RuntimeHandler strings, which specify types
    # of runtime configurations, to the matching configurations.
    # In this example, 'runc' is the RuntimeHandler string to match.
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
      # runtime_type is the runtime type to use in containerd e.g. io.containerd.runtime.v1.linux
      runtime_type = "${RUNTIME_TYPE}"

    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia-container-runtime]
      # runtime_type is the runtime type to use in containerd e.g. io.containerd.runtime.v1.linux
      runtime_type = "${RUNTIME_TYPE}"

      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia-container-runtime.options]
        BinaryName = "nvidia-container-runtime"

   [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata]
      runtime_type = "io.containerd.kata.v2"
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata.options]
        BinaryName = "kata-runtime"

  # 'plugins."io.containerd.grpc.v1.cri".cni' contains config related to cni
  [plugins."io.containerd.grpc.v1.cri".cni]
    # bin_dir is the directory in which the binaries for the plugin is kept.
    bin_dir = "${SNAP_DATA}/opt/cni/bin"

    # conf_dir is the directory in which the admin places a CNI conf.
    conf_dir = "${SNAP_DATA}/args/cni-network"

  # 'plugins."io.containerd.grpc.v1.cri".registry' contains config related to the registry
  [plugins."io.containerd.grpc.v1.cri".registry]
    #config_path = "${SNAP_DATA}/args/certs.d"

  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
    endpoint = ["https://xx.mirror.swr.myhuaweicloud.com"]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://xx.mirror.swr.myhuaweicloud.com"]


修改完成后,重启 MicroK8s 使更改生效:

sudo microk8s stop
sudo microk8s start

启动不起来的话,用一下命令查看下报错:

sudo journalctl -u snap.microk8s.daemon-containerd -e

有些镜像可以预先pull指定一下

sudo microk8s ctr image pull registry.cn-hangzhou.aliyuncs.com/xxx/cni:v3.25.1 && sudo microk8s ctr image tag registry.cn-hangzhou.aliyuncs.com/xxx/cni:v3.25.1 docker.io/calico/cni:v3.25.1
sudo microk8s ctr image pull registry.cn-hangzhou.aliyuncs.com/xxx/coredns:1.10.1 && sudo microk8s ctr image tag registry.cn-hangzhou.aliyuncs.com/xxx/coredns:1.10.1 docker.io/coredns/coredns:1.10.1
sudo microk8s ctr image pull registry.cn-hangzhou.aliyuncs.com/xxx/node:v3.25.1 && sudo microk8s ctr image tag registry.cn-hangzhou.aliyuncs.com/xxx/node:v3.25.1 docker.io/calico/node:v3.25.1
sudo microk8s ctr image pull registry.cn-hangzhou.aliyuncs.com/xxx/kube-controllers:v3.25.1 && sudo microk8s ctr image tag registry.cn-hangzhou.aliyuncs.com/xxx/kube-controllers:v3.25.1 docker.io/calico/kube-controllers:v3.25.1

4. 创建多节点集群

在主节点(microk8s-vm)上生成加入令牌:

microk8s add-node

进入辅助节点(microk8s-vm2)并加入集群:

microk8s join <主节点IP>:25000/<token>

例如:

microk8s join 192.168.64.13:25000/33e6aed76f87f6f536dc764b94d6401f/29023eed9b34

完成后可以在主节点上查看集群状态:

microk8s kubectl get nodes

5. 部署 Nginx 副本

在主节点上创建 Nginx 部署:

microk8s kubectl create deployment nginx --image=nginx

扩展 Nginx 副本数量到 5:

microk8s kubectl scale deployment nginx --replicas=5

查看 Pod 状态:

microk8s kubectl get pods -o wide

可以看到 5 个 Nginx 副本分布在两个节点上。

6. 暴露 Nginx 服务

通过 NodePort 暴露 Nginx 服务:

microk8s kubectl expose deployment nginx --port=80 --type=NodePort

查看服务的 NodePort:

microk8s kubectl get svc nginx

例如:80:31499/TCP 表示可以通过集群节点的 IP 和端口 31499 访问 Nginx 服务。

7. 测试负载均衡

在宿主机上通过 NodePort 访问 Nginx 服务:

curl http://<主节点IP>:<NodePort>

例如:

curl http://192.168.64.13:31499

通过多次访问,可以观察到请求被分发到不同的 Pod,验证负载均衡效果。

8. 模拟节点故障

停止辅助节点:

multipass stop microk8s-vm2

查看 Pod 的重新调度情况:

microk8s kubectl get pods -o wide

可以看到原来在辅助节点上的 Pod 被重新调度到主节点上,验证 Kubernetes 的高可用性和故障自愈能力。

9. 清理环境

删除 Nginx 部署和服务:

microk8s kubectl delete deployment nginx
microk8s kubectl delete service nginx

总结

通过以上步骤,我们实现了在 Multipass 虚拟机中部署 MicroK8s、创建多节点 Kubernetes 集群、部署 Nginx 副本以及测试负载均衡和故障自愈的完整过程。这些操作可以帮助我们更好地理解 Kubernetes 的高可用性和集群管理功能。

无标签
评论区
头像
    头像
    fgdkvamrid
      

    《致命伤害》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/27701.html

    头像
    zvtdwhxbue
      

    《诡异酒楼》恐怖片高清在线免费观看:https://www.jgz518.com/xingkong/56642.html

    头像
    wzonfnmlqv
      

    《天下无敌》动作片高清在线免费观看:https://www.jgz518.com/xingkong/128296.html

    头像
    pkrwimqpaf
      

    《人面兽心2001》喜剧片高清在线免费观看:https://www.jgz518.com/xingkong/41909.html

    头像
    zzwsbckfxq
      

    《诡异酒楼》恐怖片高清在线免费观看:https://www.jgz518.com/xingkong/56642.html

    头像
    fxiogswbhu
      

    《萤火虫(全新数字重制版 )》欧美剧高清在线免费观看:https://www.jgz518.com/xingkong/142219.html

    头像
    xudswnumkn
      

    《嚎叫2012》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/29594.html

    头像
    aagifyhffb
      

    博主太厉害了!

    头像
    ehsprpvuji
      

    真好呢

    头像
    dfomyxpbas
      

    探究1.80版本传奇私服中帝王无双的独特魅力:https://501h.com/lianji/2024-10-19/43299.html

    头像
    gdbhlyxhmr
      

    哈哈哈,写的太好了https://www.cscnn.com/