minikube 是一个本地k8s,聚焦于快捷构建k8s学习与开发环境,在有虚拟化的环境运行 minikube start即可运行。为我们除了可以利用minikube快速准备环境,也可以从另外一个角度再了解Kubernetes的信息。
官方网站https://minikube.sigs.k8s.io
亮点- 支持最新的Kubernetes发布镜像
- 跨平台(Linux,macOS,Windows)
- 可部署在虚拟机、容器或裸金属上
- 支持多种容器运行时(CRI-O,containerd,docker)
- 直连API endpoint 以更快的加载和构建镜像
- 支持高级特性如:负载均衡、文件系统挂载、特性网关、网络策略
- 使用插件来易于Kubernetes应用的安装
- 支持通用的CI环境
GitHub - minikube-ci/examples: Repository providing samples and testing for running kubernetes/minikube on various CI services
系统配置要求- 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.1458080:30425/TCP 15m kubernetes ClusterIP 10.96.0.1 443/TCP 22m
六、kubernetes控制台前文提到,本环境未安装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.
执行命令 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九、minikube插件--help" for more information about a given command. Use "minikube options" for a list of global command-line options (applies to all commands).
使用插件可以帮助我们快速构建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



