前言
在本文中,您将了解 Kubernetes 并开发和部署示例应用程序。为了避免重复并避免与其他资源发生冲突,本文将重点介绍在 Kubernetes 集群上部署第一个应用程序所需的操作,而不是首先解决理论主题。不过,本文不会回避理论主题;您将在需要时即时了解它们。这种方法将防止过早引入可能没有意义的抽象讨论和解释。
为什么会出现对 Kubernetes 的需求?
如果您稍微回溯一下,看看人们是如何运行他们的 IT 基础架构的,您会发现这一切都始于物理系统及其服务器。这个部署时代被称为传统环境。这种部署的问题是成本非常高,硬件利用率也没有得到优化。整个设置也极易受到攻击。
开发了虚拟系统以使该过程更加高效。在这种部署中,您的基础之上可以有多个虚拟操作系统。这个部署时代被称为虚拟部署时代,部署更加优化,因为用户可以在一组硬件上运行多个东西。很快,人们意识到应用程序不需要整个操作系统的全部功能,而只需要一小部分功能。这些小的变化后来被称为容器。
人们还意识到容器比最初想象的要有用得多。它们不仅轻量级,而且更安全,因为整个应用程序可以分解为微服务,从而改善了开发人员的工作负载分配并保护了应用程序。容器的另一个突出优点是它们消除了开发团队和运营团队之间的环境差异。
现在,Kubernetes 适合在哪里?
想象一下公司的 IT 基础架构。让我们以亚马逊为例。想想它必须运行的事物和服务的数量。现在,考虑一下正常运行所有内容所需的容器数量。这是一项艰巨的任务,不是吗?这就是 Kubernetes 可以提供帮助的地方。现在,让我们在综合指南中逐步学习 Kubernetes。
什么是 Kubernetes?
简而言之,Kubernetes 是一个容器编排工具。它具有一组功能,可让您管理和维护基础架构中存在的 n 个容器。
Kubernetes 有助于容器的工作负载管理和工作调度。由谷歌创建,它是开源的,以便公众可以使用它,进而进一步改进它;Kubernetes 社区非常出色。Kubernetes 与市场上的云提供商的兼容性使其成为容器管理的有效解决方案。
Kubernetes 的特点
Kubernetes 具有许多特性,使用起来非常愉快。下面给出了一些最显着的功能。
- 自动调度: Kubernetes 最大的特点之一是它加载了自动调度,这正是它听起来的样子。在 Kubernetes 中,您有一个可以有 n 个节点的集群。现在,当一个容器启动时,它必须附加到一个节点上。Kubernetes 根据所需资源等约束来管理 pod 应附加到的节点。
- 自愈能力:自愈是 Kubernetes 的一个特性,是所有开发者的梦想。它基本上有助于在节点死亡时重新调度和替换容器。此外,它还消除了不能轻易响应用户定义检查的容器。当它杀死这些容器时,它还确保客户端无法看到有故障的容器。如果您正在使用部署,它还会重新生成这些容器以满足创建者声明的所需副本数量。
- 自动回滚和推出:在更新您正在运行的应用程序时,此功能最为方便。想象一下,您创建了一个应用程序,该应用程序具有多个运行不同事物的 pod 和容器。现在,就像所有其他应用程序一样,您决定更新它。Kubernetes 在这里可以帮助您的是,它不会给您的应用程序带来任何停机时间,它会关闭应用程序的每个旧实例并放入一个新实例。现在,如果您创建的最近更新有一些缺陷怎么办?一旦您意识到这一点,您就可以滚动更新,您不必担心它,因为 Kubernetes 也为您提供了支持。它允许您在不停机的情况下迁移到旧版本的应用程序。
- 水平扩展和负载平衡:这是开发人员梦寐以求的另一个功能。假设您在一家电子商务公司工作。会有一些日子,比如节假日、打折等,你网站的流量会比其他日子多。在流量增加的日子里,您需要运行更多实例,以便您的应用程序能够承受流量产生的负载。在这种情况下,Kubernetes 允许您通过使用简单的命令来扩大或缩小规模;此外,它可以将负载分布在正在运行的实例上,这样与其他副本相比,您的 pod 不会面临繁重的流量。
准备工作面试?前往我们最常被问到的Kubernetes 面试问题和答案。
Kubernetes 架构
在 Kubernetes 中,各种子组件可以分为两个主要组件。主要成分是:
- 主节点
- 工作节点
下图描绘了 Kubernetes 的整体架构组件:
主节点
集群的管理是主节点的责任,因为它是集群几乎所有管理任务的第一个联系点。根据设置,集群中将有一个或多个主节点。这样做是为了关注容错性。
如图所示,主节点包括不同的组件,如Controller-manager、ETCD、Scheduler和API Server。
- API Server:它是整个 REST 命令的第一个联系点,用于管理和操作集群。
- Controller-manager:它是一个守护进程,负责在 Kubernetes 中调节集群。Controller-manager 还管理各种其他非终止的控制循环。
- 调度器:调度器,顾名思义,负责将任务调度到工作节点。它还保存每个工作节点或从节点的资源利用率数据。
- ETCD:主要用于共享配置和服务发现。它基本上是一个分布式键值存储。
工作节点或从节点
工作节点或从节点包含管理容器之间网络所需的所有服务。这些服务与主节点通信并将资源分配给调度的容器。如上架构图所示,worker节点有以下组件:
- 码头集装箱
- 库贝莱特
- 库伯代理
- 豆荚
Docker 容器:必须在集群中的每个工作节点上初始化并运行 Docker。Docker 容器在每个工作节点上运行。Docker 容器还运行配置的 pod。
Kubelet:Kubelet的工作是从 API 服务器获取 Pod 的配置。Kubelet 还用于确保上述容器已准备好并正在运行。
Kube-proxy: Kube-proxy 的行为类似于网络代理和任何单个工作节点上服务的负载均衡器。
Pod :一个 pod 可以被认为是一个或多个容器,它们可以在逻辑上一起运行在节点上。
查看这篇关于Docker的博客,深入了解 Docker 容器化。
现在让我们更深入地讨论和学习 Kubernetes pod。
什么是 Pod?
Pod 是 Kubernetes 最小、最基本的执行单元。Pod 也是 Kubernetes 对象模型中最简单的单元,您可以创建和部署它。Pod 代表集群上运行的进程。
每个 pod 都有不同的阶段,这些阶段定义了它在其生命周期中的位置。Pod 的这个阶段实际上并不是 Pod 状态或容器的全面汇总。该阶段仅用于描述当前时间戳中 pod 的状况。
下图显示了 Pod 的各个阶段:
什么是 Kubernetes 中的部署?
Kubernetes 中的部署是一组多个相同的 pod。部署负责运行应用程序的多个副本。如果其中一个实例发生故障、崩溃或变得无响应,部署将替换该实例。这个惊人的功能可确保您的应用程序实例之一始终可用。Kubernetes 部署控制器管理所有部署。
要运行副本,部署使用 pod 模板。这些 pod 模板对 pod 的外观和行为有规范,例如 pod 挂载的卷、标签、污点等。
当您更改部署的 pod 模板时,会自动一个一个地创建新的 pod。
观看有关 Kubernetes 初学者教程的视频:
如何搭建 Kubernetes 集群?
对于此安装,您有一个主节点和一个工作节点,如果需要,您可以添加更多。您需要在这两种类型的节点上运行某些命令。这里的主实例的终端文本颜色为绿色,从属实例为橙色,以便于区分两者。现在,让我们开始吧。
步骤 1:在主从实例上运行以下命令:
sudo su
apt-get update
第 2 步:在主实例和从实例上获取 Docker。为此,请运行以下命令:
apt-get install docker.io #install docker
apt-get update && apt-get install -y apt-transport-https curl
第 3 步:在主实例和从属实例上,运行以下命令以获取 Kubernetes 基本要素:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat < /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
第 4 步:通过在主实例和从属实例上运行以下命令来安装 Kubeadm:
apt-get install -y kubelet kubeadm kubectl
现在,是时候创建集群了。为此,第一步是在主节点上初始化 Kubeadm。
第 5 步:仅通过在主节点上运行以下命令来初始化 Kubeadm:
kubeadm init --apiserver-advertise-address=<enter_your_master’s_private_ip_ here> --pod-network-cidr=192.168.0.0/16 --ignore-preflight-errors=NumCPU
第 6 步:完成第 5 步后,您将找到一个令牌,如下面的屏幕截图所示。您需要从主节点复制令牌并将其粘贴到从节点中:
一旦你把这个标记粘贴到你的从节点上,你会看到如下的消息:
第 7 步:现在,您处于最后阶段。这里需要退出master上的根目录,为Kubernetes配置创建一个文件夹,然后提供以下权限:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
第8步:所以,下一步是安装网络插件,这将允许通信。要安装网络插件,可以使用以下命令:
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
第 9 步:现在,您需要通过运行以下命令来检查所有内容的状态(注意:启动并运行所有内容可能需要几分钟):
kubectl get pods --all-namespaces
您的第一个 Kubernetes 集群已启动并运行!