人生若只如初见,何事秋风悲画扇。
前言
Kubernetes
是目前最流行的容器编排工具之一,由Google
开发并维护。它提供了完整的容器编排解决方案,包括自动化部署、资源管理和调度、服务发现和负载均衡等功能。
然而,对于初学者来说,Kubernetes
可能看起来非常复杂和难以理解,但是通过Minikube
来使用它成本就很低了,Minikube
大大降低了学习与使用成本,通过它我们可以轻松驾驭Kubernetes
。
在本文中,我将带你一起安装kubectl
和Minikube
,然后使用Minikube
来体验 Kubernetes
的基础功能,以便于更好的了解Kubernetes
的基本概念和工作方式,并开始使用Kubernetes
来管理和部署您的容器化应用程序。

安装 kubectl
⁉️ kubectl 是什么?
kubectl
是Kubernetes
的命令行工具,它提供了一种简单的方式来管理Kubernetes
集群中的资源。通过kubectl
,我们可以可以创建、更新、删除和查询Kubernetes集群中的资源,例如Pods
、Services
、Deployments
、ConfigMaps
和Secrets
等。
以下是kubectl的一些主要功能:
- 创建资源:使用kubectl create命令可以创建新的Kubernetes资源,例如Pod、Service、Deployment等。
- 更新资源:使用kubectl apply命令可以更新现有的Kubernetes资源,例如修改Pod的配置文件或者更新Deployment的镜像版本。
- 删除资源:使用kubectl delete命令可以删除Kubernetes集群中的资源,例如删除一个Pod或者一个Deployment。
- 查询资源:使用kubectl get命令可以查询Kubernetes集群中的资源,例如查看所有的Pods或者一个Deployment的状态。
- 操作标签:使用kubectl label命令可以为Kubernetes集群中的资源添加或修改标签,以便进行更细粒度的管理和控制。
总之,kubectl是Kubernetes中非常重要的一个工具,它可以帮助用户轻松地管理Kubernetes集群中的资源,提高开发效率和降低成本。
⁉️ 通过Homebrew 安装 kubectl
⭐️ 1、brew 安装 kubectl
bash
brew install kubectl

⭐️ 2、检查安装版本
可以通过kubectl version
命令查看 kubectl
的安装版本,用于验证 kubectl
是否安装成功。
bash
kubectl version --client

⭐️ 3、检查 kubectl
配置信息
为了让 kubectl 能发现并访问 Kubernetes 集群,当部署成功 Minikube
集群时,会自动生成kubeconfig
文件。
我们还可以通过获取集群状态的方法,检查是否已正确地配置了 kubectl
:
shell
kubectl cluster-info
如果你看到 The connection to the server <server-name:port> was refused - did you specify the right host or port?
,说明 kubectl
配置有问题,别急,安装完Minikube
之后就正常了。

安装 minikube
Minikube
是一个"小而美"的 "迷你"版本 的 Kubernetes
,它可执行文件仅有不到 100MB,运行镜像也不过 1GB左右,但它小小的资源占用下却干成了大事!它集成了 Kubernetes
的绝大多数功能特性,不仅有核心的容器编排功能,还有丰富的插件,例如 Dashboard
、Ingress
、Istio
、Registry
等。
Minikube
是一个轻量级的Kubernetes本地开发环境,它可以在任何支持Docker
的机器上运行。相比于完整的Kubernetes
集群,minikube
更加轻量级、易于安装和使用,并且不需要大量的硬件资源。
通过使用 minikube ,我们可以在不依赖于云服务提供商的情况下,快速地学习和测试Kubernetes的各种功能。帮助开发者在本地环境中快速地进行Kubernetes开发和测试,提高开发效率和降低学习成本。
以下是minikube的一些优势:
- 快速启动:minikube可以在几秒钟内启动一个本地的Kubernetes集群,这使得开发者可以快速地进行开发和测试。
- 简单易用:minikube提供了一个简单的命令行界面,使得用户可以轻松地创建和管理Kubernetes集群。
- 跨平台支持:minikube可以在Windows、MacOS和Linux等操作系统上运行,这使得用户可以在不同的平台上进行开发和测试。
- 独立性:minikube是一个独立的应用程序,它不需要依赖于其他软件或服务,这使得它更加稳定和可靠。
- 可扩展性:虽然minikube是一个轻量级的Kubernetes集群,但是它可以通过添加更多的节点来扩展集群的规模,以满足更大的负载需求。
⭐️ 1、安装 minikube
Kubernetes官网提供了多种安装方法, 你可以选择任意一种方式来进行安装。

我们通过Homebrew的方式来进行安装。
bash
brew install minikube

⭐️ 2、查看minikube版本
安装成功后,我们通过 minikube version
命令检验一下安装的版本。
bash
minikube version

⭐️ 3、运行 minikube
minikube
安装成功后,我们就可以运行它了!通过 start命令。
minikube start
命令用于启动 Minikube 集群。它会在本地计算机上创建一个虚拟机,并在其中运行 Kubernetes 集群。
在运行 minikube start
命令时,它将执行以下步骤:
-
检查 Minikube 是否已经安装,并下载最新版本的 Minikube(如果需要)。
-
检查虚拟化驱动程序是否可用,并下载和配置所需的虚拟化驱动程序(如果需要)。
-
创建一个虚拟机,并在其中运行 Kubernetes 集群。
-
配置
kubectl
命令行工具,以便它可以与 Minikube 集群进行通信。minikube start

