一文搞懂 Kubernetes 编排工具 Minikube

2023年 9月 13日 48.0k 0

Hello folks,我是 Luga,今天我们来聊一下云原生生态核心技术之 Kubernetes 编排工具 —— Minikube。

为什么需要 Minikube 工具 ?

随着容器技术的迅猛发展和广泛应用,Kubernetes 在企业中扮演着重要的角色。通常情况下,我们将 Kubernetes 描述为“将 Linux
容器集群作为单个系统进行管理,以加速开发并简化维护”。对于企业应用服务的容器化改造而言,学习和使用 Kubernetes 已经成为不可避免的一部分。

然而,对于刚接触这个体系的 DevOps 人员来说,在环境中完整部署一整套多节点的 Kubernetes
集群确实具有一定的难度。这种部署涉及到复杂的配置、网络设置和资源管理等方面,需要具备深入的理解和相关经验。

为了帮助这些 DevOps 人员克服这种难度,出现了一些工具和平台,如 Minikube、K3s 和 Kind 等。这些工具提供了简化和轻量级的
Kubernetes 部署选项,使得在本地或开发环境中搭建一个功能齐全的 Kubernetes 集群变得更加容易。

此外,云服务提供商也提供了托管的 Kubernetes 服务,如 Amazon EKS、Google Kubernetes Engine(GKE)和
Microsoft Azure Kubernetes Service(AKS)等。这些托管服务解决了底层基础设施的复杂性,使得 DevOps
人员可以专注于应用程序的部署和管理,而无需担心底层的 Kubernetes 集群细节。

因此,对于那些刚接触 Kubernetes 的 DevOps 人员来说,他们可以利用这些工具和托管服务来降低部署和管理 Kubernetes
的难度。随着经验的积累和深入学习,他们将能够逐渐掌握和理解 Kubernetes 的各个方面,并能够在实际生产环境中部署和管理复杂的多节点 Kubernetes
集群。

总之,虽然在环境中完整部署一整套多节点的 Kubernetes 集群对于刚接触这个体系的 DevOps
人员来说具有一定难度,但通过使用简化部署工具和托管服务,他们可以逐步克服这些挑战,并为企业应用服务的容器化改造提供可靠的支持。

何为 Minikube 工具 ?

Kubernetes 是一个基于 Go 语言开发的用于 Docker
容器的开源编排系统。它能够处理计算集群中节点的调度,并主动管理工作负载,以确保它们的状态与用户声明的意图相匹配。然而,与此同时,Minikube
被详细地描述为一个开源的"本地 Kubernetes 引擎",它可以在 macOS、Linux 和 Windows 平台上实现本地化的 Kubernetes
集群。作为 Kubernetes 官方推荐的最佳协同工具之一,Minikube 的目标是成为本地 Kubernetes 应用程序开发的工具,并支持所有适用的
Kubernetes 功能。

Minikube 的主要功能是运行单节点 Kubernetes 集群,以便在本地机器上进行开发。它支持多种虚拟机驱动程序,如
VirtualBox、HyperV 和 KVM2。由于 Minikube 是 Kubernetes
世界中相对成熟的解决方案,它支持的功能列表令人印象深刻,包括负载均衡器、多集群、节点端口、持久卷、入口、仪表板和容器运行时等。

基于 Minikube 这个开源工具,开发人员、运维人员和 DevOps 工程师能够快速搭建本地的 Kubernetes 单节点集群环境。Minikube
对软硬件资源的要求并不高,因此方便技术人员进行学习、实践和日常的项目开发。

总的来说,Kubernetes 和 Minikube 为容器化应用开发和部署提供了强大的支持。Kubernetes
作为一个分布式系统的编排工具,可以管理和调度容器化的应用程序,而 Minikube 则提供了一个简单实用的方式,在本地机器上搭建和管理 Kubernetes
集群。这些工具的使用使得开发人员能够更加高效地进行应用程序开发、测试和部署,加速了应用交付的速度和质量。

认识不一样的 Minikube 技术堆栈

基于 Minikube 的相关特性,我们从操作系统(OS)、CPU 架构、程序管理技术(Hypervisor
tech)、容器运行时(CRI)以及容器网络接口插件(CNIs)等多方位角度简要描绘 Minikube 所支持的技术运行栈形态,具体如下图所示:

1、操作系统(OS):

Minikube 支持在多种操作系统上运行,包括但不限于以下几种:

  • macOS:Minikube 可以在 macOS 上运行,提供了方便的本地开发和测试环境。
  • Linux:Minikube 支持在不同的 Linux 发行版上运行,使开发人员能够在本地机器上搭建 Kubernetes 集群。
  • Windows:Minikube 可以在 Windows 平台上运行,为 Windows 用户提供了本地化的 Kubernetes 开发环境。

