Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

在 Kubernetes 上安装 cRPD

Kubernetes 是一种用于管理容器化工作负载和服务的开源平台。容器是捆绑和运行应用程序的好方法。在生产环境中,您需要管理运行应用程序的容器,并确保不会出现停机时间。例如,如果容器停机,需要启动另一个容器。Kubernetes 为您提供了一个弹性运行分布式系统的框架。Kubernetes 提供了一个平台,支持跨主机容器群集的应用程序容器的部署自动化、扩展和操作。

前提

在 Linux 系统上安装 Kubernetes 并在两节点 Linux 集群上部署 Kubernetes,请参阅 Kubernetes 安装

部署 Kubernetes 时,您将获得一个群集。Kubernetes 群集由一组称为节点的工人机器组成,用于运行容器化应用程序。每个群集至少有一个工工节点。工人节点托管应用程序组件的 POD。

本节概述了在 Kubernetes 上创建 cRPD Docker 映像的步骤。

安装 Kubernetes

要安装 Kubernetes:

  1. 以 root 用户身份登录。
  2. 下载和安装软件。
  3. 开始 Kubernetes。

Kubernetes 群集

Kubernetes 协调连接到单个单元工作的计算机群集。Kubernetes 以高效的方式跨群集实现 cRPD 的部署和调度自动化。

Kubernetes 群集由两种类型的资源组成:

  • 主协调群集

  • 节点是运行应用程序的工作者

主要负责管理群集。主要协调群集中的所有活动,例如安排应用程序、维护应用程序所需的状态、扩展应用程序和发布新更新。

节点是虚拟机或物理计算机,用作 Kubernetes 群集中的工人机器。每个节点都有一个 Kubelet,这是管理节点并与 Kubernetes 主设备通信的代理。该节点还应具有用于处理容器操作的工具,例如 Docker 或 rkt。处理生产流量的 Kubernetes 群集应至少有三个节点。

在 Kubernetes 上部署 cRPD 时,主设备将启动应用容器。主要计划容器在集群的节点上运行。节点使用主节点公开的 Kubernetes API 与主节点通信。最终用户还可以直接使用 Kubernetes API 与群集交互。

Pod 始终在节点上运行。节点是 Kubernetes 中的一台工人机器,可以是虚拟机或物理机器,具体取决于群集。每个节点都由主节点管理。一个节点可以有多个 Pod,而 Kubernetes 主设备会自动处理集群中节点上的计划。

每个 Kubernetes 节点至少运行:

  • Kubelet,一个流程,负责 Kubernetes Master 与节点之间的通信;它管理机器上运行的 Pod 和容器。

  • 容器运行时间(如 Docker、rkt),负责从注册表中提取容器映像、拆开容器包装并运行应用程序。

要创建 minikube 群集:

  1. 运行以下命令验证 minikube 版本:
  2. 运行以下命令以启动群集:
  3. 运行以下命令以验证是否安装了 kubectl:
  4. 运行以下命令可查看群集详细信息:
  5. 运行以下命令以查看集群中的节点:

下载 cRPD Docker 图片

要下载 docker 图片:

  1. 使用订购 cRPD 时作为销售履约流程一部分收到的登录名称和密码登录瞻博网络内部 Docker 注册表。

    root@dc-rpd-01# docker login hub.juniper.net -u <username> -p <password>

  2. 使用以下命令从下载网站提取 docker 图像:

    root@dc-rpd-01# docker pull hub.juniper.net/routing/crpd:20.1R1.11

  3. 验证 docker 图像存储库中的图像。

    root@dc-rpd-01# docker images

使用部署创建 cRPD Pod

Kubernetes Pod 是一组一个或多个容器,捆绑在一起以用于管理和网络目的。Kubernetes 部署检查 Pod 的运行状况,如果 Pod 容器终止,则重新启动。部署是管理 Pods 创建和扩展的推荐方式。

在部署中描述所需状态时,部署控制器将实际状态更改为所需状态。您可以定义部署以创建新的复制集,或移除现有部署并采用其所有资源以及使用新部署。

  1. 在 Kubernetes-master 上创建 crpd.yaml 文件并添加以下文本内容:
  2. 保存 crpd.yaml 文件以创建 cRPD Pod。

    root@kubernetes-master:~# kubectl create -f crpd.yaml

  3. 运行以下命令以查看现有 Pods 列表:

    root@kubernetes-master:~# kubectl get pods

  4. 运行以下命令可查看该 Pod 内的容器以及用于构建容器的映像:

    root@kubernetes-master:~# kubectl describe pod crpd

使用 YAML 创建 cRPD Pod

Pod 是 Kubernetes 应用程序的基本执行单元- 您创建或部署的 Kubernetes 对象模型中最小、最简单的单元。Pod 表示一个部署单元:Kubernetes 中的应用程序的单个实例,可能由单个容器或紧密耦合且共享资源的少量容器组成。Docker 是 Kubernetes Pod 中使用的最常见的容器运行时间。

