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,这些 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 主节点会自动处理跨群集节点调度 Pod。

每个 Kubernetes 节点至少运行:

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

  • 负责从注册表中提取容器映像、解包容器和运行应用程序的容器运行时(如 Docker、rkt)。

要创建 minikube 群集:

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

下载 cRPD Docker 映像

先决条件
  • 导入 cRPD 软件之前,请确保 Linux 主机上已安装 Docker,并且 Docker 引擎正在运行。

  • 下载 cRPD 软件之前,请确保在 瞻博网络支持 中注册。

要下载 docker 映像:

  1. 使用订购 cRPD 时在销售履行过程中收到的登录名和密码登录到瞻博网络内部 Docker 注册表。
    1. 创建文件 -passwd.txt 并复制访问令牌,不包括瞻博网络客户服务团队提供的报价。
    2. 使用以下命令登录企业中心:
      root@ubuntu-vm18$ cat passwd.txt | docker login -u"<registered-email-id>" --password-stdin enterprise-hub.juniper.net:443

      例如 root@ubuntu-vm18$ cat passwd.txt | docker login -u user@domain.com --password-stdin enterprise-hub.juniper.net:443

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

    root@dc-rpd-01# docker pull enterprise-hub.juniper.net:443/crpd-docker-prod/crpd:<release tag>

    例如

    root@ubuntu-vm18:~# docker pull enterprise-hub.juniper.net:443/crpd-docker-prod/crpd:22.3R1

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

    root@dc-rpd-01# docker images

使用部署创建 cRPD Pod

Kubernetes Pod 是一组由一个或多个容器组合在一起,用于管理和联网。Kubernetes 部署会检查 Pod 的运行状况,并在 Pod 的容器终止时重新启动。管理 Pod 的创建和扩展的推荐方式是部署。

描述部署中的所需状态,而部署控制器将实际状态更改为所需状态时。您可以定义部署以创建新的副本集,或者通过新部署来移除现有部署并采用其所有资源。

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

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

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

    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 中使用的最常见的容器运行时。

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

要使用 YAML 文件创建 cRPD Pod

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

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

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

    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 都意味着运行给定应用程序的单个实例。如果您希望横向扩展应用程序(例如运行多个实例),应使用多个 Pod,每个实例一个。在 Kubernetes 中,这通常称为复制。

使用作业资源创建 cRPD Pod

一个作业会创建一个或多个 Pod,并将继续重试执行 Pod,直到指定数量的 Pod 成功终止。达到指定数量的成功完成后,即任务完成。您还可以使用作业并行运行多个 Pod。删除作业将清理它创建的 Pod。暂停作业将删除其活动 Pod,直至作业再次恢复。要使用 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. 运行以下命令,查看现有 Pod 列表:

    root@kubernetes-master:~# kubectl get pods

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

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

使用守护程序集创建 cRPD Pod

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

使用 crpd_daemonset.yaml 文件创建 cRPD Pod

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

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

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

    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 都意味着运行给定应用程序的单个实例。如果您希望横向扩展应用程序(例如运行多个实例),应使用多个 Pod,每个实例一个。在 Kubernetes 中,这通常称为复制。

cRPD 的扩展

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

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

要纵向扩展:

  1. 创建 Pod。

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

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

    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. 运行以下命令,检查 Pod 的详细信息:

    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. 运行以下命令列出 Pod 数。您可以查看 2 个 Pod 已终止:

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

cRPD 部署滚动更新

您可以使用新版本来更新 Pod 实例。通过滚动更新,使用新实例逐步更新 Pods 实例,即可在零停机的情况下进行部署更新。新 Pod 安排在具有可用资源的节点上。回滚更新通过持续集成和持续交付应用程序,将应用程序从一个环境提升到另一个环境,而且无需停机。在 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. 运行以下命令以查看 Pod:

    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. 运行以下命令,查看现有 Pod 列表:

    root@kubernetes-master:~# kubectl get pods

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

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

使用安装卷的 cRPD Pod 部署

An 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. 运行以下命令,查看现有 Pod 列表:

    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/#