Kubernetes-本地部署测试集群

Kubernetes测试集群部署方案选型

快速部署Kubernetes有好几种可选方案,比如Minikube和Kind。

Minikube最先基于虚拟化实现(新版本也支持容器化实现这个方案)​,也就是通过VirtualBox或者KVM等在本地创建若干虚拟机,然后在虚拟机中运行Kubernetes集群,一个节点也就对应一台虚拟机。

Kind通过容器化实现,也就是通过Docker在本地启动若干容器,每个容器充当Kubernetes的一个节点,在容器内再运行容器化应用。

我们将分别通过kind和minikube在本地搭建测试集群。

我们将通过macOS平台作为开发环境,当然也可以通过Linux进行开发,至于Windows肯定也是可以用的,感兴趣的可以自行探索下。

minikube是用于快速搭建单节点kubernetes的工具,所以一般测试可能用minikube,他真的快速且方便安装一些组件,如果需要在多节点下进行快速测试那一般选择kind,也可以通过丰富的配置能力来实现目标,并且可以实现高可用集群等。

Kind 搭建测试集群

Kind工具介绍

官方文档地址:https://kind.sigs.k8s.io/
github仓库地址:https://github.com/kubernetes-sigs/kind
国内镜像仓库地址:https://gitcode.com/gh_mirrors/ki/kind/overview

kind 是一种使用 Docker 容器 nodes 运行本地 Kubernetes 集群的工具。 kind 主要是为了测试 Kubernetes 自身而设计的,但它也可用于本地开发或 CI。

Kind是Kubernetes In Docker的缩写,顾名思义,看起来是把k8s放到docker的意思。没错,kind创建k8s集群的基本原理就是:提前准备好k8s节点的镜像,通过docker启动容器,来模拟k8s的节点,从而组成完整的k8s集群。需要注意,kind创建的集群仅可用于开发、学习、测试等,不能用于生产环境。

Kind 功能

  • 快速创建集群:通过简单的命令行操作,快速创建单节点或多节点的Kubernetes集群。
  • 多版本支持:可以创建不同版本的Kubernetes集群,便于测试应用在新旧版本Kubernetes上的兼容性。
  • 集群配置:支持通过配置文件自定义集群的各种参数,包括节点数量、镜像、网络插件等。
  • 节点管理:可以方便地查看和管理集群中的各个节点,包括添加、删除节点等操作。
  • 集成开发环境:适用于本地开发,可直接在集群中部署和调试应用,快速迭代。
  • CI/CD集成:由于其轻量级和标准化的特点,非常适合集成到持续集成/持续部署流程中,自动化测试Kubernetes应用。

Kind 优点

简易安装和配置:kind极大地简化了Kubernetes集群的搭建过程,只需要Docker环境即可快速启动一个Kubernetes集群,无需额外的虚拟机或复杂的配置。
轻量级:由于是在Docker容器中运行,kind消耗的系统资源相对较少,适合在开发机器上运行,便于进行本地开发和测试。
灵活性:用户可以自定义集群配置,包括使用的Kubernetes版本、集群的网络插件、额外的容器运行时配置等,满足不同的测试和开发需求。
集成测试:对于CI/CD流程而言,kind提供了标准化的Kubernetes环境,有助于进行集成测试和验证应用在不同Kubernetes版本下的兼容性。
可扩展性:kind支持自定义集群配置文件,方便集成其他工具和服务,如Prometheus监控、Istio服务网格等,进行更复杂的测试和实验。

Kind 缺点

  • 性能限制:虽然kind适合开发和测试,但由于所有的节点都在同一个宿主机上运行,受制于宿主机资源,可能无法模拟生产环境的性能特征,也不适合高负载测试。
  • 网络复杂性:虽然kind支持多种网络插件,但与物理或VM-based集群相比,其网络行为可能有所不同,可能会影响到一些对网络有特定要求的应用的测试。
  • 资源隔离限制:因为所有组件运行在相同的宿主机上,资源隔离不如使用虚拟机的解决方案彻底,可能会出现容器间资源竞争的情况。

Kind 工作原理

Kind 使用容器来模拟每一个 Kubernetes 节点,并在容器里面运行 Systemd 。

容器里的 Systemd 托管了 Kubelet 和 Containerd ,然后容器内部的 Kubelet 把其它 Kubernetes 组件: Kube-Apiserver 、 Etcd 、 CNI 等等组件运行起来。

