根据 Windows Hyper-V + Minikube 构建 Kubernetes 本地试验环境
Kubernetes官方为了便利咱们开发和体会Kubernetes,社区供应了能够在本地布置的开发环境 Minikube。由于网络拜访原因,许多朋友无法直接运用minikube进行试验。在v1.24.0的官方 Minikube 中,现已兼并了由阿里云团队支撑的计划,能够帮助咱们利用阿里云的服务来获取所需Docker镜像,二进制文件和装备,也能够完美支撑Minikube 丰厚的 addon 组件!
装备装置
环境要求
留意:windows体系只需求满足以下条件即可
- [✓] Windows 8 或以上版别
- [✓] 支撑虚拟化
- 在终端中运转指令
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 要求 虚拟机监视器模式扩展: 是 固件中已启用虚拟化: 是 二级地址转化: 是 数据执行维护可用: 是
- 敞开体系对
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 有多种方法进行装置 我这儿选用如下方法进行装置(更多装置方法):
- 直接下载最新版可执行文件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
- 手动将 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
之前重启管理员终端。 - 在终端中运转以下指令测试一下,确保 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
-
下载并运转最新版别的装置程序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
-
手动设置体系环境变量或许以 运用管理员终端(如
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
之前重启管理员终端。 -
在终端中运转以下指令测试一下,确保 kubectl 的版别和希望版别共同:
minikube version
装备 Hyper-V
(可选)
假如运用Hyper-V环境,咱们首要需求翻开Hyper-V管理器创立一个外部虚拟交换机,步骤如下:
- 翻开Hyper-V管理器
- 挑选虚拟交换机管理器
- 挑选
创立虚拟交换机(S)
- 装备虚拟机称号
Minikube Switch
及衔接类型并保存
运用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
创立集群
- 在管理员终端(如
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'
- 在管理员终端(如
powershell
)中运转以下指令 翻开minikube metrics-server
插件minikube addons enable metrics-server
- 在管理员终端(如
powershell
)中运转以下指令 翻开Kubernetes Dashboard
minikube dashboard
测试体会
- 运转布置
hello-minikube
示例服务kubectl create deployment hello-minikube --image=registry.aliyuncs.com/google_containers/echoserver:1.10
- 将示例程序
pod
暴露他的端口设置为:8080
kubectl expose deployment hello-minikube --type=NodePort --port=8080
- 检查示例服务状况
kubectl get pod
- 检查示例服务拜访地址
minikube service hello-minikube --url
- 将示例服务端口转发到本机的端口,这样供应外界拜访
kubectl port-forward --address 0.0.0.0 service/hello-minikube 7080:8080
- 拜访本机地址
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="Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116" sec-ch-ua-mobile=?0 sec-ch-ua-platform="Windows" 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-
- 毁掉删去示例服务
hello-minikube
kubectl delete -n default service hello-minikube kubectl delete -n default deployment hello-minikube
删去集群
试验完成 咱们能够通过 管理员终端(如 powershell
) 运转以下指令铲除试验环境
minikube delete --all
del ~/.minikube
参阅资料
- kubectl
- minikube