一、Minikube 简介
1、什么是Minikube?
Minikube是一种轻量化的Kubernetes集群,是Kubernetes社区为了帮助开发者和学习者能够更好学习和体验k8s功能而推出的,借助个人PC的虚拟化环境就可以实现Kubernetes的快速构建启动。目前已支持在macOS、Linux、Windows平台上利用各类本地虚拟化环境作为驱动运行。
1)配置需求
2核 CPU 及以上
2G 空闲的内存
20G 空闲磁盘空间
可以连接Internet(用于下载组件)
容器或着虚拟机底座,诸如 Docker、Hyperkit、 Hyper-V、KVM、 Parallels、 Podman、 VirtualBox,、 VMWare
2)常用驱动
Minikube在不同操作系统上支持不同的驱动,具体如下:
- macOS
- xhyve driver , VirtualBox 或 VMware Fusion
- Docker 缺省驱动
- Linux
- VirtualBox 或 KVM2
- Docker 缺省驱动
- Windows
⚠️ 注意:
由于minikube复用了docker-machine,在其软件包中已经支持了相应的VirtualBox, VMware Fusion驱动
VT-x/AMD-v 虚拟化必须在 BIOS 中开启
在Windows环境下,如果开启了Hyper-V,不支持VirtualBox方式
2、Minikube 和 Kubernetes 的区别
1)Kubernetes 集群的架构:
通常情况下,一套完整的Kubernetes集群至少需要包括master
节点和node
节点,下图是常规k8s的集群架构,master
节点一般是独立的,用于协调调试其它节点之用,而容器实际运行都是在node节点上,kubectl
位于 master
节点。
2)Minikube 的架构:
下图是 Minikube 的架构,可以看出,master
节点与其它节点合为一体,而整体则通过宿主机上的 kubectl
进行管理,这样可以更加节省资源。
3、Minikube 的基本运作原理
简单来说就是,用户使用Minikube CLI管理虚拟机上的Kubernetes环境,比如:启动,停止,删除,获取状态等。一旦Minikube虚拟机启动,用户就可以使用熟悉的Kubectl CLI在Kubernetes集群上执行操作。
Minikube运作的基本原理如下所示:
- A: Minikube 在PC本地生成
kubeconfig
配置文件- B: Minikube 在虚拟环境中创建 Minikube 虚拟机
- C: Minikube 在虚拟机中构建 Kubernetes
- D: Kubectl 通过
kubeconfig
对虚机中的 Kubernetes 进行管理
二、各环境安装部署
1、macOS
1)环境
参数 | 版本描述 |
---|---|
OS | macOS Catalina v10.15.7 |
docker desktop | docker version v19.03.13 |
kubectl | kubectl version v1.18.8 |
Kubernetes | kubernetes version v1.18.8 |
Virtual Machine | Oracle VirtualBox v6.1.22 |
2)安装 kubectl
1. 使用二进制包安装
⚠️注意: 由于Apple M1的芯片使用的底层架构不同,故在下载二进制包时需要针对性下载适合对应架构的包,如果使用的 macOS为 2021款 Big Sur的 Mac 都是使用的 M1芯片,具体可以在
左上角🍎 => 关于本机
中查看处理器型号。
1⃣️ 下载二进制包
Intel 芯片(amd64):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
Apple M1 芯片(arm64):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
2⃣️ 下载校验文件
Intel 芯片(amd64):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256"
Apple M1 芯片(arm64):
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl.sha256"
3⃣️ md5 校验
⚠️注意: 不要使用与二进制包不同版本的校验文件进行校验,否则校验必定失败
echo "$(<kubectl.sha256) kubectl" | shasum -a 256 --check
如果验证通过,返回:
kubectl: OK
如果验证失败,返回:
kubectl: FAILED
shasum: WARNING: 1 computed checksum did NOT match
4⃣️ 赋予执行权限
chmod +x ./kubectl
5⃣️ 移动到PATH
可识别路径
sudo mv ./kubectl /usr/local/bin/kubectl
6⃣️ 查询版本(验证)
kubectl version --client
正常返回类型下面:
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"darwin/amd64"}
2. 使用Homebrew安装(推荐)
Homebrew 安装方法:
1⃣️ 安装:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
2⃣️ 升级:
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow brew update
执行以下命令,自动安装 kubectl
最新稳定版:
brew install kubectl
3)安装virtualBox(低版本minikube必须)
新版本的Minikube已经不需要再依赖于VM做为底层,也可以通过docker直接作为底层驱动,并且在起步资源方面需求量更小。但是处于学习目的,这边还是介绍一下 VM的方便。
⚠️注意: 必须在 BIOS 中 开启 VT-x/AMD-v 虚拟化,否则无法启用虚拟机。这里选用通用性更强的
VirtualBox
下载地址 (当前最新版本6.1)
下载对应版本的dmg,一路安装即可,要注意的是:安装过程中,可能会弹出一个系统安全相关的对话框,一定要允许,并在Security&Privacy 这里,把VirtualBox勾上,否则minikube会无法启动。
4)安装 minikube
⚠️注意: 官方出品的minikube,默认连接的是google官方站点,正常情况下国内是无法访问。可以使用阿里版的minikube
执行以下命令,进行自动安装:
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.18.1/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
5)创建集群
1. 启动参数说明
参数 | 说明 |
---|---|
**--driver=***** | 从1.5.0版本开始,Minikube缺省使用本地最好的驱动来创建Kubernetes本地环境,测试过的版本 docker , kvm
|
--image-mirror-country cn | 将缺省利用 registry.cn-hangzhou.aliyuncs.com/google_containers 作为安装Kubernetes的容器镜像仓库 (阿里云版本可选) |
**--iso-url=***** | 利用阿里云的镜像地址下载相应的 .iso 文件 (阿里云版本可选) |
**--registry-mirror=***** | 为了拉取Docker Hub镜像,需要为 Docker daemon 配置镜像加速,参考阿里云镜像服务 |
--cpus=2 | 为minikube虚拟机分配CPU核数 |
--memory=2048mb | 为minikube虚拟机分配内存数 |
**--kubernetes-version=***** | minikube 虚拟机将使用的 kubernetes 版本 |
**--insecure-registry=***** | 设置私有镜像仓库地址,跟私有仓库的域名或者IP:Port |
2. 启动minikube
为保持kubernetes的版本和kubectl的版本一致,所以这里使用
1.18.8
版本,具体选择可以根据个人需要自定,默认minikube 1.18.1 已支持 kubernetes 1.20.x
minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version=1.18.8
正常启动,结果如下:
⚠️注意: 如果首次失败了(比如:步骤一中的安全设置没勾选,导致无法启用),可以先尝试minikute delete 删除现有虚机,删除
~/.minikube
目录缓存的文件。然后重新创建 minikube环境,升级minikube同理。minikube 1.5.0 之后的版本最自动选择最优的驱动方式启动minikube,默认会使用 docker 启动,在 docker desktop dashboard 中可以找到,相较于使用 vm启动,docker作为驱动所需的默认资源更小。
3. 启动minikube dashboard
minikube dashboard
正常启动,结果如下:
浏览器会自动打开 dashboard Overview:
4. kubectl测试
1⃣️ 查看集群信息
kubectl cluster-info
集群启动正常,返回如下:
2⃣️ 查看节点信息
kubectl get node -A
正常返回如下:
2、Linux
1)环境
参数 | 版本描述 |
---|---|
OS | CentOS Linux release 7.9.2009 (Core) |
docker | docker version v 20.10.7 |
kubectl | kubectl version v1.18.8 |
Kubernetes | kubernetes version v1.18.8 |
2)安装 kubectl
1.使用二进制包安装
1⃣️ 下载二进制包
wget -c "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
⚠️注意: 使用
$(curl -L -s https://dl.k8s.io/release/stable.txt)
时下载的为最新稳定版本的发行版,如果要下载指定版本的发行版,可以执行如下命令,以下载 v1.21.0为例:wget -c https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl
2⃣️ 下载校验文件
wget -c "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
⚠️注意: 不要使用与二进制包不同版本的校验文件进行校验,否则校验必定失败,如果要下载指定版本的校验文件,可以执行如下命令,以下载 v1.21.0 为例:
wget -c https://dl.k8s.io/release/v1.21.0/bin/linux/amd64/kubectl.sha256
3⃣️ md5校验:
echo "$(<kubectl.sha256) kubectl" | sha256sum --check
如果验证通过,返回:
kubectl: OK
如果验证失败,返回:
kubectl: FAILED
shasum: WARNING: 1 computed checksum did NOT match
4⃣️ 安装kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
⚠️注意: 如果没有root权限,也可以在安装在对应用户的home目录
~/.local/bin
下:mkdir -p ~/.local/bin/kubectl mv ./kubectl ~/.local/bin/kubectl
最后将
~/.local/bin/kubectl
添加至$PATH
,使其可被识别。
5⃣️ 查询版本(验证)
kubectl version --client
正常返回如下:
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.18", GitCommit:"6f6ce59dc8fefde25a3ba0ef0047f4ec6662ef24", GitTreeState:"clean", BuildDate:"2021-04-15T03:31:30Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
2.使用包管理器安装
1⃣️ yum(红帽系Linux发行版)
镜像源制作:
⚠️注意: 官方使用的是google源
https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
,国内正常情况使用不了,故这里推荐使用阿里云的源https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum安装kubectl:
yum install -y kubectl
2⃣️ apt(Debian系Linux发行版)
升级 apt
并安装依赖:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
添加认证公钥:
⚠️注意: 官方使用的是google源
https://packages.cloud.google.com/apt/doc/apt-key.gpg
,国内正常情况使用不了,故这里推荐使用阿里云的源https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
添加 api
镜像源:
⚠️注意: 官方使用的是debian官方源,国内正常情况使用不了,故这里推荐使用阿里云的
kubeadm
源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt安装kubectl
apt-get update
apt-get install -y kubectl
3)安装 minikube
⚠️注意: 官方出品的minikube,默认连接的是google官方站点,正常情况下国内是无法访问。可以使用阿里版的minikube
执行以下命令,进行自动安装:
curl -Lo minikube https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.18.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
4)创建集群
1. 系统参数优化
默认情况下,kubernetes对于系统参数有一定的预设值要求,如果不满足要求,就会导致启动时出现异常,比如如下情况:
由于参数
nf_conntrack_max(系统丢包限制)
未能达到要求值的131072
,因此导致kube-proxy
启动异常,并且导致 minikube 内部无法与外部通信,因而拉取镜像时就会失败,服务就无法正常启动,因此就需要对该参数进行调整,否则将无法正常使用minikube。执行以下命令,可以查看当前系统丢包限制:
sysctl net.netfilter.nf_conntrack_max
执行以下命令,则可以查看当前是否超限:
sysctl net.netfilter.nf_conntrack_count
0⃣️ k8s内核参数优化模版:
新建文件 /etc/sysctl.d/kubernetes.conf
,sysctl 会读取 /etc/sysctl.d/
下的子配置文件。模版内容如下:
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=131072
net.netfilter.nf_conntrack_max
的值根据具体反馈的值来设置为准。
执行如下命令加载内核参数配置(立刻生效):
sysctl -p /etc/sysctl.d/kubernetes.conf
⚠️注意: 如果执行上述命令出错,错误信息如下:
sysctl: cannot stat /proc/sys/net/netfilter/nf_conntrack_max: No such file or directory
则可能是
conntrack
没有被加载,执行如下命令查看:lsmod |grep conntrack
如何返回是空,表示没有加载,那执行如下命令加载即可:
modprobe ip_conntrack
再次执行
lsmod |grep conntrack
验证,如果正常,反馈类似下图:然后再次加载内核优化配置就可以了。
2. root用户冲突解决
⚠️注意: 使用docker作为 minikube的驱动,不能使用 root 用户,否则将会出现如下报错:
解决方案如下:
方案一:
1⃣️ 创建普通用户作为启动用户
useradd -g docker -G wheel minikube
-g: 默认组(用户登录时就是这个组) -G: 其他群组 wheel:sudo组(加到这个组里才会有sudo权限)
2⃣️ 设置启动用户密码
passwd minikube
方案二:
切换使用普通用户进行操作,执行如下命令:
minikube start --driver=docker
反馈如下:
根据提示,将用户添加至docker组,执行如下命令(需要root操作或sudo提权):
usermod -aG docker minikube && newgrp docker
以上两种方案仍选其一,执行完成后,再次启动minikube。
3. 启动minikube
为保持kubernetes的版本和kubectl的版本一致,所以这里使用
1.18.8
版本,具体选择可以根据个人需要自定,默认minikube 1.18.1 已支持 kubernetes 1.20.x
minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version=1.18.8
正常启动,结果如下:
4. kubectl测试
1⃣️ 查看集群信息
kubectl cluster-info
正常返回如下:
2⃣️ 查看节点信息
kubectl get node
正常返回如下:
3⃣️ 查看内部服务组件
kubectl get pod -A
5)启动 minikube dashboard
1. 用服务器内网 IP 访问 dashboard
⚠️注意:
正常启动过的情况下,dashboard 默认会以本地回环地址拉起proxy,我们执行以下命令:
minikube dashboard --url
由于centos按照最小化安装是没有浏览器的,也没有图形化功能,所以这边使用了
--url
参数,这将不掉用浏览器,而直接返回可用户访问的 endpoint,正常启动成功,结果如下:但是,由于我们是部署在服务器上,从外部访问又无法访问服务器的回环地址,因此我们需要做代理,来实现外部访问,下面介绍具体方法:
1⃣️ 在终端开启本地IP代理窗口
kubectl proxy --port=45396 --address='0.0.0.0' --disable-filter=true --accept-hosts='^.*'
这里使用
0.0.0.0
,旨在可以使公网网卡也监听端口,方便我们外部访问,如果VPC环境的话,需要本地IP段和服务器IP段打通,否则就需要做端口映射,将端口暴露出来,这里的端口可以随便指定未占用的端口,也可以不使用--port
参数,这样会随机分配一个端口 。
proxy控制台启动成功,返回如下,开启本地 45396
端口监听:
2⃣️ 获取k8s api endpoint
再次运行 minikube dashboard --url
,将获取到的 endpoint 的 IP:Port 替换成外部IP:45396
,再在本地浏览器中访问以下地址:
http://192.168.3.224:45396/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
一切正常的话,就可以访问 minikube dashboard 了:
2. 安装图形化界面,通过服务器浏览器启动 dashboard
⚠️注意: minikube的 dashboard 默认需要默认浏览器的支持,而一般性如果我们是按照最小化原则安装的centos系统,是不包含图形化组件的,也不包含浏览器,因此直接启动
minikube dashboard
是无法正常使用的。那么如果要正常使用minikube dashboard
,就需要安装GUI包和浏览器,下面介绍下下具体方法:
1⃣️ 安装 GUI组件包
yum groupinstall -y 'X Window System' 'GNOME'
安装成功,返回如下:
2⃣️ 安装火狐浏览器
yum install -y firefox
安装成功,返回如下:
3⃣️ 升级内核(可选项)
yum update -y
4⃣️ 启动图形化界面
startx
图形化界面打开后,一路 next(skip)后,就可以正常访问图形化桌面了:
🚩 拓展知识: 开机启动图形化界面
1⃣️ 查看当前开机启动模式:
以 root用户身份在命令行中执行如下命令:
systemctl get-default
graphical.target
代表开机时启动图形化界面
multi-user.target
代表开机时启动dos界面2⃣️ 设置开机启动图形界面:
以 root用户身份在命令行中执行如下命令:
systemctl set-default graphical.target
同理,如果想开机启动dos界面,就输入如下命令:
systemctl set-default multi-user.target
3⃣️ dos界面与图形化界面切换快捷键:
图形到dos:ctrl+alt+f2
dos到图形:输入startx
或者
在命令上输入 init 3 命令 切换到dos界面
输入 init 5命令 切换到图形界面
5⃣️ 重新访问 dashboard
在左上角 Applications - System Tools
中打开终端:
在终端中执行如下命令:
minikube dashboard
minikube 就会自动调用默认的浏览器(之前安装的火狐)拉起 dashboard:
3、Windows
作为个人开发者,个人并不推荐使用 windows 系统作为kubernetes的运行环境,究其原因有很多,最主要的原因在于 windows 要安装docker 需要依赖Hyper-V(微软开发的虚拟机),一旦开启了就无法再使用 VirtualBox 或 Vmware 等VM,且本身和docker的相性就比较一般,而docker目前已基本为识别为 Minikube 的最佳驱动,因此,综上所述在此仅做简单介绍。
1)环境
参数 | 版本描述 |
---|---|
OS | Windows 10 |
docker desktop | docker version v19.03.13 |
kubectl | kubectl version v1.18.8 |
Kubernetes | kubernetes version v1.18.8 |
Virtual Machine | Hypervisor |
参考文档:
三、Minikube 基础操作
1、基础命令行
启动并运行一个集群:
minikube start
访问 minikube中的 k8s dashboard
minikube dashboard
当你启动了 minikube 后,你可以像操作其他k8s集群一样,通过kubectl
进行集群管理,比如创建一个服务:
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
以 NodePort
的形式暴露一个服务:
kubectl expose deployment hello-minikube --type=NodePort --port=8080
使用minikube在浏览器中快速打开服务放出的endpoint
:
minikube service hello-minikube
升级集群:
minikube start --kubernetes-version=latest
启动另一个本地集群:
⚠️注意: 如果 minikube 运作在 裸金属/none 驱动时,将不生效
minikube start -p cluster2
停止一个集群:
minikube stop
删除一个集群:
minikube delete
删除本地所有集群和配置:
minikube delete --all
2、发布应用
1)通过 kubectl 发布服务
1. 创建服务:
kubectl create deployment hello-minikube1 --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10
2. 暴露端口:
kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080
3. 查看映射端口
export PORT=$(kubectl get svc hello-minikube1 -o go-template='{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}')
# 查看端口
echo $PORT
4. 访问端口
minikube service hello-minikube1
5. 删除服务
kubectl delete deployment -n default hello-minikube1 --force --grace-period=0
2)通过 Addons 管理插件
Minikube 自带了一个内置应用列表,包括诸如 Istio、Ingress 等,可以方便快速部署插件。
1. 查询插件列表
minikube addons list
输出如下:
|-----------------------------|----------|--------------|
| ADDON NAME | PROFILE | STATUS |
|-----------------------------|----------|--------------|
| ambassador | minikube | disabled |
| auto-pause | minikube | disabled |
| csi-hostpath-driver | minikube | disabled |
| dashboard | minikube | enabled ✅ |
| default-storageclass | minikube | enabled ✅ |
| efk | minikube | disabled |
| freshpod | minikube | disabled |
| gcp-auth | minikube | disabled |
| gvisor | minikube | disabled |
| helm-tiller | minikube | disabled |
| ingress | minikube | disabled |
| ingress-dns | minikube | disabled |
| istio | minikube | disabled |
| istio-provisioner | minikube | disabled |
| kubevirt | minikube | disabled |
| logviewer | minikube | disabled |
| metallb | minikube | disabled |
| metrics-server | minikube | disabled |
| nvidia-driver-installer | minikube | disabled |
| nvidia-gpu-device-plugin | minikube | disabled |
| olm | minikube | disabled |
| pod-security-policy | minikube | disabled |
| registry | minikube | disabled |
| registry-aliases | minikube | disabled |
| registry-creds | minikube | disabled |
| storage-provisioner | minikube | enabled ✅ |
| storage-provisioner-gluster | minikube | disabled |
| volumesnapshots | minikube | disabled |
|-----------------------------|----------|--------------|
2. 启用指定插件
minikube addons enable <name>
3. 同时启用多个插件
minikube start --addons <name1> --addons <name2>
4. 在浏览器打开插件暴露出的endpoint
minikube addons open <name>
5. 停用指定插件
minikube addons disable <name>
3、访问应用
1)NodePort 方式访问
NodePort 方式是访问服务最基础的方式,顾名思义,就是将端口映射到本地,并通过本地的 IP + 映射的端口访问服务放出的 endpoint,这种方式下,服务会共用 VM 的 IP。
1. 使用service命令访问 endpoint
minikube 内置的 service
命令可以快速访问服务放出的endpoint
,并在浏览器中打开
minikube service --url <service-name>
2. 使用 kubectl
获取 nodePort 端口
通过minikube ip
命令可以获取到虚拟机的IP地址,执行以下命令,可以获取到服务映射的 nodePort 端口
kubectl get service <service-name> --output='jsonpath="{.spec.ports[0].nodePort}"'
3. 扩展 NodePort 的范围
一般来说,minikube 包括的端口范围为 30000-32767
,如果不够的话,可以通过如下命令进行扩展
minikube start --extra-config=apiserver.service-node-port-range=1-65535
2)LoadBalancer 方式访问
LoadBalancer 方式,是将服务暴露到公网中的标准方法,使用这种方法,每一个服务都有其独立的IP。
以
LoadBalancer
方式暴露的服务需要通过minikube tunnel
命令访问,并且必须在一个独立的终端窗口保持LoadBalancer
运行,使用Ctrl-C
可以退出进程,但是相关的路由信息将会被情况
1. 使用 minikube tunnel
在独立的终端运行 tunnel,它会在k8s的CIDR中新增路由规则,将集群的IP地址作为网关,tunnel
命令会将服务的外部访问IP直接暴露给主机操作系统上运行的所有程序。
minikube tunnel
2. 创建一个deployment
kubectl create deployment hello-minikube1 --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.10
检查服务:
kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube1-7587585f9-pn6l2 1/1 Running 0 37s
3. 创建LB服务,将服务暴露出来
kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080
tunnel 终端窗口会弹出:
🏃 Starting tunnel for service hello-minikube1.
4. 查看外部访问IP
kubectl get svc
正常返回如下:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 LoadBalancer 10.97.227.83 127.0.0.1 8080:31546/TCP 72s
⚠️注意: 如果没有开启
minikube tunnel
窗口的话,服务的EXTERNAL-IP
将会显示pending
5. 在浏览器中访问服务(通过IP:Port)
打开浏览器,访问http://127.0.0.1:8080
,(确保服务没有proxy设置)
4、Minikube Dashboard
1)基础使用
执行以下命令,访问 dashboard:
minikube dashboard
这将会开启 dashboard 插件,,并自动在默认浏览器中开启代理的 endpoint,同样,这也需要在终端中保持进程运行,使用Ctrl + C 结束代理,之后 dashboard 将不能使用。
⚠️注意: 默认浏览器是不能以 root 用户的身份开启的,minikube 同样默认不能以 root 用户身份启动。
2)获取 dashboard 的URL
如果你不想直接在浏览器中打开代理,也可以执行以下命令,这会只返回可访问的URL地址:
minikube dashboard --url
3)界面使用
minikube 的 dashboard,即 Kubernetes 默认的 dashboard,具体可见: dashboard官方文档
5、Minikube 的配置项
minikube 的大多户配置已做成了参数接口,具体可以查看,可以执行以下命令:
minikube start --help
这里使用的是阿里云版本的 minikube,已基本全部汉化,具体参数选项如下:
Starts a local Kubernetes cluster
Options:
--addons=[]: 启用插件。执行 `minikube addons list` 查看可用插件名称列表
--apiserver-ips=[]: 一组在为 kubernetes 生成的证书中使用的 apiserver IP
地址。如果您希望将此 apiserver 设置为可从机器外部访问,则可以使用这组
apiserver IP 地址
--apiserver-name='minikubeCA': The authoritative apiserver hostname for apiserver certificates
and connectivity. This can be used if you want to make the apiserver available from outside the
machine
--apiserver-names=[]: 一组在为 kubernetes 生成的证书中使用的 apiserver
名称。如果您希望将此 apiserver 设置为可从机器外部访问,则可以使用这组
apiserver 名称
--apiserver-port=8443: apiserver 侦听端口
--auto-update-drivers=true: 如果设置了,将自动更新驱动到最新版本。默认为
true。
--base-image='registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.18@sha256:ddd0c02d289e3a6fb4bba9a94435840666f4eb81484ff3e707b69c1c484aa45e':
The base image to use for docker/podman drivers. Intended for local development.
--cache-images=true: If true, cache docker images for the current bootstrapper and load them
into the machine. Always false with --driver=none.
--cni='': CNI plug-in to use. Valid options: auto, bridge, calico, cilium, flannel, kindnet,
or path to a CNI manifest (default: auto)
--container-runtime='docker': The container runtime to be used (docker, cri-o, containerd).
--cpus=2: Number of CPUs allocated to Kubernetes.
--cri-socket='': The cri socket path to be used.
--delete-on-failure=false: If set, delete the current cluster if start fails and try again.
Defaults to false.
--disable-driver-mounts=false: 停用由管理程序提供的文件系统装载
--disk-size='20000mb': 分配给 minikube
虚拟机的磁盘大小(格式:<数字>[<单位>],其中单位 = b、k、m 或 g)。
--dns-domain='cluster.local': The cluster dns domain name used in the Kubernetes cluster
--dns-proxy=false: 为 NAT DNS 请求启用代理(仅限 virtualbox 驱动程序)
--docker-env=[]: 传递给 Docker 守护进程的环境变量。(格式:键值对)
--docker-opt=[]: 指定要传递给 Docker
守护进程的任意标志。(格式:key=value)
--download-only=false: 如果为 true,仅会下载和缓存文件以备后用 -
不会安装或启动任何项。
--driver='': Driver is one of: virtualbox, parallels, vmwarefusion, hyperkit, vmware, docker,
ssh (defaults to auto-detect)
--dry-run=false: dry-run mode. Validates configuration, but does not mutate system state
--embed-certs=false: if true, will embed the certs in kubeconfig.
--enable-default-cni=false: DEPRECATED: Replaced by --cni=bridge
--extra-config=: A set of key=value pairs that describe configuration that may be passed to
different components.
The key should be '.' separated, and the first part before the dot is the component to apply the
configuration to.
Valid components are: kubelet, kubeadm, apiserver, controller-manager, etcd, proxy, scheduler
Valid kubeadm parameters: ignore-preflight-errors, dry-run, kubeconfig, kubeconfig-dir, node-name,
cri-socket, experimental-upload-certs, certificate-key, rootfs, skip-phases, pod-network-cidr
--feature-gates='': 一组用于描述 alpha
版功能/实验性功能的功能限制的键值对。
--force=false: 强制 minikube 执行可能有风险的操作
--force-systemd=false: If set, force the container runtime to use sytemd as cgroup manager.
Defaults to false.
--host-dns-resolver=true: 为 NAT DNS 请求启用主机解析器(仅限 virtualbox
驱动程序)
--host-only-cidr='192.168.99.1/24': 需要用于 minikube 虚拟机的 CIDR(仅限
virtualbox 驱动程序)
--host-only-nic-type='virtio': 网卡类型仅用于主机网络。Am79C970A, Am79C973,
82540EM, 82543GC, 82545EM 之一,或 virtio(仅限 VirtualBox 驱动程序)
--hyperkit-vpnkit-sock='': 用于网络连接的 VPNKit
套接字的位置。如果为空,则停用 Hyperkit VPNKitSock;如果为“auto”,则将
Docker 用于 Mac VPNKit 连接;否则使用指定的 VSock(仅限 hyperkit 驱动程序)
--hyperkit-vsock-ports=[]: 应在主机上公开为套接字的访客 VSock
端口列表(仅限 hyperkit 驱动程序)
--hyperv-external-adapter='': External Adapter on which external switch will be created if no
external switch is found. (hyperv driver only)
--hyperv-use-external-switch=false: Whether to use external switch over Default Switch if
virtual switch not explicitly specified. (hyperv driver only)
--hyperv-virtual-switch='': hyperv 虚拟交换机名称。默认为找到的第一个 hyperv
虚拟交换机。(仅限 hyperv 驱动程序)
--image-mirror-country='cn':
需要使用的镜像镜像的国家/地区代码。留空以使用全球代码。对于中国大陆用户,请将其设置为
cn。
--image-repository='': Alternative image repository to pull docker images from. This can be
used when you have limited access to gcr.io. Set it to "auto" to let minikube decide one for you.
For Chinese mainland users, you may use local gcr.io mirrors such as
registry.cn-hangzhou.aliyuncs.com/google_containers
--insecure-registry=[]: Insecure Docker registries to pass to the Docker daemon. The default
service CIDR range will automatically be added.
--install-addons=true: If set, install addons. Defaults to true.
--interactive=true: 允许用户提示以获取更多信息
--iso-url=[https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.18.0.iso]:
Locations to fetch the minikube ISO from.
--keep-context=false: 这将保留现有 kubectl 上下文并创建 minikube 上下文。
--kubernetes-version='': The Kubernetes version that the minikube VM will use (ex: v1.2.3,
'stable' for v1.20.2, 'latest' for v1.20.5-rc.0). Defaults to 'stable'.
--kvm-gpu=false: 在 minikube 中启用实验性 NVIDIA GPU 支持
--kvm-hidden=false: 向 minikube 中的访客隐藏管理程序签名(仅限 kvm2
驱动程序)
--kvm-network='default': KVM 网络名称。(仅限 kvm2 驱动程序)
--kvm-numa-count=1: Simulate numa node count in minikube, supported numa node count range is
1-8 (kvm2 driver only)
--kvm-qemu-uri='qemu:///system': KVM QEMU 连接 URI。(仅限 kvm2 驱动程序)
--memory='': Amount of RAM to allocate to Kubernetes (format: <number>[<unit>], where unit =
b, k, m or g).
--mount=false: This will start the mount daemon and automatically mount files into minikube.
--mount-string='/Users:/minikube-host': The argument to pass the minikube mount command on
start.
--namespace='default': The named space to activate after start
--nat-nic-type='virtio': NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM,
82543GC, 82545EM, or virtio (virtualbox driver only)
--native-ssh=true: Use native Golang SSH client (default true). Set to 'false' to use the
command line 'ssh' command when accessing the docker machine. Useful for the machine drivers when
they will not start with 'Waiting for SSH'.
--network='': network to run minikube with. Only available with the docker/podman drivers. If
left empty, minikube will create a new network.
--network-plugin='': Kubelet network plug-in to use (default: auto)
--nfs-share=[]: 通过 NFS 装载与访客共享的本地文件夹(仅限 hyperkit
驱动程序)
--nfs-shares-root='/nfsshares': NFS 共享的根目录位置,默认为 /nfsshares(仅限
hyperkit 驱动程序)
--no-vtx-check=false: 禁用在启动虚拟机之前检查硬件虚拟化的可用性(仅限
virtualbox 驱动程序)
-n, --nodes=1: The number of nodes to spin up. Defaults to 1.
-o, --output='text': Format to print stdout in. Options include: [text,json]
--ports=[]: List of ports that should be exposed (docker and podman driver only)
--preload=true: If set, download tarball of preloaded images if available to improve start
time. Defaults to true.
--registry-mirror=[]: 传递给 Docker 守护进程的注册表镜像
--service-cluster-ip-range='10.96.0.0/12': 需要用于服务集群 IP 的 CIDR。
--ssh-ip-address='': IP address (ssh driver only)
--ssh-key='': SSH key (ssh driver only)
--ssh-port=22: SSH port (ssh driver only)
--ssh-user='root': SSH user (ssh driver only)
--trace='': Send trace events. Options include: [gcp]
--uuid='': 提供虚拟机 UUID 以恢复 MAC 地址(仅限 hyperkit 驱动程序)
--vm=false: Filter to use only VM Drivers
--vm-driver='': DEPRECATED, use `driver` instead.
--wait=[apiserver,system_pods]: comma separated list of Kubernetes components to verify and
wait for after starting a cluster. defaults to "apiserver,system_pods", available options:
"apiserver,system_pods,default_sa,apps_running,node_ready,kubelet" . other acceptable values are
'all' or 'none', 'true' and 'false'
--wait-timeout=6m0s: max time to wait per Kubernetes or host to be healthy.
Usage:
minikube start [flags] [options]
Use "minikube options" for a list of global command-line options (applies to all commands).
参考文档:
https://kubernetes.io/docs/tasks/tools/
https://minikube.sigs.k8s.io/docs/start/
https://developer.aliyun.com/article/221687
https://blog.csdn.net/fly_leopard/article/details/108790217
https://www.cnblogs.com/yjmyzz/p/install-k8s-on-mac-using-minikube.html
https://blog.csdn.net/qq_38340601/article/details/108437017)