Kind 内部使用了 Kubeadm 这个工具来做集群的部署,包括高可用集群也是借助 Kubeadm 提供的特性来完成的。在高用集群下还会额外部署了一个 Nginx 来提供负载均衡 VIP。

Kind使用

Kind支持的指令

kind
kind creates and manages local Kubernetes clusters using Docker container 'nodes'

Usage:
  kind [command]

Available Commands:
  build       Build one of [node-image]
  completion  Output shell completion code for the specified shell (bash, zsh or fish)
  create      Creates one of [cluster]
  delete      Deletes one of [cluster]
  export      Exports one of [kubeconfig, logs]
  get         Gets one of [clusters, nodes, kubeconfig]
  help        Help about any command
  load        Loads images into nodes
  version     Prints the kind CLI version

Flags:
  -h, --help              help for kind
      --loglevel string   DEPRECATED: see -v instead
  -q, --quiet             silence all stderr output
  -v, --verbosity int32   info log verbosity, higher value produces more output
      --version           version for kind

Use "kind [command] --help" for more information about a command.

简单说下几个比较常用选项的含义:

  • build:用来从 Kubernetes 源代码构建一个新的镜像。
  • create:创建一个 Kubernetes 集群。
  • delete:删除一个 Kubernetes 集群。
  • get:可用来查看当前集群、节点信息以及 Kubectl 配置文件的地址。
  • load:从宿主机向 Kubernetes 节点内导入镜像。

kind 安装

在macOS下执行下面的命令:

brew install kind

使用Kind搭建Kubernetes环境

可以在Github上查看到Kind的发布记录:https://github.com/kubernetes-sigs/kind/releases
在其中可以找到不同版本对应的Node镜像。

搭建集群前置准备工作

mac白屏安装docker:https://docs.docker.com/desktop/install/mac-install/

先看一下目前本地的docker 镜像和容器信息:

~/workspace/king-devops git:[master]
sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

~/workspace/king-devops git:[master]
sudo docker image ls
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

本地是一个新的开发环境,所有很干净,如果需要清理本地的docker环境的话,可以参考下面的shell:

# 删除容器,支持多个
docker rm containerId1 containerId2

# 删除所有未使用的镜像
docker image prune -a

由于dockerhub被墙,拉取镜像可以使用DaoCloud的代理:镜像加速篇

  • 镜像加速:https://github.com/DaoCloud/public-image-mirror
  • 二进制文件加速:https://github.com/DaoCloud/public-binary-files-mirror
  • Helm 加速:https://github.com/DaoCloud/public-helm-charts-mirror

先docker 拉取该源,并修改tag:

sudo docker pull m.daocloud.io/docker.io/kindest/node:v1.31.0

sudo docker tag  m.daocloud.io/docker.io/kindest/node:v1.31.0  docker.io/kindest/node:v1.31.0

sudo docker rmi m.daocloud.io/docker.io/kindest/node:v1.31.0

结果:

sudo docker image ls
REPOSITORY     TAG       IMAGE ID       CREATED       SIZE
kindest/node   v1.31.0   b5cb8c3b1441   7 weeks ago   1.03GB

搭建单节点kind集群

命令:

sudo kind create cluster --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test

参数解释:

  • –image可以执行指定不同版本的镜像
  • –name可以指定集群名

会有类似的输出:

sudo kind create cluster --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test
Creating cluster "myk8s-test" ...
 ✓ Ensuring node image (kindest/node:v1.31.0) 🖼
 ✓ Preparing nodes 📦  
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
Set kubectl context to "kind-myk8s-test"
You can now use your cluster with:

kubectl cluster-info --context kind-myk8s-test

Have a nice day! 👋
Exporting logs for cluster "myk8s-test" to:
/tmp/972923639

查看通过kind创建的集群:

sudo kind get clusters
myk8s-test

已经成功创建了一个集群,并且集群名就是我们通过–name参数设置的。

查看容器信息:

sudo docker ps
CONTAINER ID   IMAGE                  COMMAND                   CREATED         STATUS         PORTS                       NAMES
8c764a962ab3   kindest/node:v1.31.0   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes   127.0.0.1:41625->6443/tcp   myk8s-test-control-plane

新增了一个容器,并且通过其容器名myk8s-test-control-plane,也可以与咱们创建的集群,对应上。

