介绍
Kubernetes是一个开源集装箱管制系统,用于自动化软件部署、扩展和管理,它在企业层面变得非常受欢迎,用于促进服务器资源的水平扩展(https://andsky.com/tech/tutorials/modernizing-applications-for-kubernetes#publish-image-to-a-registry),包括DigitalOcean在内的许多云提供商提供自己的管理 Kubernetes(https://www.digitalocean.com/community/tech_talks/getting-started-with-kubernetes-on-digitalocean)解决方案。
由于Kubernetes部署通常依赖于多个服务器,因此,在部署到生产之前,开发和测试Kubernetes堆栈可能需要大量资源,因此,Kubernetes的作者维护了一个名为 minikube的伴侣项目,该项目可以与像Docker这样的集装箱框架一起工作,以模拟在单一机器上运行的Kubernetes集群。
在本教程中,您将在本地计算机或远程服务器上安装minikube
。您还将访问内置的Kubernetes仪表板,在浏览器中探索您的群集。一旦您的群集运行,您将部署测试应用程序,并探索如何通过minikube
访问它。
如果您正在寻找一个管理的Kubernetes托管服务,请查看我们的简单的,用于增长的管理的Kubernetes服务(https://www.digitalocean.com/products/kubernetes)。
前提条件
要遵循本教程,您将需要:
- 熟悉 Kubernetes 概念. 请参阅文章 An Introduction to Kubernetes 有关更多细节。
- Docker 集装箱框架安装在您正在运行的 Windows、Mac 或 Linux 环境中。 如果您没有在 Linux 环境中工作,请参阅 Docker 的文档 有关安装步骤。 如果您在 Linux 上使用 Docker,请确保您已 配置为无 sudo 特权 工作。 *_ Homebrew 包管理器。 Homebrew 可以安装在 macOS 或 Luxin 环境
步骤 1 – 安装和运行 Minikube
您可以通过 Homebrew)包管理器来安装 minikube
:
1[environment local]
2brew install minikube
1[secondary_label Output]
2…
3==> Installing minikube
4==> Pouring minikube--1.25.2.x86_64_linux.bottle.tar.gz
5==> Caveats
6Bash completion has been installed to:
7 /home/sammy/.linuxbrew/etc/bash_completion.d
8==> Summary
9🍺 /home/sammy/.linuxbrew/Cellar/minikube/1.25.2: 9 files, 70.0MB
10…
<$>[注] 注: 在 Windows 上使用「minikube」启动有几个警告。它在 WSL2 (当前版本的 Windows Subsystem for Linux)下运行,但需要配置以使用 Docker 而不是自己的默认后端。
要开始使用minikube
,您可以使用start
命令运行它,该命令将自动使用多个Docker容器和最近的稳定版本的Kubernetes创建本地Kubernetes集群。
1[environment local]
2minikube start
这将需要一段时间,并且应该产生类似于以下的输出,注意kubectl
已为您配置。
1[secondary_label Output]
2👍 Starting control plane node minikube in cluster minikube
3🚜 Pulling base image ...
4💾 Downloading Kubernetes v1.23.1 preload ...
5 > preloaded-images-k8s-v16-v1...: 504.42 MiB / 504.42 MiB 100.00% 81.31 Mi
6 > gcr.io/k8s-minikube/kicbase: 378.98 MiB / 378.98 MiB 100.00% 31.21 MiB p
7🔥 Creating docker container (CPUs=2, Memory=1987MB) ...
8🐳 Preparing Kubernetes v1.23.1 on Docker 20.10.12 ...
9 ▪ kubelet.housekeeping-interval=5m
10 ▪ Generating certificates and keys ...
11 ▪ Booting up control plane ...
12 ▪ Configuring RBAC rules ...
13🔎 Verifying Kubernetes components...
14 ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
15🌟 Enabled addons: default-storageclass, storage-provisioner
16🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
<$>[注]
注: 如果您想使用非默认版本的Kubernetes运行minikube
,以便进行兼容性检查,您可以运行minikube start
,例如--kubernetes-version v.1.2.3
。
通过 Homebrew 安装minikube
还提供了kubectl
,这是通过命令行管理 Kubernetes 集群的主要工具。
1[environment local]
2kubectl get pods -A
-A
参数将返回在 all 命名空间中运行的 pods。
1[secondary_label Output]
2NAMESPACE NAME READY STATUS RESTARTS AGE
3kube-system coredns-64897985d-ttwl9 1/1 Running 0 46s
4kube-system etcd-minikube 1/1 Running 0 57s
5kube-system kube-apiserver-minikube 1/1 Running 0 61s
6kube-system kube-controller-manager-minikube 1/1 Running 0 57s
7kube-system kube-proxy-ddtgd 1/1 Running 0 46s
8kube-system kube-scheduler-minikube 1/1 Running 0 57s
9kube-system storage-provisioner 1/1 Running 1 (14s ago) 54s
您现在有一个本地运行的Kubernetes集群,您可以使用像kubectl
这样的常规Kubernetes工具来工作。 在本教程的下一个步骤中,您将学习如何使用minikube
提供的一些额外功能来监控和修改本地Kubernetes配置。
第二部分 — 访问 Kubernetes 仪表板
Minikube 将 Kubernetes 仪表板部署到框中,您可以使用 Kubernetes 仪表板来监控群集的健康状况,或者手动部署应用程序。
1[environment local]
2minikube dashboard
此命令会自动启动仪表板,从 Kubernetes 集群内部转发一个端口,以便您可以直接访问它,并打开指向该本地端口的 Web 浏览器。
端口转发将阻止它运行的终端,只要它是活跃的,所以你可能希望在继续工作时在新的终端窗口中运行它。
如果您在远程服务器上运行minikube
,在那里您无法轻松访问 Web 浏览器,您可以运行minikube 仪表板
,附有--url
选项。
1[environment local]
2minikube dashboard --url
1[secondary_label Output]
2🤔 Verifying dashboard health ...
3🚀 Launching proxy ...
4🤔 Verifying proxy health ...
5http://127.0.0.1:34197/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
注意该命令返回的端口号码,因为它将在您的系统上有所不同。
然而,Kubernetes 的默认安全配置将防止此 URL 在远程计算机上可访问。 您需要创建一个SSH隧道以访问仪表板 URL。 要创建一个隧道从本地计算机到您的服务器,请使用-L
标志运行ssh
。 提供您从转发流程输出中注意到的端口号,以及您的远程服务器的 IP 地址:
1[environment local]
2ssh -L 34197:127.0.0.1:34197 sammy@your_server_ip
然后您可以在浏览器中访问仪表板:http://127.0.0.1:34197/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/`。
现在你已经看到更多的方法来使用minikube
,例如一个完整的Kubernetes集群,在下一步中,你将部署和访问一个样本应用程序,以验证你的Minikube集群按照预期工作。
第三部分 — 部署和测试样本应用程序
您可以使用kubectl
命令将测试应用程序部署到您的 Minikube 群集中. 以下命令将检索并部署 Kubernetes 样本应用程序 - 在这种情况下,谷歌的Hello-app
。
1[environment local]
2kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
此命令会创建一个部署,您在集群中称之为Web
,从谷歌集装箱注册表gcr.io
上的hello-app
的远程图像中。
接下来,将Web
部署曝光为Kubernetes Service,指定一个静态端口,它将以--type=NodePort
和--port=80
访问:
1[environment local]
2kubectl expose deployment web --type=NodePort --port=8080
现在您可以检查是否使用kubectl 获取服务
命令运行该服务:
1[environment local]
2kubectl get service web
请记住,Kubernetes NodePorts 使用随机端口,您的输出将不同:
1[secondary_label Output]
2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
3web NodePort 10.109.254.242 <none> 8080:31534/TCP 10s
现在,您可以使用minikube
来获取在容器外可访问的URL。此URL将允许您访问在集群内运行在端口8080
上的hello-app
服务。如果您在本地运行Minikube,则不需要使用此方法进行任何活跃的端口转发。
1[environment local]
2minikube service web --url
1[secondary_label Output]
2http://192.168.49.2:31534
您现在可以尝试连接到该 URL. 为了做到这一点,您将使用一个命令行程序,称为‘curl’,这很受欢迎,用于制作不同类型的网页请求. 一般来说,如果你想验证一个特定连接是否在浏览器中在理想情况下工作,你应该总是先测试‘curl’。
1[environment local]
2curl http://192.168.49.2:31534
1[secondary_label Output]
2Hello, world!
3Version: 1.0.0
4Hostname: web-746c8679d4-j92tb
如果您在本地机器上运行minikube
,您也可以在浏览器中访问此 URL,并且它应该返回相同的非风格的简单文本. 如果您在远程机器上运行,您可以像在步骤 2 中一样使用 SSH 隧道,如果您希望在浏览器中看到此输出。
你现在有一个通过minikube
部署的应用程序的最小示例。通常,在生产的Kubernetes集群中,你会(https://www.digitalocean.com/community/tech_talks/how-to-use-kubernetes-services-to-expose-your-app)提供更精细的访问到任何可访问的端点,但这并不取决于任何minikube
特定的功能,你已经看到了这里的基本面。
在本教程的下一步中,您将使用 Minikube 内置的工具来更改您的集群的一些默认配置值。
第 4 部分 — 管理 Minikube 的资源和文件系统
minikube
命令提供了几个子命令来帮助管理您的集群,例如,如果您需要更改集群中可用的内存量,您可以使用minikube config
来调整默认数量。
1minikube config set memory 4096
1[secondary_label Output]
2❗ These changes will take effect upon a minikube delete and then a minikube start
输出指出,您需要重新部署集群,以便更改生效。
<$>[注] **注:**虽然生产Kubernetes集群在调整记忆等资源时通常不需要完全重新部署,但您绝不应该期望在运行Kubernetes集群内进行持续的更改 - 仅限于您的配置文件。
1[environment local]
2minikube delete
1[secondary_label Output]
2🔥 Deleting "minikube" in docker ...
3🔥 Deleting container "minikube" ...
4🔥 Removing /home/sammy/.minikube/machines/minikube ...
5💀 Removed all traces of the "minikube" cluster.
1[environment local]
2minikube start
minikube
还提供了暂时将本地文件系统中的目录插入群集的能力,您可以使用minikube mount
命令将目录导出到群集中。
mount
命令的语法使用以下语法: local_path:minikube_host_path
。命令的local_path
部分是您想要嵌入集群的本地目录,命令的minikube_host_path
部分是您想要访问文件的 Minikube容器或 VM 中的位置。
此示例命令将您的本地家庭目录嵌入到您的minikube
集群中,在/host
路径上:
1[environment local]
2minikube mount $HOME:/host
1[secondary_label Output]
2📁 Mounting host path /home/sammy into VM as /host ...
3 ▪ Mount type:
4 ▪ User ID: docker
5 ▪ Group ID: docker
6 ▪ Version: 9p2000.L
7 ▪ Message Size: 262144
8 ▪ Options: map[]
9 ▪ Bind Address: 192.168.49.1:43605
10🚀 Userspace file server: ufs starting
11✅ Successfully mounted /home/sammy to /host
12
13📌 NOTE: This process must stay alive for the mount to be accessible ...
如果您想要保存输入或输出,例如从迷你管
集群中记录,这可能是有用的。
与端口转发一样,这将在这个终端中作为封锁过程运行,直到您发送一个Ctrl+C
命令。
第 5 部分 (可选) 使用多个 Kubernetes 集群
为了在本地运行多个 Kubernetes 集群,‘minikube’ 会设置多个配置文件,例如,如果您想使用和测试多个版本的 Kubernetes,您可以创建多个 Kubernetes 集群,并使用--profile
或-p
旗帜在它们之间切换。
如果您计划在一段时间内使用一个特定的配置文件,则minikube profile
命令允许您配置您想要使用的默认配置文件,而不是在每个命令中指定--profile
旗。
您可以通过运行minikube start
和-p
旗帜来开始 Minikube 使用一个新的配置文件:
1[environment local]
2minikube start -p new-profile
然后您可以使用minikube 配置文件
更改 Minikube 的活跃配置文件:
1[environment local]
2minikube profile new-profile
1[secondary_label Output]
2✅ minikube profile was successfully set to new-profile
您还可以使用获取个人资料
命令获取您正在使用的当前个人资料:
1[environment local]
2minikube config get profile
1[secondary_label Output]
2New-profile
无论您是否使用多个配置文件,‘minikube’都会自动在其默认位置创建配置文件,在那里‘kubectl’和其他Kubernetes工具可以解析它们。
1[environment local]
2kubectl get nodes
1[secondary_label Output]
2NAME STATUS ROLES AGE VERSION
3minikube Ready control-plane,master 3h18m v1.23.1
在运行kubectl
时,您可以指定向不同于默认的kubeconfig
文件的路径。kubectl
将使用该配置中指定的群集凭据而不是默认的群集凭据。
1[environment local]
2kubectl --kubeconfig=remote-kubeconfig.yaml get nodes
这些非Minikube节点正在远程运行:
1[secondary_label Output]
2NAME STATUS ROLES AGE VERSION
3pool-xr6rvqbox-uha8f Ready <none> 2d2h v1.21.9
4pool-xr6rvqbox-uha8m Ready <none> 2d2h v1.21.9
5pool-xr6rvqbox-uha8q Ready <none> 2d2h v1.21.9
Kubernetes 通常旨在与 一个配置文件每集群一起工作,这样它们可以在运行时传输到 `kubectl’ 和其他命令. 虽然可以合并配置,但最佳做法将根据您使用 Kubernetes 而有所不同,并且不需要这样做。
结论
在本教程中,您安装了 Minikube 并配置了内置的 Kubernetes 仪表板来监控和部署应用程序. 您还探索了使用 Minikube 和使用 Minikube profiles 和 kubectl -kubeconfig 旗帜的远程 Kubernetes 实例同时使用本地测试实例的最佳实践。
接下来,您可能想了解如何在 Kubernetes 上部署一些可扩展的应用程序,例如 ArgoCD用于连续部署,或 TOBS用于可观察性。