您可以直接在 Kubernetes 中直接创建 Pod 或间接使用控制器。控制器可以创建和管理多个 Pods。控制器使用您提供的 Pod 模板来创建 Pods。Pod 模板是 Pod 规格,包含在其他对象中,例如复制控制器、Jobs 和守护程序集。

要使用 YAML 文件创建 cRPD Pod

  1. 在 Kubernetes-master 上创建 crpd.yaml 文件会添加以下文本内容:
  2. 保存 crpd.yaml 文件以创建 crpd Pod。

    root@kubernetes-master:~# kubectl create -f crpd.yaml

  3. 运行以下命令以查看现有 Pods 列表:

    root@kubernetes-master:~# kubectl get pods

  4. 运行以下命令可查看该 Pod 内的容器以及用于构建容器的映像:

    root@kubernetes-master:~# kubectl describe pod crpd

  5. 运行以下命令以在运行中的容器内提供交互式 CLI:

    root@kubernetes-master:~# kubectl exec -it crpd cli在这里,您正在运行一个带有名称 crpd 的 Pod,并连接到命令行模式。

  6. 运行以下命令以查看路由:

    root@crpd:/> show route

每个 Pod 都意味着运行给定应用程序的单个实例。如果您想要水平扩展应用程序(例如运行多个实例),则应使用多个 Pods,每个实例一个。在 Kubernetes 中,这通常称为复制。

使用作业资源创建 cRPD Pod

作业创建一个或多个 Pod,并将继续重试执行 Pod,直至指定数量的 Pods 成功终止。到达指定数量的成功完成时,任务将完成。您也可使用作业并行运行多个 Pods。删除作业将清理其创建的 Pod。挂起作业将删除其活动 Pods,直至再次恢复工作。要使用 crpd_job.yaml 文件创建 cRPD Pod:

  1. 在工作节点上创建 crpd_job.yaml 文件并添加以下文本内容:
  2. 保存crpd_job.yaml 文件以创建 crpd Pod。

    root@kubernetes-master:~# kubectl create -f crpd_job.yaml

  3. 运行以下命令以查看现有 Pods 列表:

    root@kubernetes-master:~# kubectl get pods

  4. 运行以下命令可查看该 Pod 内的容器以及用于构建容器的映像:

    root@kubernetes-master:~# kubectl describe job/crpdjob

使用 DaemonSet 创建 cRPD Pod

DaemonSet 可确保所有(或部分)节点都运行一个 Pod 的副本。随着节点被添加到群集,Pods 会被添加到它们中。当节点从集群中移除时,这些 Pods 会被收集垃圾。删除守护程序集将清理其创建的 Pods。

使用 crpd_daemonset.yaml 文件创建 cRPD Pod

  1. 在工作节点上创建 crpd_daemonset.yaml 文件并添加以下文本内容:
  2. 保存 da1.yaml 文件以创建 crpd Pod。

    root@kubernetes-master:~# kubectl create -f crpd_daemonset.yaml

  3. 运行以下命令以查看现有 Pods 列表:

    root@kubernetes-master:~# kubectl get pods

  4. 运行以下命令可查看该 Pod 内的容器以及用于构建容器的映像:

    root@kubernetes-master:~# kubectl describe pod crpd

    root@kubernetes-master:~# kubectl describe pod crpd-5fc4fd79df-xr8f5

每个 Pod 都意味着运行给定应用程序的单个实例。如果您想要水平扩展应用程序(例如运行多个实例),则应使用多个 Pods,每个实例一个。在 Kubernetes 中,这通常称为复制。

cRPD 扩展

您可以使用 –replicas kubectl run 命令参数根据需求创建多个 cRPD 实例。部署是一个可以拥有和管理其复制集的对象。

在扩展之前,我们应该有一个 Pod

要纵向扩展:

  1. 创建 Pod。

    root@kubernetes-master:~# kubectl create -f crpd_replicatset.yaml

  2. 在 Kubernetes-master 上创建 crpd_replicaSet.yaml 文件会添加以下文本内容:
  3. 运行以下命令可查看 Pods:

    root@kubernetes-master:~# kubectl get pods

  4. 运行以下命令以将部署扩展到 4 个副本:

    root@kubernetes-master:~# kubectl scale deployments crpdref --replicas=4

  5. 运行以下命令以列出部署:

    root@kubernetes-master:~# kubectl get deployments

  6. 运行以下命令检查已更改的 POD 数量:

    root@kubernetes-master:~# kubectl get pods -o wide

  7. 运行以下命令检查 Pods 的详细信息:

    root@kubernetes-master:~# kubectl describe pods

要缩小规模:

  1. 运行以下命令以将服务缩减为 2 个副本:

    root@kubernetes-master:~# kubectl scale deployments crpdref --replicas=2

  2. 运行以下命令以列出部署:

    root@kubernetes-master:~# kubectl get deployments

  3. 运行以下命令以列出 Pods 的数量。您可以查看已终止的 2 个 Pod:

    root@kubernetes-master:~# kubectl get pods -o wide