根据提示切换kubectl上下文集群:这在涉及到多集群时很实用

sudo kubectl cluster-info --context kind-myk8s-test

但是我个人更喜欢使用kubeconfig直接指定集群证书。

查看集群节点:

sudo kubectl get nodes    
NAME                       STATUS   ROLES           AGE     VERSION
myk8s-test-control-plane   Ready    control-plane   7m48s   v1.31.0

查看集群全部的pod:

sudo kubectl get pods -A -owide
NAMESPACE            NAME                                               READY   STATUS    RESTARTS   AGE     IP           NODE                       NOMINATED NODE   READINESS GATES
kube-system          coredns-6f6b679f8f-psnlz                           1/1     Running   0          8m3s    10.244.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          coredns-6f6b679f8f-q5p5w                           1/1     Running   0          8m3s    10.244.0.3   myk8s-test-control-plane   <none>           <none>
kube-system          etcd-myk8s-test-control-plane                      1/1     Running   0          8m11s   172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kindnet-vtcxf                                      1/1     Running   0          8m3s    172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kube-apiserver-myk8s-test-control-plane            1/1     Running   0          8m10s   172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kube-controller-manager-myk8s-test-control-plane   1/1     Running   0          8m10s   172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kube-proxy-2w5hj                                   1/1     Running   0          8m3s    172.18.0.2   myk8s-test-control-plane   <none>           <none>
kube-system          kube-scheduler-myk8s-test-control-plane            1/1     Running   0          8m10s   172.18.0.2   myk8s-test-control-plane   <none>           <none>
local-path-storage   local-path-provisioner-57c5987fd4-tjc2v            1/1     Running   0          8m3s    10.244.0.4   myk8s-test-control-plane   <none>           <none>

这里可以发现,该有的组件都有了。就是一个完整的master节点。
删除集群:

sudo kind delete cluster --name myk8s-test

搭建一主二从Kind集群

创建一个 test1.yaml 的文件,内容如下:

kind: Cluster
# 一共三个节点,一个主节点,两个从节点
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane  # 主节点
- role: worker  # 从节点
- role: worker  # 从节点

创建集群命令:

sudo kind create cluster --config=test1.yaml --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test

大概的输出:

sudo kind create cluster --config=test1.yaml --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test
Creating cluster "myk8s-test" ...
 ✓ Ensuring node image (kindest/node:v1.31.0) 🖼
 ✓ Preparing nodes 📦 📦 📦  
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
 ✓ Joining worker nodes 🚜 
Set kubectl context to "kind-myk8s-test"
You can now use your cluster with:

kubectl cluster-info --context kind-myk8s-test

Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
Exporting logs for cluster "myk8s-test" to:
/tmp/1302378959

切换kubectl上下文:

sudo kubectl cluster-info --context kind-myk8s-test

删除集群:

sudo kind delete cluster --name myk8s-test

搭建三主三从高可用kind集群

创建一个 test2.yaml 的文件,一共六个节点,三个 control-plane 节点,三个 workers 节点,内容如下:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker

创建高可用集群命令:

sudo kind create cluster --config=test2.yaml --name myk8s-test --image kindest/node:v1.31.0 --retain; sudo kind export logs --name myk8s-test

高可用集群时需要手动处理下镜像:

sudo docker pull m.daocloud.io/docker.io/kindest/haproxy:v20230606-42a2262b

sudo docker tag  m.daocloud.io/docker.io/kindest/haproxy:v20230606-42a2262b  docker.io/kindest/haproxy:v20230606-42a2262b

sudo docker rmi m.daocloud.io/docker.io/kindest/haproxy:v20230606-42a2262b

导出kind集群kubeconfig

导出命令:

sudo kind export kubeconfig --name=myk8s-test --kubeconfig=$HOME/.kube/config

Kind用法进阶

我们已经搭建了各种类型的集群,但是我们该怎么访问集群呢?

以前在使用docker时,如果需要访问docker内部署的服务,通常需要以端口映射的方式,将宿主机指定端口的流量,转发进docker的指定端口,既然kind集群是利用docker部署的node,那是不是通过端口映射就可以实现访问集群了呢?

如果我们需要部署服务时,怎么去拉取image呢,这里是要在container里部署container,所以镜像是存储在第一层container(node节点)里的,那么怎么讲image导入呢?