2、CPU架构:

Minikube 能够适应不同的 CPU 架构,包括但不限于以下几种:

  • x86 架构:Minikube 支持 x86 架构的处理器,这是目前最常见的桌面和服务器处理器架构。
  • ARM 架构:Minikube 还支持 ARM 架构,这是一种常见于嵌入式设备和移动设备的处理器架构。

3、程序管理技术(Hypervisor tech):

Minikube 利用虚拟化管理器来创建和管理虚拟机,以模拟多节点的 Kubernetes
集群。它支持多种虚拟化管理器技术,包括但不限于以下几种:

  • VirtualBox:Minikube 可以使用 VirtualBox 作为虚拟化管理器,在本地机器上创建和管理虚拟机。
  • HyperV:对于 Windows 平台,Minikube 支持使用 HyperV 作为虚拟化管理器,提供了本地化的Kubernetes环境。
  • KVM2:在 Linux 平台上,Minikube 可以使用 KVM2 作为虚拟化管理器,以实现本地 Kubernetes 集群的搭建和管理。

4、容器运行时(CRI):

Minikube 支持多种容器运行时,以在本地机器上运行和管理容器化的应用程序。以下是一些 Minikube 所支持的常见容器运行时:

  • Docker:作为最流行的容器运行时之一,Minikube 支持使用 Docker
    来创建和管理容器,使得应用程序可以在本地的Kubernetes集群中以容器的形式运行。
  • containerd:Minikube 还支持使用 containerd 作为容器运行时,containerd 是一个轻量级的容器运行时,为
    Kubernetes 提供了容器管理的能力。

5、容器网络接口插件(CNIs):

Minikube 支持多种容器网络接口插件,以实现容器之间的网络通信和连接。以下是一些 Minikube 所支持的常见容器网络接口插件:

  • Calico:Minikube 可以集成 Calico 作为容器网络接口插件,提供网络策略和安全性功能。
  • flannel:Minikube 还支持使用 flannel 作为容器网络接口插件,flannel
    提供了简单而高效的网络覆盖,使得容器可以相互通信。

Minikube 工具基本部署安装

Minikube 安装部署较为简单,这里,我们以 macOS 平台为例,进行简单介绍,具体如下:

[administrator@JavaLangOutOfMemory ~ ]% brew  install minikube
[administrator@JavaLangOutOfMemory ~ ]% minikube start

当然,我们还可以自定义参数进行启动,具体如下所示:

[administrator@JavaLangOutOfMemory ~ ]%  minikube start --iso-url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.x.x.iso
                 --registry-mirror=https://registry.docker-cn.com
                 --image-mirror-country=cn
                 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
                 --vm-driver=none
                 --memory=4096

部署完成后,检测相关配置参数等。

[administrator@JavaLangOutOfMemory ~ ]% kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:52:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.7", GitCommit:"132a687512d7fb058d0f5890f07d4121b3f0a2e2", GitTreeState:"clean", BuildDate:"2021-05-12T12:32:49Z", GoVersion:"go1.15.12", Compiler:"gc", Platform:"linux/amd64"}
[administrator@JavaLangOutOfMemory ~ ]% kubectl get node -o wide
NAME       STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
minikube   Ready    control-plane,master   15h   v1.20.7   192.168.49.2           Ubuntu 20.04.2 LTS   5.10.25-linuxkit   docker://20.10.7
[administrator@JavaLangOutOfMemory ~ ]% kubectl get pod -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-74ff55c5b-p6dlz            1/1     Running   0          15h
kube-system   etcd-minikube                      1/1     Running   0          15h
kube-system   kube-apiserver-minikube            1/1     Running   0          15h
kube-system   kube-controller-manager-minikube   1/1     Running   0          15h
kube-system   kube-proxy-dcr72                   1/1     Running   0          15h
kube-system   kube-scheduler-minikube            1/1     Running   0          15h
kube-system   storage-provisioner                1/1     Running   3          15h 

常见命令行如下所示:


[administrator@JavaLangOutOfMemory ~ ] % minikube --help
minikube provisions and manages local Kubernetes clusters optimized for development workflows.

Basic Commands:
  start          Starts a local Kubernetes cluster
  status         Gets the status of a local Kubernetes cluster
  stop           Stops a running local Kubernetes cluster
  delete         Deletes a local Kubernetes cluster
  dashboard      Access the Kubernetes dashboard running within the minikube cluster
  pause          pause Kubernetes
  unpause        unpause Kubernetes

