minikube 本地部署

363 阅读3分钟

Minikube 使用本地虚拟机环境部署 Kubernetes,其基本架构如下所示:

(1)安装

对应文档:minikube.sigs.k8s.io/docs/

本机环境:Apple M2

安装虚拟软件

对于 Linux,Minikube 也可以通过 –vm-driver=none 选项支持在本地系统里运行 Kubernetes 各个组件,而不是在虚拟机里。这种方式只依赖 Docker,不需要安装虚拟机软件。

对于 Linux 系统可以执行如下命令进行安装:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
   && sudo install minikube-linux-amd64 /usr/local/bin/minikube

Windows 系统可以直接下载安装包:minikube installer 进行安装。

Apple M1 芯片要选择“arm64”后缀,选错了就会因为 CPU 指令集不同而无法运行:

# 有代理可以直接访问国外网络,执行如下命令进行安装:
# 本环境使用这个,会报错:
$ brew cask install minikube
# 报错如下:
Error: `brew cask` is no longer a `brew` command. Use `brew <command> --cask` instead.

# 如果上述方式比较慢的话,也可以采用 curl 的方式
# Apple arm64
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64
sudo install minikube-darwin-arm64 /usr/local/bin/minikube

# 安装完,查看版本:
$ minikube version
minikube version: v1.28.0
commit: 986b1ebd987211ed16f8cc10aed7d2c42fc8392f

在这里使用的是 VirtualBox 作为虚拟机(注意 VirtualBox 需要 5.2 或是更高的版本),现在执行如下命令来部署和启动一个 Kubernetes 集群,在部署过程中会下载各个组件的镜像,由于镜像仓库在国外,请设置好系统全局代理:

$ minikube start --vm-driver=virtualbox
# 报错如下:
😄  minikube v1.28.0 on Darwin 12.4 (arm64)
✨  Using the virtualbox driver based on user configuration
❌  Exiting due to DRV_UNSUPPORTED_OS: The driver 'virtualbox' is not supported on darwin/arm64


# 机子 Apple M2,virtualbox7 用不了
# 最后使用如下命令:使用 docker 来启动
$ minikube start --driver=docker --alsologtostderr

# 拉镜像太慢,使用国内:
$ minikube start --driver=docker --alsologtostderr --image-mirror-country='cn'
I0120 21:17:10.703685   95565 start.go:506] kubectl: 1.26.0, cluster: 1.25.3 (minor skew: 1)
I0120 21:17:10.721769   95565 out.go:177] 🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

参考链接:Link

(2)使用

在 minikube 启动以后我们可以使用 kubectl 命令行工具和 minikube 集群进行交互,比如查看 Pod 的运行情况:

$ kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-7f8cbcb969-5vggj           1/1     Running   0          25m
kube-system   etcd-minikube                      1/1     Running   0          26m
kube-system   kube-apiserver-minikube            1/1     Running   0          26m
kube-system   kube-controller-manager-minikube   1/1     Running   0          26m
kube-system   kube-proxy-jlkd8                   1/1     Running   0          25m
kube-system   kube-scheduler-minikube            1/1     Running   0          26m
kube-system   storage-provisioner                1/1     Running   0          26m

# 使用别名,可以方面使用命令:
$ alias kubectl="minikube kubectl --"

启动 Dashboard:

$ minikube dashboard
🎉  Opening http://127.0.0.1:59256/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

集群部署和启动成功后,执行下面的命令部署一个测试用的应用到集群里来测试集群的正确性。 在 minikube 启动以后我们可以使用 kubectl 命令行工具和 minikube 集群进行交互,比如查看 Pod 的运行情况:

$ kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-7f8cbcb969-5vggj           1/1     Running   0          25m
kube-system   etcd-minikube                      1/1     Running   0          26m
kube-system   kube-apiserver-minikube            1/1     Running   0          26m
kube-system   kube-controller-manager-minikube   1/1     Running   0          26m
kube-system   kube-proxy-jlkd8                   1/1     Running   0          25m
kube-system   kube-scheduler-minikube            1/1     Running   0          26m
kube-system   storage-provisioner                1/1     Running   0          26m

# 使用别名,可以方面使用命令:
$ alias kubectl="minikube kubectl --"

启动 Dashboard:

$ minikube dashboard
🎉  Opening http://127.0.0.1:59256/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