端口映射

设想一种场景:在Kind集群中运行一个Nginx容器服务,监听80端口对外暴露,这时在另一台机器上能不能访问Kind集群所在机器的80端口,进而访问这个Nginx服务呢?

其实不行,因为Kind集群是Docker内运行的,所以Kine集群内Nginx容器的80
端口和Kine集群所在的宿主机的80端口并不在同一个网络命名空间。

我们可以通过如下方式来配置端口映射,从而解决这类问题。

在配置文件中增加extraPortMappings配置项:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    listenAddress: "0.0.0.0"
    protocol: tcp
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker

这样,搭建出来的Kubernetes集群中使用NodePort暴露80端口或者使用hostNetwork方式暴露80端口的Pod就可以通过主机的80端口来访问了。

注意,这里仅配置了一个control-plane,其他的进行配置时,要注意端口不能冲突,即每一个node进行端口映射时,hostPort不能冲突。

暴露kube-apiserver

有时我们会在一台计算机上使用Kind搭建一套Kubernetes环境,在另一台机器上编写代码,这时会发现我们无法连接到Kind集群中的kube-apiserver来调试Operator程序。

其实这是因为默认配置下kube-apiserver监听127.0.0.1和随机端口,要从外部访问就需要把kube-apiserver监听的网卡改成非lo(代表127.0.0.1,即localhost)的对外网卡,比如eth0。

同样,我们通过配置文件自定义来实现这一需求,添加networking.apiServerAddress配置项,值是本地网卡IP(可根据实际情况修改)​:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  apiServerAddress: "192.168.39.1"
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    listenAddress: "0.0.0.0"
    protocol: tcp
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker

启用Feature Gates

如果要使用一些Alpha阶段的特性,就需要通过配置Feature Gates来实现。

在使用Kubeadm搭建环境时,可以通过配置ClusterConfiguration来实现这个需求,Kubeadm被Kind封装后,在Kind中如何启用Feature Gates呢?方案如下(FeatureGateName就是需要启用的Feature Gates名字)​:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
featureGate:
  FeatureGateName: true
networking:
  apiServerAddress: "192.168.39.1"
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    listenAddress: "0.0.0.0"
    protocol: tcp
- role: control-plane
- role: control-plane
- role: worker
- role: worker
- role: worker

注意!这里要将FeatureGateName换为实际的feature名。

导入镜像

通过Kind搭建的环境本质是运行在一个容器内,宿主机上的镜像默认不能被Kind环境所识别,这时可以通过如下方式导入镜像:

# 例如一个镜像名是my-testimage:v1
kind load docker-image my-testimage:v1 --name myk8s-test

# 例如需要的镜像是一个tar包,my-testimage.tar
kind load image-archive my-testimage.tar --name myk8s-test

此处通过–name参数来指定要导入的kind集群。

Minikube搭建测试集群

Minikube同样能够实现搭建本地Kubernetes集群,目前已经可以同时支持Docker方案和虚拟机方案了。

前置依赖

资源相关:

  • 2 个或更多 CPU
  • 2GB 可用内存
  • 20GB 可用磁盘空间
  • 互联网连接

一般资源方面都不是需要担心的(除了网络可能又一些麻烦)

容器或虚拟机管理器方面(选一即可):

不同驱动器的使用命令:

  • Docker
    • 使用命令:minikube start --driver=docker
    • 设置默认:minikube config set driver docker
  • Qemu
    • 使用命令:minikube start --driver=qemu
  • Hyperkit
    • 使用命令:minikube start --driver=hyperkit
    • 设置默认:minikube config set driver hyperkit
  • Hyperv
    • 使用命令:minikube start --driver=hyperv
    • 设置默认:minikube config set driver hyperv
  • KVM
    • 使用命令:minikube start --driver=kvm2
    • 设置默认:minikube config set driver kvm2\
  • Parallels
    • 使用命令:minikube start --driver=parallels
    • 设置默认:minikube config set driver parallels
  • Podman
    • 使用命令:minikube start --driver=podman
    • 设置默认:minikube config set driver podman
    • 使用命令[cri-o]:minikube start --driver=podman --container-runtime=cri-o
  • Virtualbox
    • 使用命令:minikube start --driver=virtualbox
    • 设置默认:minikube config set driver virtualbox
  • Vmware
    • 使用命令:minikube start --driver=vmware
    • 设置默认:minikube config set driver vmware

