学习 Kubernetes,第一部分,基础知识、部署和 Minikube

2025-05-24

学习 Kubernetes,第一部分,基础知识、部署和 Minikube

在Twitter上关注我,很高兴接受您对主题或改进的建议/Chris

Kubernetes 致力于编排容器化应用。Docker 非常适合你最初的几个容器。一旦你需要在多台机器上运行容器,需要扩容/缩容、分配负载等等,你就需要一个编排器——Kubernetes。

这是有关 Kubernetes 的系列文章的第一部分,因为这个话题很重要!

  • 第一部分 - 从头开始​​,第一部分,基础知识,部署和 Minikube,我们在这里
  • 第二部分:服务和标签简介在本部分中,我们将加深对 Pod 和节点的了解。我们还将介绍服务和标签,以及如何使用标签来查询我们的工件。
  • 第三部分 扩展这里我们介绍如何扩展我们的应用程序
  • 第四部分 - 自动扩展在本部分中,我们将了解如何设置自动扩展,以便处理突然大量增加的传入请求

在这一部分中我希望涵盖以下内容:

  • 为什么要使用Kubernetes和 Orchestration
  • 你好,世界:Minikube 基础知识,讲解 Minikube,简单部署示例
  • 集群和基本命令、节点、 
  • 部署,它是什么以及如何部署应用程序
  • Pod 和 Node,解释概念和故障排除

 为什么要进行编排

一切都始于容器。容器使我们能够创建可重复的环境,因此开发、预发布和生产环境的外观和功能都相同。我们获得了可预测性,而且由于它们从主机操作系统中获取资源,因此也非常轻量。这对于开发人员和运维人员来说是一个重大突破,但容器 API 实际上仅适用于一次管理几个容器。大型系统可能包含数百个甚至数千个容器,也需要进行管理,以便我们能够执行诸如调度负载均衡分发等操作。

此时,我们需要编排系统来处理所有这些容器实例。这就是 Kubernetes 的用武之地。

资源

Kubernetes 

那么我们对 Kubernetes 了解多少?

它是一个用于自动部署、扩展和管理容器化应用程序的开源系统

我们先从它的名字说起。它在希腊语中是“舵手”的意思,也就是掌舵的人。所以它的标志看起来像这样,就像船上的方向盘:

它也被称为K8s ,所以K ubernete s中间的 8 个字符被去掉了。现在你可以让你的朋友知道为什么它被称为 K8 了。

以下是一些关于其起源的 Jeopardy 知识。Kubernetes 诞生于 Borg 和 Omega 系统。它于 2014 年捐赠给CNCF(云原生计算基金会)。它使用 Go/Golang 编写。

如果我们抛开这些琐碎的知识,你会发现它是由谷歌根据自身处理大量容器的经验而构建的。它也是开源的,并且经过实战检验,能够处理真正大型的系统,例如行星级的大型系统。

因此销售宣传是:

每周运行数十亿个容器,Kubernetes 无需增加运营团队即可扩展

听起来很神奇吧?数十亿个容器,因为我们都是谷歌规模。不是吗?:) 好吧,即使你有 10 到 100 个容器,它也适合你。

 入门

好吧好吧,假设我同意这一切,我该如何开始呢?

迫不及待了,好啊,让我们开始用 Minikube 做一些实际的事情吧

好的,听起来不错。我是个程序员,喜欢实用的东西。Minikube 是什么?

Minikube 是一个让我们在本地运行 Kubernetes 的工具

哦,太好了,我的小机器上有数百万个容器?

好吧,不,让我们从一些开始,同时学习 Kubernetes 基础知识。

安装

要安装 Minikube,请转到此安装页面

只需几个简单的步骤,我们就可以安装

  • 虚拟机管理程序
  • Kubectl(Kube控制工具)
  • 迷你库贝

 跑步

输入以下命令启动并运行该程序:

minikube start
Enter fullscreen mode Exit fullscreen mode

它看起来应该是这样的:

您还可以确保kubectl已正确安装并运行:

kubectl version
Enter fullscreen mode Exit fullscreen mode

应该给你这样的回应:

好的,现在我们准备学习 Kubernetes。

 学习 kubectl 和基本概念

在学习 Kubernetes 时,让我们通过了解更多有关kubectl命令行程序的知识来做到这一点,该程序可以让我们与集群进行交互,并让我们在该集群上部署和管理应用程序。

集群(Cluster)这个词的意思只是一组类似的东西,但在 Kubernetes 的语境中,它指的是一台Master和多台称为 的工作机器Nodes。节点过去被称为 Minions。


