您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

一文搞懂 Kubernetes 编排工具 Minikube

时间:2023-09-03 15:32:10  来源:微信公众号  作者:架构驿站

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

 01 —

为什么需要 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 人员来说具有一定难度,但通过使用简化部署工具和托管服务,他们可以逐步克服这些挑战,并为企业应用服务的容器化改造提供可靠的支持。

 

 02 —

何为 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 集群。这些工具的使用使得开发人员能够更加高效地进行应用程序开发、测试和部署,加速了应用交付的速度和质量。

 

 03 —

认识不一样的 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 提供了简单而高效的网络覆盖,使得容器可以相互通信。

 

 04 —

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 versionClient 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 wideNAME       STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIMEminikube   Ready    control-plane,master   15h   v1.20.7   192.168.49.2   <none>        Ubuntu 20.04.2 LTS   5.10.25-linuxkit   docker://20.10.7[administrator@JavaLangOutOfMemory ~ ]% kubectl get pod -ANAMESPACE     NAME                               READY   STATUS    RESTARTS   AGEkube-system   coreDNS-74ff55c5b-p6dlz            1/1     Running   0          15hkube-system   etcd-minikube                      1/1     Running   0          15hkube-system   kube-apiserver-minikube            1/1     Running   0          15hkube-system   kube-controller-manager-minikube   1/1     Running   0          15hkube-system   kube-proxy-dcr72                   1/1     Running   0          15hkube-system   kube-scheduler-minikube            1/1     Running   0          15hkube-system   storage-provisioner                1/1     Running   3          15h 

     常见命令行如下所示: 

[administrator@JavaLangOutOfMemory ~ ] % minikube --helpminikube 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 <command> --help" for more information about a given command.

 

 05 —

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 集群环境。

     以上为本文关于 Minikube 工具的简要概述,若有帮助,欢迎大家随时沟通,交流。



Tags:Kubernetes   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  Search: Kubernetes  点击:(6)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  Search: Kubernetes  点击:(12)  评论:(0)  加入收藏
聊聊 Kubernetes 网络模型综合指南
这篇详细的博文探讨了 Kubernetes 网络的复杂性,提供了关于如何在容器化环境中确保高效和安全通信的见解。译自Navigating the Network: A Comprehensive Guide to Kubernete...【详细内容】
2024-02-19  Search: Kubernetes  点击:(37)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01  Search: Kubernetes  点击:(153)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  Search: Kubernetes  点击:(50)  评论:(0)  加入收藏
Kubernetes Informer基本原理,你明白了吗?
本文分析 k8s controller 中 informer 启动的基本流程不论是 k8s 自身组件,还是自己编写 controller,都需要通过 apiserver 监听 etcd 事件来完成自己的控制循环逻辑。如何高...【详细内容】
2024-01-30  Search: Kubernetes  点击:(37)  评论:(0)  加入收藏
Kubernetes 100个常用命令!
这篇文章是关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令,这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于:&bull; 集...【详细内容】
2024-01-03  Search: Kubernetes  点击:(76)  评论:(0)  加入收藏
一文读懂Kubernetes部署策略
在这篇文章中,我们将深入研究 Kubernetes 部署概念和一些常见策略,了解每种策略的优缺点。合适的部署策略使我们能够在发布应用程序时最大限度地减少停机时间、增强客户体验并...【详细内容】
2024-01-03  Search: Kubernetes  点击:(59)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  Search: Kubernetes  点击:(114)  评论:(0)  加入收藏
如何基于Kubernetes运行Nacos高可用集群
Nacos(Namings and Configuration Management)是阿里巴巴开源的一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台。以下是Nacos的一些主要功能和特点: 服务发现...【详细内容】
2023-12-18  Search: Kubernetes  点击:(69)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(10)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(13)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(22)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(153)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(47)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(65)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(76)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(124)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(114)  评论:(0)  加入收藏
站内最新
站内热门
站内头条