⭐️ 4、检查 Minikube 的状态
minikube status
命令用于检查 Minikube
的状态。它将显示 Minikube
的当前状态以及kubelet
、apiserver
等组件的运行信息。
minikube status

⭐️ 5、获取 Kubernetes 集群中所有节点的状态信息
kubectl get nodes
命令用于获取 Kubernetes 集群中所有节点的状态信息。包含了集群中所有节点的名称、状态、角色、版本、内存和 CPU 使用情况等信息。
bash
kubectl get nodes

⭐️ 6、获取 Kubernetes 集群信息
kubectl cluster-info
命令用于获取 Kubernetes 集群的信息。

⭐️ 7、停止minikube
minikube stop
命令用于停止 Minikube 集群。在运行 minikube stop
命令时,它将停止运行在本地计算机上的虚拟机,并关闭其中运行的 Kubernetes 集群。
minikube stop

Minikube 初体验

Kubernetes Pod 是由一个或多个为了管理和联网而绑定在一起的容器构成的组。
Kubernetes Deployment 检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。 Deployment 是管理 Pod 创建和扩展的推荐方法。
⭐️ 1、创建 Deployment
使用 kubectl create
命令创建管理 Pod 的 Deployment。该 Pod 根据提供的 Docker 镜像运行容器。
这里我们运行了k8s提供的公共测试镜像服务,并命名 deployment 为 hello-node。
shell
# 运行包含 Web 服务器的测试容器镜像
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
⭐️ 2、查看Pod状态信息
kubectl get pods
命令用于获取 Kubernetes 集群中所有 Pod 的状态信息。在运行 kubectl get pods
命令时,它将返回一个表格,其中包含了集群中所有 Pod 的名称、所属命名空间、状态、重启次数、启动时间等信息。
bash
kubectl get pods

⭐️ 3、创建Service
在 Kubernetes 集群中创建一个 Service,并将其暴露为 NodePort 类型的服务,之后便可以访问在 Deployment 中运行的 Pod 的指定端口。
bash
kubectl expose deployment/hello-node --type="NodePort" --port 8080
这个命令的含义是:
kubectl expose
命令创建一个 Service 对象。--port
参数指定了 Service 对象要监听的端口号,这里是 8080--type="NodePort"
参数,Kubernetes 将为 Service 对象分配一个节点可访问的端口号

⭐️ 4、查看Service
kubectl get services
命令用于获取 Kubernetes 集群中所有 Service 对象的状态信息。
返回结果包含了集群中所有 Service 对象的名称、所属命名空间、类型、集群 IP 地址、端口等信息。
在输出的表格中,每一行表示一个 Service,每一列表示一个 Service 的属性。以下是 kubectl get services
命令输出的表格中可能包含的列:
NAME
: Service 的名称。TYPE
: Service 的类型,例如 ClusterIP、NodePort 或 LoadBalancer。CLUSTER-IP
: Service 的集群 IP 地址。EXTERNAL-IP
: Service 的外部 IP 地址(如果有)。PORT(S)
: Service 所公开的端口和协议。AGE
: Service 的创建时间。
bash
kubectl get services

我们也可以指定查看 hello-node
Service
的信息
kubectl get services hello-node

⭐️ 5、Scale扩缩容
kubectl scale
命令用于扩展或缩小 Kubernetes 集群中的 Deployment、ReplicaSet 或 StatefulSet。它允许您动态地增加或减少正在运行的 Pod 的数量,以满足应用程序的负载需求。
执行如下命令,将扩展 Pod 数量为3个。
kubectl scale deployment hello-node --replicas=3

现在你有3个应用副本了, 每个都在群集上独立运行,并能负载均衡他们之间的流量。
我们再来查看一下 deployment 和 pod 的情况。
bash
kubectl get deployment
kubectl get pods

Minikube 可视化
minikube dashboard
命令用于打开 Minikube 集群的可视化仪表板。在运行 minikube dashboard
命令时,它将启动一个 Web 服务器,并在默认浏览器中打开一个 Web 页面,显示 Minikube 集群的状态和详细信息。这使得管理和监视 Kubernetes 集群变得更加简单和直观。
Minikube 仪表板是一个基于 Web 的用户界面,可以让用户通过图形化方式管理 Kubernetes 集群。它提供了一些有用的功能,例如:
- 查看 Kubernetes 集群中的节点、Pod、服务等资源的详细信息。
- 查看 Kubernetes 集群的事件和日志。
- 创建、编辑和删除 Kubernetes 资源。
- 运行和监视应用程序。
⁉️ dashboard插件并不是默认启动的,需要我们手动开启。
⭐️ 1、启用 dashboard插件
bash
minikube addons enable dashboard

⭐️ 2、打开可视化面板
minikube dashboard
命令用于打开 Minikube 集群的可视化仪表板。
bash
minikube dashboard

自动弹出浏览器控制台

好啦,本文到此结束啦,minikube 这个小巧的 Kubernetes 还挺简单的,是不?
参考:Kubernetes官网
🎉 如果喜欢这篇文章,点赞👍 收藏 ⭐ 关注 ✅ 哦,创作不易,感谢!😀
