使用minikube搭建k8s环境

一、介绍

        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.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

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水牧羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值