虚拟机方案进行的话,KVM是一个十分轻量,并且可以满足需求的方案,但是KVM(基于内核的虚拟机)是适用于 x86 硬件上的 Linux 的完整虚拟化解决方案,包含虚拟化扩展。

也就是说在macOS上是没办法使用KVM的。

如果是在linux开发环境的话,个人建议是可以优先冲KVM的,轻量好用。
如果是在macOS开发环境,个人建议可以优先冲Parallels

无论是哪一种驱动,对于minikube来说都是一样的,因为我的开发机已经安装了Docker,所以本次就采用Docker驱动方案来进行演示。

安装minikube

二进制安装:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64
sudo install minikube-darwin-arm64 /usr/local/bin/minikube

包安装:

brew install minikube

验证:

minikube version

会得到差不多的结果:

minikube version: v1.34.0
commit: 210b148df93a80eb872ecbeb7e35281b3c582c61

启动集群

# 指定容器或虚拟机管理器驱动的启动
minikube start --driver=docker

# 如果设置了默认驱动,可以直接启动
minikube start

会得到类似的结果:

😄  Darwin 14.4 (arm64) 上的 minikube v1.34.0
✨  根据用户配置使用 docker 驱动程序
📌  使用具有 root 权限的 Docker Desktop 驱动程序
👍  Starting "minikube" primary control-plane node in "minikube" cluster
🚜  正在拉取基础镜像 v0.0.45 ...
💾  正在下载 Kubernetes v1.31.0 的预加载文件...
    > gcr.io/k8s-minikube/kicbase...:  441.45 MiB / 441.45 MiB  100.00% 198.60 
🔥  Creating docker container (CPUs=2, Memory=4600MB) ...
🐳  正在 Docker 27.2.0 中准备 Kubernetes v1.31.0…
🔎  正在验证 Kubernetes 组件...
    ▪ 正在使用镜像 gcr.io/k8s-minikube/storage-provisioner:v5
🌟  启用插件: storage-provisioner, default-storageclass
🏄  完成!kubectl 现在已配置,默认使用"minikube"集群和"default"命名空间

查看集群node和pod信息:

➜  ~ sudo kubectl get node 
NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   15m   v1.31.0


➜  ~ sudo kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS        AGE
kube-system   coredns-6f6b679f8f-gz4ld           1/1     Running   1 (4m ago)      14m
kube-system   coredns-6f6b679f8f-krlwp           1/1     Running   1 (4m ago)      14m
kube-system   etcd-minikube                      1/1     Running   1 (4m4s ago)    14m
kube-system   kube-apiserver-minikube            1/1     Running   1 (3m55s ago)   14m
kube-system   kube-controller-manager-minikube   1/1     Running   1 (4m5s ago)    14m
kube-system   kube-proxy-v8zt6                   1/1     Running   1 (4m5s ago)    14m
kube-system   kube-scheduler-minikube            1/1     Running   1 (4m5s ago)    14m
kube-system   storage-provisioner                1/1     Running   0               3m42s

minikube 捆绑了 Kubernetes 仪表板:

minikube dashboard

会得到类似的结果:

🤔  正在验证 dashboard 运行情况 ...
🚀  正在启动代理...
🤔  正在验证 proxy 运行状况 ...
http://127.0.0.1:56919/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

使用url访问dashboard:
在这里插入图片描述

集群管理

# 暂停 Kubernetes 而不影响已部署的应用程序:
minikube pause

# 从暂停中恢复:
minikube unpause

# 停止集群:
minikube stop

# 更改默认内存限制(需要重新启动):
minikube config set memory 9001

# 浏览易于安装的 Kubernetes 服务目录。
minikube start -p aged --kubernetes-version=v1.16.1

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

启用插件

Minikube 有一组内置的插件, 可以在本地 Kubernetes 环境中启用、禁用和打开。

列出当前支持的插件:

minikube addons list

输出的结果类似于这样:

