根据 Windows Hyper-V + Minikube 构建 Kubernetes 本地试验环境

基于 Windows Hyper-V + Minikube 搭建Kubernetes本地实验环境
Kubernetes官方为了便利咱们开发和体会Kubernetes,社区供应了能够在本地布置的开发环境 Minikube。由于网络拜访原因,许多朋友无法直接运用minikube进行试验。在v1.24.0的官方 Minikube 中,现已兼并了由阿里云团队支撑的计划,能够帮助咱们利用阿里云的服务来获取所需Docker镜像,二进制文件和装备,也能够完美支撑Minikube 丰厚的 addon 组件!

装备装置

环境要求

留意:windows体系只需求满足以下条件即可

  • [✓] Windows 8 或以上版别
  • [✓] 支撑虚拟化
  1. 在终端中运转指令systeminfo检测体系是否支撑虚拟化
    # 英文版别:
    Hyper-V Requirements    VM Monitor Mode Extensions: Yes
                            Virtualization Enabled In Firmware: Yes
                            Second Level Address Translation: Yes
                            Data Execution Prevention Available: Yes
    # 中文版别:
    Hyper-V 要求    虚拟机监视器模式扩展: 是
                    固件中已启用虚拟化: 是
                    二级地址转化: 是
                    数据执行维护可用: 是
    
  2. 敞开体系对 Hyper-V 的支撑 控制面板\程序\程序和功用\启用或封闭Windows功用\Hyper-v 或 在管理员终端(如 powershell )中运转指令敞开:
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
    

留意:运用 Minikube搭配Hyper-V运用需求禁用动态内存(Docker for Windows初始化时指定禁用了相关虚拟机运用动态内存)管理员终端(如 powershell)运转以下指令即可:

Set-VMMemory -VMName 'minikube' -DynamicMemoryEnabled $false

装置kubectl

说明:Windows 版的 Docker Desktop 将其自带版别的 kubectl 添加到 PATH。 假如你之前装置过 Docker Desktop,可能需求把此 PATH 条目置于 Docker Desktop 装置的条目之前, 或许直接删掉 Docker Desktop 的 kubectl。

留意:kubectl 版别和集群版别之间的差异必须在一个小版别号内。 例如:v1.27 版别的客户端能与 v1.26、 v1.27 和 v1.28 版别的控制面通信。 用最新兼容版的 kubectl 有助于防止不可预见的问题。

在 Windows 体系中装置 kubectl 有多种方法进行装置 我这儿选用如下方法进行装置(更多装置方法):

  1. 直接下载最新版可执行文件kubectl(检查最新稳定的版别)或许 运用管理员终端(如 powershell)运转以下指令进行装置:
    New-Item -Path 'd:\' -Name 'kubectl' -ItemType Directory -Force
    Invoke-WebRequest -OutFile 'd:\kubectl\kubectl.exe' -Uri "https://dl.k8s.io/release/v1.27.4/bin/windows/amd64/kubectl.exe" -UseBasicParsing
    
  2. 手动将 kubectl 二进制文件以追加或插入的方法添加到你的体系环境变量中 或许 运用管理员终端(如 powershell)运转以下指令进行设置:
    $oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine)
    if ($oldPath.Split(';') -inotcontains 'd:\kubectl'){
        [Environment]::SetEnvironmentVariable('Path', $('{0};d:\kubectl' -f $oldPath), [EnvironmentVariableTarget]::Machine)
    }
    
    假如您运用终端(如 powershell)进行装置,请在运转 minikube 之前重启管理员终端。
  3. 在终端中运转以下指令测试一下,确保 kubectl 的版别和希望版别共同:
    kubectl version --client --short
    或
    kubectl version --client --output=yaml
    
    说明:以上第一条指令会发生如下正告,你能够直接略该正告只需求重视你所装置的版别和希望的版别是否共同
    WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short.  Use --output=yaml|json to get the full version.
    
    或是运转以下指令检查
    kubectl version --client --short
    

装置 minikube

  1. 下载并运转最新版别的装置程序latest release。或许 运用管理员终端(如 powershell)运转下指令进行装置:

    New-Item -Path 'd:\' -Name 'minikube' -ItemType Directory -Force
    Invoke-WebRequest -OutFile 'd:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe' -UseBasicParsing
    
  2. 手动设置体系环境变量或许以 运用管理员终端(如 powershell)运转以下指令进行设置:

    $oldPath = [Environment]::GetEnvironmentVariable('Path', [EnvironmentVariableTarget]::Machine)
    if ($oldPath.Split(';') -inotcontains 'd:\minikube'){
        [Environment]::SetEnvironmentVariable('Path', $('{0};d:\minikube' -f $oldPath), [EnvironmentVariableTarget]::Machine)
    }
    

    假如您运用终端(如 powershell)进行装置,请在运转 minikube 之前重启管理员终端。

  3. 在终端中运转以下指令测试一下,确保 kubectl 的版别和希望版别共同:

    minikube version
    

装备 Hyper-V (可选)

假如运用Hyper-V环境,咱们首要需求翻开Hyper-V管理器创立一个外部虚拟交换机,步骤如下:

  1. 翻开Hyper-V管理器
    基于 Windows Hyper-V + Minikube 搭建Kubernetes本地实验环境
  2. 挑选虚拟交换机管理器
    基于 Windows Hyper-V + Minikube 搭建Kubernetes本地实验环境
  3. 挑选创立虚拟交换机(S)
    基于 Windows Hyper-V + Minikube 搭建Kubernetes本地实验环境
  4. 装备虚拟机称号Minikube Switch及衔接类型并保存
    基于 Windows Hyper-V + Minikube 搭建Kubernetes本地实验环境

