注:

开始使用 Oracle Cloud Infrastructure 中基于 Arm 的 Kubernetes 集群

此教程介绍了如何在 Oracle Cloud Infrastructure(OCI) 中创建使用 Ampere A1 计算平台的基于 ARM 的 Kubernetes 集群。您还将在 kubernetes 集群上部署常用 Web 容器 Apache Tomcat。使用本教程中的方法,您可以创建可在基于 Arm 的 kubernetes 集群和基于 x86(Intel 和 AMD)的集群之间无缝移植的应用部署。

简介

目标

在本教程中,您将:

Ampere A1 计算平台是什么

基于 Ampere Altra CPU 的 Ampere A1 计算平台代表了正在构建可从边缘设备扩展到云数据中心的负载的企业和应用开发人员的代差。此平台的独特设计提供了稳定且可预测的性能,因为计算核心内没有资源争用,并且具有更强的隔离性和安全性。Oracle Cloud Infrastructure 上这种新型的计算配置提供了卓越的平台,可将 Altra CPU 的强大功能与 OCI 上服务的安全性、可扩展性和生态系统相结合。

为您的环境引入 Arm 体系结构

在应用开发过程中引入 Arm 架构时,大多数情况下,开发工作流保持不变。您当前使用的工具和流程将无缝接管,您的开发工作站设置将保持不变。这种情况的一般例外是低级别系统应用程序,它们使用高度专业化的工具针对特定的 CPU 功能。在大多数情况下,您可能需要对工作流中的构建或打包步骤进行微小的更改,以支持 Arm 体系结构。首先分析现有工作流,确定您是否有任何特定于平台的构建或打包步骤。

创建基于 ARM 的 Kubernetes 集群

Container Engine for Kubernetes 简单易用,可与 OCI Cloud Shell 结合使用,无需设置本地环境即可实现完全控制。首先,您需要在 OCI 上创建新的 Kubernetes 集群。

  1. 从 Oracle Cloud 控制台的导航菜单中,转至开发人员服务并单击 Kubernetes 集群

  2. 单击创建集群。您可以使用快速创建选项使用默认值,或者使用定制创建选项指定高级设置。此处使用快速创建,因为它选择的默认值是一个很好的开始。

    插图创建集群的说明

  3. 在“创建集群”页上,选择一些基本配置选项,例如要运行的 Kubernetes 版本以及集群的节点数和配置。对于本教程,为节点选择 Ampere A1 配置。

    注意:为节点选择 VM.Standard.A1.Flex 配置,如下所示。

    插图创建工作流的说明

    还可以为集群指定名称和区间。可见性类型指示集群中的节点是否可从 Internet 访问,例如,通过 SSH 访问。将它们保留在专用网络上并使用堡垒或跳跃公共网络上的主机来提供访问路径更为常见。在此处,我们选择使节点保持专用状态的默认值。

  4. 单击创建集群,工作流将开始创建所有必需的资源和集群本身。

    创建支持资源后,将显示群集详细信息页面。几分钟内,将创建并激活集群。

  5. 在集群状态为“活动”后,单击访问集群按钮以查看访问集群的方式。

  6. 选择 Cloud Shell 选项。Cloud Shell 是功能全面的联机终端环境,与控制台集成。Cloud Shell 提供了与 Kubernetes 集群交互所需的所有工具,这是您无需配置本地开发环境即可开始使用的最快方法。

    插图访问 cloudshell 的说明

    您可以直接从页面启动 Cloud Shell。请注意,控制台顶部始终提供对 Cloud Shell 的访问,以供快速访问。

    该页面还包括一个在 Cloud Shell 中运行的命令。此命令使用 OCI CLI 创建 kubeconfig 文件。kubectl 等 Kubernetes 客户端可以使用配置文件来简化对集群的访问。此类文件通常称为 kubeconfig 文件。通常,此配置文件位于 ~/.kube 中。单个配置文件可以包含多个群集的访问配置。

    注意已在 Cloud Shell 环境中为您安装并配置了 OCI CLI。

  7. 启动 Cloud Shell,然后复制命令并将其粘贴到 Cloud Shell 中以运行它。适用于 Kubernetes 的标准命令行客户端是 kubectl,它预先安装在 Cloud Shell 环境中。

    现在,让我们检查是否可以与集群交互并查看集群节点。

  8. 将以下命令复制到 Cloud Shell 并运行它。

    kubectl get nodes -o wide
    

    您应看到与以下示例类似的输出,具体取决于集群中的节点数。请注意,内核版本显示运行 Oracle Linux for aarch64(Arm 64 位)体系结构。

    NAME          STATUS                     ROLES   AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                  KERNEL-VERSION                      CONTAINER-RUNTIME
    10.0.10.229   Ready                      node    3d7h   v1.19.7   10.0.10.229   <none>        Oracle Linux Server 7.9   5.4.17-2102.200.13.el7uek.aarch64   docker://19.3.11
    10.0.10.29    Ready                      node    3d7h   v1.19.7   10.0.10.29    <none>        Oracle Linux Server 7.9   5.4.17-2102.200.13.el7uek.aarch64   docker://19.3.11
    10.0.10.87    Ready                      node    3d7h   v1.19.7   10.0.10.87    <none>        Oracle Linux Server 7.9   5.4.17-2102.200.13.el7uek.aarch64   docker://19.3.11
    

    现在,您已使用完备的 Kubernetes 集群并设置了与它进行交互的工具,因此您可以向该集群部署任何 kubernetes 负载。

