1. 概述

Kubernetes 是一个广受欢迎的开源平台,用于管理容器化的工作负载和服务。它提供了一种管理并协调容器化应用程序的方法,可以根据需要扩展或缩小它们的规模,并确保它们可靠、安全地运行。

Minikube 是一个工具,允许我们在本地机器上运行一个单节点的 Kubernetes 集群,非常适合测试和开发用途。本文档将指导我们完成在本地机器上安装和使用 Minikube 的步骤。

2. 先决条件

在开始之前,我们需要确保以下几点:

  • 一台运行 Linux、macOS 或 Windows 的机器。
  • 在我们的机器上安装了一个虚拟机管理程序,如 VirtualBox 或 KVM。如果我们在使用 Windows,则可以使用 Hyper-V。
  • 一个外壳环境,如 Bash 或 PowerShell。
  • 我们机器上已安装 curl。

3. 安装 Minikube

第一步是将 Minikube 安装到我们的机器上。我们可以按照 Minikube 网站提供的说明进行操作:https://minikube.sigs.k8s.io/docs/start/

或者,我们可以通过以下命令安装最新版本的 Minikube:

$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

此命令适用于 Linux。如果我们正在使用 macOS 或 Windows,则需要下载适合我们平台的二进制文件。

一旦安装了 Minikube,我们可以通过运行以下命令验证其是否正确安装:

$ minikube version 
minikube version: v1.18.1

此命令输出 Minikube 二进制文件的版本号。

4. 启动 Minikube 集群

下一步是启动 Minikube 集群。我们可以通过运行以下命令来执行此操作:

$ minikube start

此命令将在我们的本地机器上启动一个虚拟机,并配置它以运行单节点的 Kubernetes 集群。

首次运行此命令时,它会下载虚拟机所需的必要的 ISO 映像,这可能需要几分钟时间。一旦虚拟机运行起来,我们可以通过运行以下命令检查集群的状态:

$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
timeToStop: Nonexistent

此输出显示 Minikube 控制平面正在运行,kubelet 和 API 服务器也正在运行。kubeconfig 已配置,这意味着我们可以使用 kubectl 命令与集群进行交互。此外,输出还显示了 Minikube 主机机器的状态。

5. 与 Minikube 集群交互

一旦集群启动并运行,我们可以使用 kubectl 命令行工具与之交互。kubectl 是与 Kubernetes 集群交互的主要 CLI 工具,允许我们部署应用、管理节点并执行其他操作。

为了使用 kubectl 与 Minikube 进行交互,我们需要将上下文设置为 Minikube 集群。通过运行以下命令可以完成此操作:

$ kubectl config use-context minikube

此命令告诉 kubectl 使用 Minikube 集群的配置。

我们现在可以运行 kubectl 命令与 Minikube 集群进行交互。例如,我们可以运行以下命令获取集群中节点的信息:

$ kubectl get nodes
NAME       STATUS   ROLES                  AGE    VERSION
minikube   Ready    control-plane,master   250d   v1.20.2

此命令显示集群中的节点列表及其状态、角色、年龄和 Kubernetes 版本。

6. 部署应用

要将应用部署到 Minikube 集群,我们需要创建一个 Kubernetes 部署对象。部署对象管理一组应用的副本,并确保维持所需的状态。

对于这个示例,我们将创建一个简单的部署对象,运行 NGINX Web 服务器。首先,我们需要创建一个名为 nginx-deployment.yaml 的文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

此 YAML 文件定义了一个包含单个副本的部署对象,该副本运行 NGINX 容器。它在虚拟机上暴露了端口 80 的 HTTP 流量。

然后,为了创建部署,我们运行以下命令:

$ kubectl apply -f nginx-deployment.yaml 
deployment.apps/nginx-deployment created

此命令在 Minikube 集群中创建了部署对象。

要访问 NGINX Web 服务器,我们需要将其作为 Kubernetes 服务进行暴露。服务 是一种抽象,将一组 pod 作为网络服务进行暴露。让我们创建一个名为 nginx-service.yaml 的文件,内容如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - name: http
    port: 80
    targetPort: 80

此 YAML 文件定义了一个服务对象,它在虚拟机上的随机分配端口上暴露了 NGINX 部署。

为了创建服务,我们运行以下命令:

$ kubectl apply -f nginx-service.yaml
service/nginx-service created

我们现在可以通过获取虚拟机的 IP 地址和服务的端口号来访问 NGINX Web 服务器:

$ minikube service nginx-service --url 
http://192.168.64.2:31637

这应该输出一个 URL,我们可以使用它来访问 NGINX Web 服务器。

要在 Minikube 中使用 本地构建的 Docker 图像,我们只需将图像标记为 Minikube Docker 服务器的 IP 地址,并使用 docker tagdocker push 命令将其推送到 Minikube Docker 注册表。

7. 结论

本文档涵盖了如何安装和使用 Minikube 在本地机器上运行 Kubernetes 集群的步骤。我们还演示了如何将应用部署到集群并在使用 Kubernetes 服务的情况下访问它。

Minikube 是一个非常优秀的测试和开发工具,它使我们能够快速、轻松地开始使用 Kubernetes。