Minikube 快速入门手册

一、Minikube 简介

minikube logo.jpeg

Minikube官网

Minikube官方github

Kubernetes教程

1、什么是Minikube?

Minikube是一种轻量化的Kubernetes集群,是Kubernetes社区为了帮助开发者和学习者能够更好学习和体验k8s功能而推出的,借助个人PC的虚拟化环境就可以实现Kubernetes的快速构建启动。目前已支持在macOS、Linux、Windows平台上利用各类本地虚拟化环境作为驱动运行。

1)配置需求

2)常用驱动

Minikube在不同操作系统上支持不同的驱动,具体如下:

  • macOS
  • Linux
  • 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节点。

kubernetes cluster.png

2)Minikube 的架构:

下图是 Minikube 的架构,可以看出,master 节点与其它节点合为一体,而整体则通过宿主机上的 kubectl 进行管理,这样可以更加节省资源。

minikube cluster.png

3、Minikube 的基本运作原理

简单来说就是,用户使用Minikube CLI管理虚拟机上的Kubernetes环境,比如:启动,停止,删除,获取状态等。一旦Minikube虚拟机启动,用户就可以使用熟悉的Kubectl CLI在Kubernetes集群上执行操作。

Minikube运作的基本原理如下所示:

minikube.jpeg
  • 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

k8s官方文档 - 安装 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)

image-20210617161713190.png

下载对应版本的dmg,一路安装即可,要注意的是:安装过程中,可能会弹出一个系统安全相关的对话框,一定要允许,并在Security&Privacy 这里,把VirtualBox勾上,否则minikube会无法启动。

image-20210617161842788.png

4)安装 minikube

⚠️注意: 官方出品的minikube,默认连接的是google官方站点,正常情况下国内是无法访问。可以使用阿里版的minikube

阿里云容器服务 ACK

执行以下命令,进行自动安装:

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 

正常启动,结果如下:

image-20210617181210634.png

⚠️注意: 如果首次失败了(比如:步骤一中的安全设置没勾选,导致无法启用),可以先尝试minikute delete 删除现有虚机,删除 ~/.minikube 目录缓存的文件。然后重新创建 minikube环境,升级minikube同理。

minikube 1.5.0 之后的版本最自动选择最优的驱动方式启动minikube,默认会使用 docker 启动,在 docker desktop dashboard 中可以找到,相较于使用 vm启动,docker作为驱动所需的默认资源更小。

image-20210617181833745.png

3. 启动minikube dashboard

minikube dashboard

正常启动,结果如下:

image-20210617181547293.png

浏览器会自动打开 dashboard Overview:

image-20210617181531965.png

4. kubectl测试

1⃣️ 查看集群信息
kubectl cluster-info

集群启动正常,返回如下:

image-20210617181342037.png
2⃣️ 查看节点信息
kubectl get node -A

正常返回如下:

image-20210617181441072.png

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

阿里云容器服务 ACK

执行以下命令,进行自动安装:

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对于系统参数有一定的预设值要求,如果不满足要求,就会导致启动时出现异常,比如如下情况:

image-20210623204600777.png

由于参数 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
image-20210623205837741.png

则可能是 conntrack 没有被加载,执行如下命令查看:

lsmod |grep conntrack

如何返回是空,表示没有加载,那执行如下命令加载即可:

modprobe ip_conntrack

再次执行 lsmod |grep conntrack 验证,如果正常,反馈类似下图:

image-20210623210107481.png

然后再次加载内核优化配置就可以了。

2. root用户冲突解决

⚠️注意: 使用docker作为 minikube的驱动,不能使用 root 用户,否则将会出现如下报错:

image-20210618115513477.png

解决方案如下:


方案一:
1⃣️ 创建普通用户作为启动用户
useradd -g docker -G wheel minikube

-g: 默认组(用户登录时就是这个组) -G: 其他群组 wheel:sudo组(加到这个组里才会有sudo权限)

2⃣️ 设置启动用户密码
passwd minikube

方案二:

切换使用普通用户进行操作,执行如下命令:

minikube start --driver=docker

反馈如下:

image-20210618120509901.png

根据提示,将用户添加至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 

正常启动,结果如下:

image-20210618122349340.png

4. kubectl测试

1⃣️ 查看集群信息
kubectl cluster-info

正常返回如下:

image-20210618131220222.png
2⃣️ 查看节点信息
kubectl get node 

正常返回如下:

image-20210617181441072.png
3⃣️ 查看内部服务组件
kubectl get pod -A
image-20210623180636431.png

5)启动 minikube dashboard

1. 用服务器内网 IP 访问 dashboard

⚠️注意:

正常启动过的情况下,dashboard 默认会以本地回环地址拉起proxy,我们执行以下命令:

minikube dashboard --url

由于centos按照最小化安装是没有浏览器的,也没有图形化功能,所以这边使用了--url 参数,这将不掉用浏览器,而直接返回可用户访问的 endpoint,正常启动成功,结果如下:

image-20210623182617904.png

但是,由于我们是部署在服务器上,从外部访问又无法访问服务器的回环地址,因此我们需要做代理,来实现外部访问,下面介绍具体方法:

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 端口监听:

image-20210623200947007.png
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 了:

image-20210623201725539.png

2. 安装图形化界面,通过服务器浏览器启动 dashboard

⚠️注意: minikube的 dashboard 默认需要默认浏览器的支持,而一般性如果我们是按照最小化原则安装的centos系统,是不包含图形化组件的,也不包含浏览器,因此直接启动 minikube dashboard 是无法正常使用的。那么如果要正常使用 minikube dashboard ,就需要安装GUI包和浏览器,下面介绍下下具体方法:

1⃣️ 安装 GUI组件包
yum groupinstall -y 'X Window System' 'GNOME'

安装成功,返回如下:

image-20210623111952857.png
2⃣️ 安装火狐浏览器
yum install -y firefox

安装成功,返回如下:

image-20210623112238393.png
3⃣️ 升级内核(可选项)
yum update -y
4⃣️ 启动图形化界面
startx

图形化界面打开后,一路 next(skip)后,就可以正常访问图形化桌面了:

image-20210623202734625.png

🚩 拓展知识: 开机启动图形化界面

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 中打开终端:

image-20210623202844093.png

在终端中执行如下命令:

minikube dashboard
image-20210623203226621.png

minikube 就会自动调用默认的浏览器(之前安装的火狐)拉起 dashboard:

image-20210623203208183.png

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

参考文档:

Windows Docker 安装

windows安装minikube



三、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
image-20210621115031347.png

删除一个集群:

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
image-20210618171957253.png

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
image-20210621095923915.png

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设置)

image-20210621102111013.png

4、Minikube Dashboard

1)基础使用

执行以下命令,访问 dashboard:

minikube dashboard
image-20210621103951020.png

这将会开启 dashboard 插件,,并自动在默认浏览器中开启代理的 endpoint,同样,这也需要在终端中保持进程运行,使用Ctrl + C 结束代理,之后 dashboard 将不能使用。

⚠️注意: 默认浏览器是不能以 root 用户的身份开启的,minikube 同样默认不能以 root 用户身份启动。

2)获取 dashboard 的URL

如果你不想直接在浏览器中打开代理,也可以执行以下命令,这会只返回可访问的URL地址:

minikube dashboard --url
image-20210621104058380.png

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)

https://www.cnblogs.com/zhengchunyuan/p/12598210.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容