一、介绍
minikube 是一个本地k8s,聚焦于快捷构建k8s学习与开发环境,在有虚拟化的环境运行 minikube start即可运行。为我们除了可以利用minikube快速准备环境,也可以从另外一个角度再了解Kubernetes的信息。
官方网站
亮点
- 支持最新的Kubernetes发布镜像
- 跨平台(Linux,macOS,Windows)
- 可部署在虚拟机、容器或裸金属上
- 支持多种容器运行时(CRI-O,containerd,docker)
- 直连API endpoint 以更快的加载和构建镜像
- 支持高级特性如:负载均衡、文件系统挂载、特性网关、网络策略
- 使用插件来易于Kubernetes应用的安装
- 支持通用的CI环境
系统配置要求
- 2逻辑CPU
- 2GB内存
- 20GB磁盘
- 连接互联网
- 容器或虚拟机管理器
Docker、Podman、Parallels、Hyperkit
KVM、Hyper-V、VMware Fusion/Workstation、VirtualBox
我所使用的环境是CentOS7,使用Docker作为容器运行时。
二、安装
[yeqiyu@s168 ~]$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15.6M 100 15.6M 0 0 391k 0 0:00:40 0:00:40 --:--:-- 148k
[root@s168 ~]# sudo rpm -Uvh minikube-latest.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:minikube-1.25.2-0 ################################# [100%]
[yeqiyu@s168 ~]$ sudo rpm -Uvh minikube-latest.x86_64.rpm
三、启动
minikube start --image-mirror-country='cn'
在非root用户下,启动minikube
启动时指定--image-mirror-country='cn' ,可以使用阿里云的镜像站点,来提高资源下载速度。
[yeqiyu@s168 ~]$ minikube start --image-mirror-country='cn'
Centos 7.8.2003 上的 minikube v1.25.2
自动选择 docker 驱动。其他选项:none, ssh
正在使用镜像存储库 registry.cn-hangzhou.aliyuncs.com/google_containers
Starting control plane node minikube in cluster minikube
Pulling base image ...
registry.cn-hangzhou.aliyun...: 379.06 MiB / 379.06 MiB 100.00% 2.45 MiB
Creating docker container (CPUs=2, Memory=128900MB) ...
正在 Docker 20.10.12 中准备 Kubernetes v1.23.3…
kubelet.housekeeping-interval=5m
kubelet.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
kubeadm.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
kubectl.sha256: 64 B / 64 B [--------------------------] 100.00% ? p/s 0s
kubeadm: 43.12 MiB / 43.12 MiB [---------------] 100.00% 1.50 MiB p/s 29s
kubectl: 44.43 MiB / 44.43 MiB [---------------] 100.00% 1.51 MiB p/s 30s
kubelet: 118.75 MiB / 118.75 MiB [-------------] 100.00% 2.58 MiB p/s 46s
Generating certificates and keys ...
Booting up control plane ...
Configuring RBAC rules ...
Verifying Kubernetes components...
Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
Enabled addons: storage-provisioner, default-storageclass
kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
[yeqiyu@s168 ~]$
minikube已经启动完成。
可以通过minikube help start 查看更多帮助
四、管理集群
如果已经安装了kubectl,可以直接用kubectl命令管理集群。如
kubectl get pod -A
如果没安装,可以在kubectl前边加上minikube命令。
minikube kubectl --get pod -A
[yeqiyu@s168 ~]$ minikube kubectl -- get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-65c54cc984-7vmjg 1/1 Running 0 2d23h
kube-system etcd-minikube 1/1 Running 0 2d23h
kube-system kube-apiserver-minikube 1/1 Running 0 2d23h
kube-system kube-controller-manager-minikube 1/1 Running 0 2d23h
kube-system kube-proxy-mdpwp 1/1 Running 0 2d23h
kube-system kube-scheduler-minikube 1/1 Running 0 2d23h
kube-system storage-provisioner 1/1 Running 0 2d23h
kubernetes-dashboard dashboard-metrics-scraper-6ccbc78cd8-sqr6m 1/1 Running 0 29h
kubernetes-dashboard kubernetes-dashboard-6ddd477f4f-xsvnr 1/1 Running 0 29h
如果本地未安装kubectl,可以通过别名方式,后续可直接使用kubectl了。
alias kubectl="minikube kubectl --"
五、部署应用
部署一个hello-minikube应用,并暴露出8080端口
[yeqiyu@s168 ~]$ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
deployment.apps/hello-minikube created
[yeqiyu@s168 ~]$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed
查看服务状态
[yeqiyu@s168 ~]$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube NodePort 10.107.218.145 <none> 8080:30425/TCP 15m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22m
前文提到,本环境未安装kubectl,想通过minikube kubectl方式来管理集群,但是在创建deployment时,出现如下现象。
[yeqiyu@s168 ~]$ minikube kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
Error: unknown flag: --image
See 'minikube kubectl --help' for usage.
六、kubernetes控制台
执行命令 minikube dashboard
这里需要注意,如果是通过ssh连接至服务器,那么需要配置ssh的X11转发,否则会无法通过图形化调用远端Firefox。这是因为ssh工具不支持x11转发所致,更换为MobaXterm后,启动成功。
[yeqiyu@s168 ~]$ minikube dashboard
正在开启 dashboard ...
Using image registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.3.1
Using image registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7
正在验证 dashboard 运行情况 ...
Launching proxy ...
正在验证 proxy 运行状况 ...
Opening http://127.0.0.1:36943/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
START /bin/firefox "http://127.0.0.1:36943/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/"
Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Running without a11y support!
Error: no DISPLAY environment variable specified
xdg-open: no method available for opening 'http://127.0.0.1:36943/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/'
X Exiting due to HOST_BROWSER: failed to open browser: exit status 3
执行成功后,调用远端浏览器打开了页面。
七、删除集群
删除本地集群
minikube delte
[yeqiyu@s168 ~]$ minikube delete
正在删除 docker 中的“minikube”…
正在删除容器 "minikube" ...
正在移除 /home/yeqiyu/.minikube/machines/minikube…
Removed all traces of the "minikube" cluster.
删除集群和配置文件
minikube delte --all
[yeqiyu@s168 ~]$ minikube delete --all
成功删除所有配置文件
八、配置minikube
配置使用的逻辑cpu数量。
[yeqiyu@s168 ~]$ minikube config set cpus 4
! These changes will take effect upon a minikube delete and then a minikube start
[yeqiyu@s168 ~]$ minikube config get cpus
4
其他可配置选项
[yeqiyu@s168 ~]$ minikube config show
config modifies minikube config files using subcommands like "minikube config set driver kvm2"
Configurable fields:
* driver
* vm-driver
* container-runtime
* feature-gates
* v
* cpus
* disk-size
* host-only-cidr
* memory
* log_dir
* kubernetes-version
* iso-url
* WantUpdateNotification
* WantBetaUpdateNotification
* ReminderWaitPeriodInHours
* WantNoneDriverWarning
* WantVirtualBoxDriverWarning
* profile
* bootstrapper
* insecure-registry
* hyperv-virtual-switch
* disable-driver-mounts
* cache
* EmbedCerts
* native-ssh
Available Commands:
defaults Lists all valid default values for PROPERTY_NAME
get Gets the value of PROPERTY_NAME from the minikube config file
set Sets an individual value in a minikube config file
unset unsets an individual value in a minikube config file
view Display values currently set in the minikube config file
Usage:
minikube config SUBCOMMAND [flags] [options]
Use "minikube <command> --help" for more information about a given command.
Use "minikube options" for a list of global command-line options (applies to all commands).
九、minikube插件
使用插件可以帮助我们快速构建Kubernetes的扩展gongne
查看插件列表。
[yeqiyu@s168 ~]$ minikube addons list
|-----------------------------|----------|--------------|--------------------------------|
| ADDON NAME | PROFILE | STATUS | MAINTAINER |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador | minikube | disabled | third-party (ambassador) |
| auto-pause | minikube | disabled | google |
| csi-hostpath-driver | minikube | disabled | kubernetes |
| dashboard | minikube | enabled ✅ | kubernetes |
| default-storageclass | minikube | enabled ✅ | kubernetes |
| efk | minikube | disabled | third-party (elastic) |
| freshpod | minikube | disabled | google |
| gcp-auth | minikube | disabled | google |
| gvisor | minikube | disabled | google |
| helm-tiller | minikube | disabled | third-party (helm) |
| ingress | minikube | disabled | unknown (third-party) |
| ingress-dns | minikube | disabled | google |
| istio | minikube | disabled | third-party (istio) |
| istio-provisioner | minikube | disabled | third-party (istio) |
| kong | minikube | disabled | third-party (Kong HQ) |
| kubevirt | minikube | disabled | third-party (kubevirt) |
| logviewer | minikube | disabled | unknown (third-party) |
| metallb | minikube | disabled | third-party (metallb) |
| metrics-server | minikube | disabled | kubernetes |
| nvidia-driver-installer | minikube | disabled | google |
| nvidia-gpu-device-plugin | minikube | disabled | third-party (nvidia) |
| olm | minikube | disabled | third-party (operator |
| | | | framework) |
| pod-security-policy | minikube | disabled | unknown (third-party) |
| portainer | minikube | disabled | portainer.io |
| registry | minikube | disabled | google |
| registry-aliases | minikube | disabled | unknown (third-party) |
| registry-creds | minikube | disabled | third-party (upmc enterprises) |
| storage-provisioner | minikube | enabled ✅ | google |
| storage-provisioner-gluster | minikube | disabled | unknown (third-party) |
| volumesnapshots | minikube | disabled | kubernetes |
|-----------------------------|----------|--------------|--------------------------------|
安装插件
[yeqiyu@s168 ~]$ minikube addons enable ingress
- Using image registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
- Using image registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.1
- Using image registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1
* Verifying ingress addon...
* 启动 'ingress' 插件
参考资料
https://minikube.sigs.k8s.io