Images Commands:
  docker-env     Configure environment to use minikube's Docker daemon
  podman-env     Configure environment to use minikube's Podman service
  cache          Add, delete, or push a local image into minikube
  image          Manage images

Configuration and Management Commands:
  addons         Enable or disable a minikube addon
  config         Modify persistent configuration values
  profile        Get or list the current profiles (clusters)
  update-context Update kubeconfig in case of an IP or port change

Networking and Connectivity Commands:
  service        Returns a URL to connect to a service
  tunnel         Connect to LoadBalancer services

Advanced Commands:
  mount          Mounts the specified directory into minikube
  ssh            Log into the minikube environment (for debugging)
  kubectl        Run a kubectl binary matching the cluster version
  node           Add, remove, or list additional nodes
  cp             Copy the specified file into minikube

Troubleshooting Commands:
  ssh-key        Retrieve the ssh identity key path of the specified node
  ssh-host       Retrieve the ssh host key of the specified node
  ip             Retrieves the IP address of the specified node
  logs           Returns logs to debug a local Kubernetes cluster
  update-check   Print current and latest version number
  version        Print the version of minikube
  options        Show a list of global command-line options (applies to all commands).

Other Commands:
  completion     Generate command completion for a shell

Use "minikube  --help" for more information about a given command.

Minikube 工具架构原理解析

Minikube 基于本地虚拟机环境部署 Kubernetes 集群,其基本架构参考示意图,如下图所示:

具体实现原理涉及如下:

(1) 下载 .iso 文件以能够使得本地环境处于可用状态

在 Minikube 启动过程中,首先需要下载一个 .iso 文件,以确保本地环境处于可用状态。这个 .iso 文件通常包含一个 Linux
发行版(通常是 boot2docker )和所需的工具和依赖项。

(2) 从下载的 .iso 文件中提取 boot2docker.iso 镜像文件

从下载的 .iso 文件中提取 boot2docker.is o镜像文件。这个镜像是一个轻量级的 Linux 操作系统,专门用于在 Minikube
中运行。

(3) 创建用于 SSH 目的的动态证书

在 Minikube 中,为了能够通过 SSH 与虚拟机进行通信,需要创建一对动态证书。这些证书用于安全地建立 SSH
连接,以便管理和操作虚拟机。

(4) 使用指定的配置创建 VirtualBox VM 文件

根据指定的配置信息,使用 VirtualBox 虚拟化软件创建一个虚拟机(VM)文件。这个虚拟机将用作 Minikube 集群的节点。

(5) 设置存储以挂载 boot2docker.iso 文件

在虚拟机中设置存储配置,以便将 boot2docker.iso 文件挂载到虚拟机的文件系统中。这样,虚拟机就能够访问其中的文件并引导启动。

(6) 设置网络相关配置(IP、DHCP 等)以及在 VM 内设置 SSH 等

配置虚拟机的网络相关设置,例如为虚拟机分配 IP 地址、配置 DHCP 等。此外,还在虚拟机内部设置 SSH,以便允许通过 SSH
与虚拟机进行远程连接和管理。

(7) 启动虚拟机

现在,启动虚拟机并等待它完成启动过程。一旦虚拟机启动成功,它就成为 Minikube 集群中的一个节点。

(8) 设置 /etc/hostname、 /etc/hosts 以及设置 systemd 相关文件以使得 Docker 容器引擎能够正常启动

在虚拟机中进行一些配置操作,例如设置主机名(/etc/hostname)、设置主机解析(/etc/hosts)以及配置systemd相关文件。这些操作有助于确保Docker容器引擎能够在虚拟机中正常启动和工作。

(9) 准备 Kubernetes 和 Docker 等相关基础环境配置

在虚拟机中准备 Kubernetes 和 Docker 等相关基础环境配置。这可能涉及安装和配置所需的软件包、设置环境变量、创建相关目录等。

(10) 下载所有相关的 Kubernetes 文件 - kubelet、kubeadm 等

在虚拟机中下载所有相关的 Kubernetes 文件,包括 kubelet、kubeadm 等工具。这些工具用于管理和操作 Kubernetes
集群。

(11) 为 Kubernetes 所需的不同包拉取 Docker 镜像并启动不同的服务,例如,分布式存储系统 Etcd、调度程序 Scheduler、控制器
Controller Manager 以及 Api Server

在虚拟机中为 Kubernetes 所需的不同组件和服务拉取 Docker 镜像,并启动这些服务。这可能涉及拉取 Etcd
镜像(用于分布式存储系统)、启动调度程序、控制器管理器和API服务器等关键组件。

通过以上步骤,Minikube 成功完成了组件的启动流程,并为用户提供了一个本地的、可用于开发和测试的 Kubernetes 集群环境。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论