无缝部署到 Kubernetes 集群

现在,您可以将容器化负载部署到基于 Arm 的 kubernetes 集群。容器映像针对特定架构而构建。Docker 或 Buildah 等容器工具提供了无缝管理这些映像及其部署情况的方法。在本示例中,您将 Apache Tomcat(常用的 Java Web 容器)部署到 kubernetes 集群。在 x86 体系结构上运行时,在 Arm 和 amd64 映像上运行时,docker 运行时会提取 arm64v8 映像。这样,我们只要为两个体系结构构建应用映像,就可以创建无缝的可移植 kubernetes 部署清单。

首先创建体系结构中性部署清单。清单不应引用任何特定于体系结构的容器,因为容器运行时能够检测正确的体系结构并提取适当的映像。要创建清单,请运行以下表名。它将创建一个名为 tomcat.yaml 的新文件。

cat <<EOF > tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
    app: tomcat
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
        - name: tomcat
          image: tomcat:9
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: app-volume
              mountPath: /usr/local/tomcat/webapps/
      volumes:
        - name: app-volume
          configMap:
            name: app-bundle
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat
  labels:
    app: tomcat
spec:
  ports:
  - port: 80
    name: http
    targetPort: 8080
  selector:
    app: tomcat
  type: LoadBalancer
EOF

此清单包含以下对象和操作:

  1. 下载 Apache Tomcat 的示例应用程序,并将其创建为 ConfigMap。

    wget https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war
    kubectl create configmap app-bundle --from-file sample.war
    

    注意使用 ConfigMap 挂载应用程序的方法仅是为了便于使用,不应用于生产应用程序。

  2. 部署清单。这将创建 kubernetes 对象,包括部署和服务。创建部署时,docker 运行时会检测到它在牙臂体系结构上运行,并自动选取 Apache Tomcat 容器的 Arm 变量。容器上部署的 Java 应用程序与平台无关,因此可以在所有体系结构中部署相同的 .war 文件。

    kubectl apply -f tomcat.yaml
    
  3. 检查您的部署状态

    kubectl get deploy,svc
    

    您应看到类似以下内容的输出

    NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/tomcat   2/2     2            2           9s
    
    NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)        AGE
    service/kubernetes   ClusterIP      10.96.0.1       <none>            443/TCP        3d9h
    service/tomcat       LoadBalancer   10.96.120.212   <pending>   80:32547/TCP         9s
    

    这表明 Tomcat 已成功部署到基于 Arm 的 kubernetes 集群上,并为 Java Web 应用程序提供服务。我们使用的部署清单与体系结构无关,可用于 x86 和基于 Arm 的集群。

  4. 您可以选择通过运行来获取详细的节点级别详细信息

    kubectl get nodes -o wide
    kubectl describe node <node_name>
    

    显示有关节点的详细信息,包括在该节点上调度的体系结构和云池。

    当 LoadBalancer 的外部 IP 地址可用时(这可能需要几分钟时间),您可以通过将 Web 浏览器指向 http://<your_loadbalancer_ip_address>/sample 来访问部署

后续步骤

访问官方 arm64v8 映像的 docker Hub 存储库,了解您可以在基于 Arm 的 kubernetes 集群上部署的更多负载。此处

更多学习资源

docs.oracle.com/learn 上浏览其他实验室,或者在 Oracle Learning YouTube 渠道上访问更多免费学习内容。此外,访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心