学习 Kubernetes,第一部分,基础知识、部署和 Minikube
在Twitter上关注我,很高兴接受您对主题或改进的建议/Chris
Kubernetes 致力于编排容器化应用。Docker 非常适合你最初的几个容器。一旦你需要在多台机器上运行容器,需要扩容/缩容、分配负载等等,你就需要一个编排器——Kubernetes。
这是有关 Kubernetes 的系列文章的第一部分,因为这个话题很重要!
- 第一部分 - 从头开始,第一部分,基础知识,部署和 Minikube,我们在这里
- 第二部分:服务和标签简介在本部分中,我们将加深对 Pod 和节点的了解。我们还将介绍服务和标签,以及如何使用标签来查询我们的工件。
- 第三部分 扩展这里我们介绍如何扩展我们的应用程序
- 第四部分 - 自动扩展在本部分中,我们将了解如何设置自动扩展,以便处理突然大量增加的传入请求
在这一部分中我希望涵盖以下内容:
- 为什么要使用Kubernetes和 Orchestration
- 你好,世界:Minikube 基础知识,讲解 Minikube,简单部署示例
- 集群和基本命令、节点、
- 部署,它是什么以及如何部署应用程序
- Pod 和 Node,解释概念和故障排除
为什么要进行编排
一切都始于容器。容器使我们能够创建可重复的环境,因此开发、预发布和生产环境的外观和功能都相同。我们获得了可预测性,而且由于它们从主机操作系统中获取资源,因此也非常轻量。这对于开发人员和运维人员来说是一个重大突破,但容器 API 实际上仅适用于一次管理几个容器。大型系统可能包含数百个甚至数千个容器,也需要进行管理,以便我们能够执行诸如调度、负载均衡、分发等操作。
此时,我们需要编排系统来处理所有这些容器实例。这就是 Kubernetes 的用武之地。
资源
- Kubernetes.io了解 Kubernetes 的最佳资源之一是 Google 的官方 Kubernetes 网站。
- Kubernetes 概述Kubernetes 概述、其各个部分以及其工作原理
- 免费 Azure 帐户如果您想试用 AKS、Azure Kubernetes 服务,您将需要一个免费的 Azure 帐户
- 云端 Kubernetes你是否觉得自己已经了解 Kubernetes 的方方面面,只想学习如何使用托管服务?那么这个链接正适合你
- AKS、Azure Kubernetes 服务文档Azure Kubernetes 服务,托管 Kubernetes
- AKS 的最佳实践您已经了解 AKS 并想学习如何更好地使用它?
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
您还可以确保kubectl
已正确安装并运行:
kubectl version
好的,现在我们准备学习 Kubernetes。
学习 kubectl 和基本概念
在学习 Kubernetes 时,让我们通过了解更多有关kubectl
命令行程序的知识来做到这一点,该程序可以让我们与集群进行交互,并让我们在该集群上部署和管理应用程序。
集群(Cluster)这个词的意思只是一组类似的东西,但在 Kubernetes 的语境中,它指的是一台Master
和多台称为 的工作机器Nodes
。节点过去被称为 Minions。

,但现在情况已不再如此。
主节点决定在节点上运行什么,包括计划的工作负载或容器化应用程序。这引出了我们的下一个命令:
kubectl get nodes
接下来,让我们尝试使用run
以下命令在 Kubernetes 上运行我们的第一个应用程序:
kubectl run kubernetes-first-app --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
接下来让我们使用以下命令检查一切是否正常运行:
kubectl get deployments
在将我们的应用程序放到 Kluster 上时,通过调用run
命令,Kubernetes 在后台执行了一些操作,它:
- 搜索可以运行应用程序实例的合适节点,由于只有一个节点,因此选择了该节点
- 安排应用程序在该节点上运行
- 配置集群在需要时重新安排新节点上的实例
接下来我们要介绍一下概念Pod
,那么什么是Pod呢?
Pod 是最小的可部署单元,由一个或多个容器组成,例如 Docker 容器。关于 Pod,我们目前就讲到这里,但如果你真的想了解更多,可以阅读这里。
这里之所以提到 Pod,是因为我们的容器和应用都位于 Pod 内部。此外,Pod 运行在一个私有的隔离网络中,虽然其他 Pod 和服务可以看到它,但网络外部无法访问。这意味着我们无法通过命令访问我们的应用curl
。
不过我们可以改变这一点。目前有多种方法可以将我们的应用程序暴露给外界,但我们将使用代理。
现在打开第二个终端窗口并输入:
kubectl proxy
这将以kubectl
API 的形式公开,我们可以通过 HTTP 请求进行查询。结果应该如下所示:现在,我们无需再输入任何内容, 只需输入以下内容即可获得相同的结果:kubectl version
curl http://localhost:8001/version
Kubernetes 内部的 API Server 已经为每个 Pod 创建一个 Endpoint,并根据其 Pod 名称进行管理。因此,下一步就是找到 Pod 的名称:
kubectl get pods
这将列出您拥有的所有 pod,此时它应该只是一个 pod,看起来像这样:
然后你可以将其保存到变量中,如下所示:
最后,我们现在可以进行 HTTP 调用来了解有关我们的 pod 的更多信息:
curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME
这将给我们一个很长的 JSON 响应(我稍微修剪了一下但它还是很长...)
对于我们这些应用开发者来说,这或许没什么特别的吸引力。我们想知道应用的运行情况。最好的方法就是查看日志。我们用这个命令来做:
kubectl logs $POD_NAME
正如您在下面看到的,我们知道从我们的应用程序获取日志:
现在我们知道了 Pod 的名称,我们可以做各种事情,比如检查它的环境变量,甚至可以进入容器内部查看内容。
kubectl exec $POD_NAME env
得出以下结果:
现在让我们进入容器内部:
kubectl exec -ti $POD_NAME bash
我们进入了!这意味着我们甚至可以看到源代码的样子:
cat server.js
在我们的容器内,我们现在可以通过输入以下命令来访问正在运行的应用程序:
curl http://localhost:8080
概括
我们现在就到此为止。
我们到底学到了什么?
- Kubernetes,它的起源
- 为什么你很快就会需要它
- Master、Nodes 和 Pods 等概念
- Minikube、kubectl 以及如何将镜像部署到我们的集群
感觉还有很多东西要学?你说得对,这是一个很大的话题。
我希望您继续关注接下来的部分,我们将在其中了解有关节点、Pod、服务、扩展、更新以及最终如何在云中使用托管服务的更多信息。
点击此处查看下一部分
文章来源:https://dev.to/azure/kubernetes-from-the-beginning-part-i-4ifd