,但现在情况已不再如此。

主节点决定在节点上运行什么,包括计划的工作负载或容器化应用程序。这引出了我们的下一个命令:

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

这应该给我们这样的结果: 这告诉我们有哪些节点可以工作。

接下来,让我们尝试使用run以下命令在 Kubernetes 上运行我们的第一个应用程序:

kubectl run kubernetes-first-app --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
Enter fullscreen mode Exit fullscreen mode

这应该给我们如下的回应:

接下来让我们使用以下命令检查一切是否正常运行:

kubectl get deployments
Enter fullscreen mode Exit fullscreen mode

终端中显示以下内容:

在将我们的应用程序放到 Kluster 上时,通过调用run命令,Kubernetes 在后台执行了一些操作,它:

  • 搜索可以运行应用程序实例的合适节点,由于只有一个节点,因此选择了该节点
  • 安排应用程序在该节点上运行
  • 配置集群在需要时重新安排新节点上的实例

接下来我们要介绍一下概念Pod,那么什么是Pod呢?

Pod 是最小的可部署单元,由一个或多个容器组成,例如 Docker 容器。关于 Pod,我们目前就讲到这里,但如果你真的想了解更多,可以阅读这里。

这里之所以提到 Pod,是因为我们的容器和应用都位于 Pod 内部。此外,Pod 运行在一个私有的隔离网络中,虽然其他 Pod 和服务可以看到它,但网络外部无法访问。这意味着我们无法通过命令访问我们的应用curl

不过我们可以改变这一点。目前有多种方法可以将我们的应用程序暴露给外界,但我们将使用代理。

现在打开第二个终端窗口并输入:

kubectl proxy
Enter fullscreen mode Exit fullscreen mode

这将以kubectlAPI 的形式公开,我们可以通过 HTTP 请求进行查询。结果应该如下所示:现在,我们无需再输入任何内容, 只需输入以下内容即可获得相同的结果:

kubectl versioncurl http://localhost:8001/version

Kubernetes 内部的 API Server 已经为每个 Pod 创建一个 Endpoint,并根据其 Pod 名称进行管理。因此,下一步就是找到 Pod 的名称:

kubectl get pods
Enter fullscreen mode Exit fullscreen mode

这将列出您拥有的所有 pod,此时它应该只是一个 pod,看起来像这样:

然后你可以将其保存到变量中,如下所示:

最后,我们现在可以进行 HTTP 调用来了解有关我们的 pod 的更多信息:

curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME
Enter fullscreen mode Exit fullscreen mode

这将给我们一个很长的 JSON 响应(我稍微修剪了一下但它还是很长...)

对于我们这些应用开发者来说,这或许没什么特别的吸引力。我们想知道应用的运行情况。最好的方法就是查看日志。我们用这个命令来做:

kubectl logs $POD_NAME
Enter fullscreen mode Exit fullscreen mode

正如您在下面看到的,我们知道从我们的应用程序获取日志:

现在我们知道了 Pod 的名称,我们可以做各种事情,比如检查它的环境变量,甚至可以进入容器内部查看内容。

kubectl exec $POD_NAME env
Enter fullscreen mode Exit fullscreen mode

得出以下结果:

现在让我们进入容器内部:

kubectl exec -ti $POD_NAME bash
Enter fullscreen mode Exit fullscreen mode

我们进入了!这意味着我们甚至可以看到源代码的样子:

cat server.js
Enter fullscreen mode Exit fullscreen mode

在我们的容器内,我们现在可以通过输入以下命令来访问正在运行的应用程序:

curl http://localhost:8080
Enter fullscreen mode Exit fullscreen mode

概括

我们现在就到此为止。
我们到底学到了什么?

  • Kubernetes,它的起源
  • 为什么你很快就会需要它
  • Master、Nodes 和 Pods 等概念
  • Minikube、kubectl 以及如何将镜像部署到我们的集群

感觉还有很多东西要学?你说得对,这是一个很大的话题。

我希望您继续关注接下来的部分,我们将在其中了解有关节点、Pod、服务、扩展、更新以及最终如何在云中使用托管服务的更多信息。

点击此处查看下一部分

文章来源:https://dev.to/azure/kubernetes-from-the-beginning-part-i-4ifd
PREV
了解如何在微服务架构上构建无服务器 GraphQL API,第一部分
NEXT
Serverless 真的像大家说的那么便宜吗?