运用Minikube

装备详解

minikube 供应了非常多的装备参数,咱们先来了解一些惯例装备:

  • --driver='' 从1.5.0版别开始,Minikube缺省运用体系优选的驱动来创立Kubernetes本地环境,比如您现已装置过Docker环境,minikube 将运用 docker 驱动
  • --cpus=2 为minikube虚拟机分配CPU核数
  • --memory=2048mb 为minikube虚拟机分配内存数
  • --disk-size='20000mb' 分配给 minikube 虚拟机的磁盘巨细 (格局:<数字>[<单位>],其间单位 = b、k、m 或 g)。
  • --registry-mirror='' 为了提高拉取Docker Hub镜像的稳定性,能够为 Docker daemon 装备镜像加快,参阅阿里云镜像服务
  • --image-mirror-country='cn' 需求运用的镜像镜像的国家/区域代码。留空以运用全球代码。关于中国大陆用户,请将其设置为 cn
  • --kubernetes-version='' minikube 虚拟机将运用的 kubernetes 版别
  • --dns-domain='cluster.local' Kubernetes 集群中运用的集群 dns 域名
  • --listen-address='' 用于暴露端口的IP地址(仅适用于docker和podman驱动程序)
  • --hyperv-virtual-switch='' hyperv 虚拟交换机称号。默以为找到的第一个 hyperv 虚拟交换机。 (仅限 hyperv 驱动程序)
  • --force=false 强制 minikube 执行可能有风险的操作
  • --force-systemd=false假如设置为 true,则强制容器运转时运用 systemd 作为 cgroup 管理器。默许false。
  • --host-dns-resolver=true 为 NAT DNS 请求启用主机解析器(仅限 virtualbox 驱动程序)
  • --host-only-cidr='172.16.5.1/24' 需求用于 minikube 虚拟机的 CIDR(仅限 virtualbox 驱动程序)

更多装备参数请参阅 minikube help start

指令详解

以下是 minikube 一些常用根本指令

  • minikube stop 停止正在运转的本地 Kubernetes 集群
  • minikube start 发动本地 Kubernetes 集群
  • minikube pause 暂停 Kubernetes
  • minikube status 获取本地 Kubernetes 集群状况
  • minikube delete 删去本地的 Kubernetes 集群
  • minikube addons 启用或禁用 minikube 插件
  • minikube config 修正耐久装备值
  • minikube profile 获取或列出当前装备文件(集群)
  • minikube unpause 恢复 Kubernetes
  • minikube dashboard 拜访在 minikube 集群中运转的 kubernetes dashboard
  • minikube update-context IP或端口更改的情况下更新 kubeconfig 装备文件

更多指令请参阅 minikube help

创立集群

  1. 在管理员终端(如 powershell)中运转以下指令运用 Minikube 创立 根据 Hyper-V 环境的 Kubernetes 集群
    minikube start --image-mirror-country cn --registry-mirror=https://vgyjvvce.mirror.aliyuncs.com --vm-driver="hyperv" --hyperv-virtual-switch="MinikubeSwitch" --memory=4096 --cpus=2 --disk-size='81920mb'
    
  2. 在管理员终端(如 powershell)中运转以下指令 翻开 minikube metrics-server 插件
    minikube addons enable metrics-server
    
  3. 在管理员终端(如 powershell)中运转以下指令 翻开 Kubernetes Dashboard
    minikube dashboard
    

测试体会

  1. 运转布置 hello-minikube 示例服务
    kubectl create deployment hello-minikube --image=registry.aliyuncs.com/google_containers/echoserver:1.10
    
  2. 将示例程序 pod 暴露他的端口设置为:8080
    kubectl expose deployment hello-minikube --type=NodePort --port=8080
    
  3. 检查示例服务状况
    kubectl get pod
    
  4. 检查示例服务拜访地址
    minikube service hello-minikube --url
    
  5. 将示例服务端口转发到本机的端口,这样供应外界拜访
    kubectl port-forward --address 0.0.0.0 service/hello-minikube  7080:8080
    
  6. 拜访本机地址hrrp://127.0.0.1:7080 将输出以下内容:
    Hostname: hello-minikube-5988bff7b8-k2tdw
    Pod Information:
        -no pod information available-
    Server values:
        server_version=nginx: 1.13.3 - lua: 10008
    Request Information:
        client_address=127.0.0.1
        method=GET
        real path=/
        query=
        request_version=1.1
        request_scheme=http
        request_uri=http://127.0.0.1:8080/
    Request Headers:
        accept=text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
        accept-encoding=gzip, deflate, br
        accept-language=zh-CN,zh;q=0.9
        connection=keep-alive
        host=127.0.0.1:7080
        sec-ch-ua=&quot;Chromium&quot;;v=&quot;116&quot;, &quot;Not)A;Brand&quot;;v=&quot;24&quot;, &quot;Google Chrome&quot;;v=&quot;116&quot;
        sec-ch-ua-mobile=?0
        sec-ch-ua-platform=&quot;Windows&quot;
        sec-fetch-dest=document
        sec-fetch-mode=navigate
        sec-fetch-site=none
        sec-fetch-user=?1
        upgrade-insecure-requests=1
        user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
    Request Body:
        -no body in request-
    
  7. 毁掉删去示例服务 hello-minikube
    kubectl delete -n default service hello-minikube
    kubectl delete -n default deployment hello-minikube
    

删去集群

试验完成 咱们能够通过 管理员终端(如 powershell ) 运转以下指令铲除试验环境

minikube delete --all
del ~/.minikube

参阅资料

  • kubectl
  • minikube