cRPD 部署的滚动更新

您可以使用新版本更新 Pod 实例。滚动更新可通过增量使用新 Pods 实例进行更新,从而在零停机的情况下进行部署更新。新 Pods 安排在具有可用资源的节点上。回滚更新可通过持续集成和持续交付应用程序(零停机时间)将应用程序从一个环境推广到另一个环境。在 Kubernetes 中,更新将进行版本化,任何部署更新均可恢复为之前的稳定版本。

要使用新映像更新 cRPD 部署并在更新后保留配置:

  1. 创建 cRPD Pod。

    root@crpd-01:~# kubectl kubectl create -f crpd_deploy.yaml

  2. 在 Kubernetes-master 上创建 crpd_deploy.yaml 文件会添加以下文本内容:
  3. 运行以下命令以列出部署:

    root@kubernetes-master:~# kubectl get deployments

  4. 运行以下命令以列出正在运行的 Pod:

    root@kubernetes-master:~# kubectl get pods

    root@kubernetes-master:~# kubectl get pods -o wide

  5. 运行以下命令以查看 cRPD 的当前映像版本:

    root@kubernetes-master:~# kubectl exec -it crpd-deploy4-674b4fcfb5-8xc5d -- cli

  6. 运行以下命令以查看当前映像版本:

    root@crpd-deploy4-674b4fcfb5-8xc5d> show version

  7. 运行以下命令以将应用程序的映像更新为新版本:

    root@crpd-deploy4-674b4fcfb5-8xc5d:~$ sudo kubectl edit deployment/crpd-deploy4

  8. 运行以下命令确认图像是否已更新:

    root@crpd-deploy4-674b4fcfb5-8xc5d:~$ sudo kubectl rollout status deployment/crpd-deploy4

  9. 运行以下命令可查看 Pods:

    root@crpd-deploy4-674b4fcfb5-8xc5d> kubectl get pods

  10. 运行以下命令以查看 cRPD 的映像版本:

    root@kubernetes-master:~$ sudo kubectl exec -it crpd-deploy4-6ff476994d-8z2kr -- bash

  11. 运行以下命令以查看当前映像版本:

    root@crpd-deploy4-6ff476994d-8z2kr> show version

具有分配资源的 cRPD Pod 部署

Pod 提供两种共享资源,即容器的网络和存储。当 Pod 中的容器与 Pod 外部的实体通信时,它们必须协调如何使用共享网络资源(例如端口)。在 Pod 中,容器使用 IP 地址和端口进行 localhost通信。

Pod 中的容器查看系统主机名与为 Pod 配置 name 的相同。

Pod 中的任何容器都可使用 privileged 容器规格上的标记来启用权限模式。对于使用操作系统管理功能(例如操作网络堆栈或访问硬件设备)的容器而言,这很有用。权限容器内的流程获得与容器外部处理几乎相同的权限。

要使用资源查看 Pod 部署:

  1. 在 Kubernetes-master 上创建 crpd_res.yaml 文件会添加以下文本内容:
  2. 保存crpd_res.yaml 文件以创建 crpd Pod。

    root@kubernetes-master:~# kubectl create -f crpd_res.yaml

  3. 运行以下命令以查看现有 Pods 列表:

    root@kubernetes-master:~# kubectl get pods

  4. 运行以下命令可查看该 Pod 内的容器以及用于构建容器的映像:

    root@kubernetes-master:~# kubectl describe pod crpres

使用安装容量的 cRPD Pod 部署

A emptyDir 是在 K8s 上支持的几种类型的卷中之一,最初创建时,Pod 被分配给节点,只要该 Pod 在该节点上运行,就存在。正如该名称所示, emptyDir 该卷最初是空的。Pod 中的所有容器都可以在卷中 emptyDir 读取和写入相同的文件,但是该卷可以安装在每个容器中的相同或不同路径上。当 Pod 出于任何原因从节点中移除时,中的 emptyDir 数据将被永久删除。

要通过在 Kubernetes 上安装存储路径来查看 cRPD Pod 部署:

  1. 在 Kubernetes-master 上创建 crpd_volume.yaml 文件会添加以下文本内容:
  2. 保存crpd_volume.yaml 文件以创建 crpd Pod。

    root@kubernetes-master:~# kubectl create -f crpd_volume.yaml

  3. 运行以下命令以查看现有 Pods 列表:

    root@kubernetes-master:~# kubectl get pods

  4. 运行以下命令可查看该 Pod 内的容器以及用于构建容器的映像:

    root@kubernetes-master:~# kubectl describe pod crpd-volume

  5. 运行以下命令以执行 cRPD 实例:

    root@kubernetes-master:~# kubectl exec -it crpd-volume bash

  6. 运行以下命令以查看路径中的文件:

    root@crpd-volume:/# ls

  7. 运行以下命令以导航到存储路径:

    root@crpd-volume:/# cd var/log/crpd-storage/

    root@crpd-volume:/var/log/crpd-storage/#