|-----------------------------|----------|--------------|--------------------------------|
|         ADDON NAME          | PROFILE  |    STATUS    |           MAINTAINER           |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador                  | minikube | disabled     | 3rd party (Ambassador)         |
| auto-pause                  | minikube | disabled     | minikube                       |
| 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)            |
| freshpod                    | minikube | disabled     | Google                         |
| gcp-auth                    | minikube | disabled     | Google                         |
| gvisor                      | minikube | disabled     | minikube                       |
| headlamp                    | minikube | disabled     | 3rd party (kinvolk.io)         |
| helm-tiller                 | minikube | disabled     | 3rd party (Helm)               |
| inaccel                     | minikube | disabled     | 3rd party (InAccel             |
|                             |          |              | [info@inaccel.com])            |
| ingress                     | minikube | disabled     | Kubernetes                     |
| ingress-dns                 | minikube | disabled     | minikube                       |
| inspektor-gadget            | minikube | disabled     | 3rd party                      |
|                             |          |              | (inspektor-gadget.io)          |
| istio                       | minikube | disabled     | 3rd party (Istio)              |
| istio-provisioner           | minikube | disabled     | 3rd party (Istio)              |
| kong                        | minikube | disabled     | 3rd party (Kong HQ)            |
| kubeflow                    | minikube | disabled     | 3rd party                      |
| kubevirt                    | minikube | disabled     | 3rd party (KubeVirt)           |
| logviewer                   | minikube | disabled     | 3rd party (unknown)            |
| metallb                     | minikube | disabled     | 3rd party (MetalLB)            |
| metrics-server              | minikube | disabled     | Kubernetes                     |
| nvidia-device-plugin        | minikube | disabled     | 3rd party (NVIDIA)             |
| nvidia-driver-installer     | minikube | disabled     | 3rd party (NVIDIA)             |
| nvidia-gpu-device-plugin    | minikube | disabled     | 3rd party (NVIDIA)             |
| olm                         | minikube | disabled     | 3rd party (Operator Framework) |
| pod-security-policy         | minikube | disabled     | 3rd party (unknown)            |
| portainer                   | minikube | disabled     | 3rd party (Portainer.io)       |
| registry                    | minikube | disabled     | minikube                       |
| registry-aliases            | minikube | disabled     | 3rd party (unknown)            |
| registry-creds              | minikube | disabled     | 3rd party (UPMC Enterprises)   |
| storage-provisioner         | minikube | enabled ✅   | minikube                       |
| storage-provisioner-gluster | minikube | disabled     | 3rd party (Gluster)            |
| storage-provisioner-rancher | minikube | disabled     | 3rd party (Rancher)            |
| volcano                     | minikube | disabled     | third-party (volcano)          |
| volumesnapshots             | minikube | disabled     | Kubernetes                     |
| yakd                        | minikube | disabled     | 3rd party (marcnuri.com)       |
|-----------------------------|----------|--------------|--------------------------------|

启用插件,例如 metrics-server:

➜  ~ minikube addons enable metrics-server

💡  metrics-server 是由 Kubernetes 维护的插件。如有任何问题,请在 GitHub 上联系 minikube。
您可以在以下链接查看 minikube 的维护者列表:https://github.com/kubernetes/minikube/blob/master/OWNERS
    ▪ 正在使用镜像 registry.k8s.io/metrics-server/metrics-server:v0.7.2
🌟  启动 'metrics-server' 插件

查看通过安装该插件所创建的 Pod 和 Service:

➜  ~ sudo kubectl get pod,svc -n kube-system
NAME                                   READY   STATUS             RESTARTS      AGE
pod/coredns-6f6b679f8f-gz4ld           1/1     Running            1 (10h ago)   10h
pod/coredns-6f6b679f8f-krlwp           1/1     Running            1 (10h ago)   10h
pod/etcd-minikube                      1/1     Running            1 (10h ago)   10h
pod/kube-apiserver-minikube            1/1     Running            1 (10h ago)   10h
pod/kube-controller-manager-minikube   1/1     Running            1 (10h ago)   10h
pod/kube-proxy-v8zt6                   1/1     Running            1 (10h ago)   10h
pod/kube-scheduler-minikube            1/1     Running            1 (10h ago)   10h
pod/metrics-server-84c5f94fbc-nvvwk    0/1     ImagePullBackOff   0             48s
pod/storage-provisioner                1/1     Running            0             10h

NAME                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE
service/kube-dns         ClusterIP   10.96.0.10     <none>        53/UDP,53/TCP,9153/TCP   10h
service/metrics-server   ClusterIP   10.106.192.6   <none>        443/TCP                  48s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值