集群部署和启动成功后,执行下面的命令部署一个测试用的应用到集群里来测试集群的正确性。

# 创建一个名为 hello-minikube 的 deployment 资源对象:
$ kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
deployment.apps/hello-minikube created

# 暴露出可供外部访问的服务端口, 并且指定创建的容器开放 8080 端口:
$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed

$ kubectl get services hello-minikube
NAME             TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort   10.104.176.162   <none>        8080:31005/TCP   15s


# 执行如下命令使 minikube 在浏览器自动打开暴露出来的 URL 地址:
$ minikube service hello-minikube
|-----------|----------------|-------------|---------------------------|
| NAMESPACE |      NAME      | TARGET PORT |            URL            |
|-----------|----------------|-------------|---------------------------|
| default   | hello-minikube |        8080 | http://192.168.49.2:31005 |
|-----------|----------------|-------------|---------------------------|
🏃  Starting tunnel for service hello-minikube.
|-----------|----------------|-------------|------------------------|
| NAMESPACE |      NAME      | TARGET PORT |          URL           |
|-----------|----------------|-------------|------------------------|
| default   | hello-minikube |             | http://127.0.0.1:49766 |
|-----------|----------------|-------------|------------------------|
🎉  Opening service default/hello-minikube in default browser...
❗  Because you are using a Docker driver on darwin, the terminal needs to be open to run it.


# 或者,使用 kubectl 转发端口:
$ kubectl port-forward service/hello-minikube 7080:8080
Forwarding from 127.0.0.1:7080 -> 8080
Forwarding from [::1]:7080 -> 8080

打开页面如下:

测试没有问题的话,可以删除服务和应用:

$ kubectl delete services hello-minikube
service "hello-minikube" deleted

$ kubectl delete deployment hello-minikube
deployment.apps "hello-minikube" deleted

Minikube 提供了大量的内建插件可以被设置为使用或是禁用,使用如下命令列出可以使用的插件:

$ minikube addons list
|-----------------------------|----------|--------------|--------------------------------|
|         ADDON NAME          | PROFILE  |    STATUS    |           MAINTAINER           |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador                  | minikube | disabled     | 3rd party (Ambassador)         |
| auto-pause                  | minikube | disabled     | Google                         |
| cloud-spanner               | minikube | disabled     | Google                         |
| csi-hostpath-driver         | minikube | disabled     | Kubernetes                     |
| dashboard                   | minikube | enabled ✅   | Kubernetes                     |
| default-storageclass        | minikube | enabled ✅   | Kubernetes                     |
| efk                         | minikube | disabled     | 3rd party (Elastic)            |

可以开启使用一个插件,比如 heapster:

$ minikube addons enable heapster
⌛  using metrics-server addon, heapster is deprecated
💡  metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
    ▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.1
🌟  The 'metrics-server' addon is enabled


# 查看创建的 pod 和 service,可以看到 heapster 插件已经被启用:
$ kubectl get pod,svc -n kube-system
NAME                                   READY   STATUS              RESTARTS   AGE
pod/coredns-7f8cbcb969-5vggj           1/1     Running             0          88m
pod/etcd-minikube                      1/1     Running             0          88m
pod/kube-apiserver-minikube            1/1     Running             0          88m
pod/kube-controller-manager-minikube   1/1     Running             0          88m
pod/kube-proxy-jlkd8                   1/1     Running             0          88m
pod/kube-scheduler-minikube            1/1     Running             0          88m
pod/metrics-server-c9fb666df-lpcfb     0/1     ContainerCreating   0          33s
pod/storage-provisioner                1/1     Running             0          88m

NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
service/kube-dns         ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   88m
service/metrics-server   ClusterIP   10.102.159.19   <none>        443/TCP                  33s


# 执行如下命令禁用 heapster 插件:
$ minikube addons disable heapster

管理你的集群:

# 查看集群状态:
# Kubernetes 集群里现在只有一个节点,名字就叫“minikube”,
# 类型是“Control Plane”,里面有 host、kubelet、apiserver 三个服务
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

# IP 地址是 192.168.49.2。
$ minikube node list
minikube	192.168.49.2

# 停止 K8s,不影响部署的应用:
$ minikube pause
# 取消暂停实例:
$ minikube unpause

# 停止集群:
$ minikube stop

# 删除所有集群
$ minikube delete --all

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情