Hello folks,我是 Luga,今天我们来聊一下云原生生态核心技术之 Kubernetes 编排工具 —— 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 人员来说具有一定难度,但通过使用简化部署工具和托管服务,他们可以逐步克服这些挑战,并为企业应用服务的容器化改造提供可靠的支持。
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 的相关特性,我们从操作系统(OS)、CPU 架构、程序管理技术(Hypervisor tech)、容器运行时(CRI)以及容器网络接口插件(CNIs)等多方位角度简要描绘 Minikube 所支持的技术运行栈形态,具体如下图所示:
Minikube 支持在多种操作系统上运行,包括但不限于以下几种:
Minikube 能够适应不同的 CPU 架构,包括但不限于以下几种:
Minikube 利用虚拟化管理器来创建和管理虚拟机,以模拟多节点的 Kubernetes 集群。它支持多种虚拟化管理器技术,包括但不限于以下几种:
Minikube 支持多种容器运行时,以在本地机器上运行和管理容器化的应用程序。以下是一些 Minikube 所支持的常见容器运行时:
Minikube 支持多种容器网络接口插件,以实现容器之间的网络通信和连接。以下是一些 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 KubernetesImages 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 imagesConfiguration 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 changeNetworking and Connectivity Commands: service Returns a URL to connect to a service tunnel Connect to LoadBalancer servicesAdvanced 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 minikubeTroubleshooting 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 shellUse "minikube <command> --help" for more information about a given command.
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 集群环境。
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-10489-0.html一文搞懂 Kubernetes 编排工具 Minikube
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com
上一篇: 企业变革管理能否缓解供应链困境?
下一篇: 得物SRE视角下的蓝绿发布