IBM Cloud Docs
将 Kubernetes 与 Code Engine 配合使用

将 Kubernetes 与 Code Engine 配合使用

IBM Cloud® Code Engine 设计为无需与它所构建的底层技术进行交互。 但是,如果您有基于 Kubernetes 或 Knative 的现有工具,那么仍可以将其与 Code Engine配合使用。Code Engine 支持 Kubernetes (和 Knative) API 及其 CLI 命令。 有关 Knative 的更多信息,请参阅 将 Knative 与 Code Engine配合使用

如果您决定将 Kubernetes 与 Code Engine配合使用,请考虑以下信息:

  • 在 Kubernetes 上运行的大多数容器或 pod 也在 Code Engine上运行。
  • Kubernetes 构造 (例如部署) 在 Code Engine 上运行 (如果它们不使用集群范围的功能,例如安全策略)。Code Engine 的作用域限定为可以在 Kubernetes 名称空间中运行的内容。

Code Engine does not support OpenShift-specific resources or other container orchestration platforms, such as Docker Swarm or Compose Swarm.

安装Kubernetes命令行界面

要安装 Kubernetes CLI,请下载并安装 kubectl CLI

确保将 kubectl 二进制文件添加到系统的 PATH 环境变量。

与 Kubernetes API 交互

要通过 Kubernetes 命令行界面 kubectl 或 Knative 与项目进行交互,kn 必须设置环境以与 Code Engine的 Kubernetes API 进行交互。

准备工作

您可以通过以下方式设置环境。

  • 您可以将 --kubecfg 选项添加到 project select 命令。 例如

    ibmcloud ce project select --name PROJECT_NAME --kubecfg
    
  • 您可以直接导出 kubeconfig 文件。 运行 ibmcloud ce project current 命令以查找当前目标项目。 此命令还会返回 kubeconfig 文件的 export 命令。 例如

    ibmcloud ce project current
    

    示例输出

    Getting the current project context...
    OK
    
    Name:       myproject
    ID:         01234567-abcd-abcd-abcd-abcdabcd1111
    Subdomain:  aabon2dfwa0
    Domain:     us-south.codeengine.appdomain.cloud
    Region:     us-south
    Kubectl Context:  4svg40kna19
    
    Kubernetes Config:
    Context:             aabon2dfwa0
    Environment Variable: export KUBECONFIG=/user/myusername/.bluemix/plugins/code-engine/myproject-01234567-abcd-abcd-abcd-abcdabcd1111.yaml
    

    然后,复制导出命令,将其粘贴到命令行界面中,然后运行该命令。

通过运行 kubectl config 命令验证是否正确设置了环境。

kubectl config current-context

如果正确设置了上下文,那么输出将与项目的 Kubectl Context 值相匹配。 例如,如果项目的 Kubectl Context 值为 4svg40kna19,那么该命令将返回 4svg40kna19

有关 Kubernetes 及其如何使用 Code Engine 体系结构的更多信息,请参阅 了解 Code Engine 体系结构和工作负载隔离

使用 Kubernetes API 所需的访问权限

设置环境后,可以与 Kubernetes API 进行交互。 您必须具有特定任务的正确权限级别。 这些角色在身份和访问权管理中设置。 请参阅 IBM Cloud 服务角色

Kubernetes管理机构
资源 管理者角色 写入者角色 读取者角色
serviceaccounts get, list, watch get, list, watch
secrets get, list, watch, create, delete, update, patch, apply, edit get, list, watch, create, delete, update, patch, apply, edit
configmaps get, list, watch, create, delete, update, patch, apply, edit get, list, watch, create, delete, update, patch, apply, edit
events get, list, watch get, list, watch
pods/log get, list, watch get, list, watch get, list, watch
pods get, list, watch, create, delete, patch, apply get, list, watch, create, delete, patch, apply get, list, watch
services get, list, watch, create, delete, patch, apply get, list, watch, create, delete, patch, apply get, list, watch
pods/exec create create
pods/portforward create create
pods/attach create
pods/status get, list get, list
resourcequotas get, list, watch get, list, watch get,list 和 watch
limitranges get, list, watch get, list, watch
deployments get, list, watch, create, delete, patch, apply get, list, watch, create, delete, patch, apply get, list, watch
daemonset get, list, watch get, list, watch get, list, watch
pods.metrics.k8s.io 列表 列表 列表

检索 Kubernetes 配置

您可以使用 REST APICode Engine CLI 来检索 Kubernetes 配置。

使用 REST API 检索 Kubernetes 配置

要使用 REST API 检索 Kubernetes 配置,

  1. 向 IBM Cloud® Identity and Access Management (IAM) 认证以接收 IAM 访问令牌。
  2. 查询 IBM Cloud 目录和 IBM Cloud 资源控制器以接收项目的 GUID。
  3. 使用 IBM Cloud Code Engine API 来接收 Kubernetes 配置。

向 Cloud Identity and Access Management 认证

通过向 https://iam.cloud.ibm.com/identity/token 发出 POST 请求,创建 IBM Cloud IAM 访问令牌

确定 Code Engine 项目的 GUID

通过查询 IBM Cloud 目录和 IBM Cloud,确定 Code Engine 项目的 GUID。 由于此 GUID 未更改,因此仅需要执行一次此步骤。 如果您已经知道 Code Engine 项目 GUID,那么可以跳过此步骤。

要使用 Code Engine CLI 来发现 Code Engine 项目的 GUID,请完成以下步骤。

  1. 登录到 IBM Cloud 并以区域,帐户和资源组为目标。

    ibmcloud login target -r REGION -c ACCOUNT_ID -g RESOURCE_GROUP
    
  2. 运行 ibmcloud resource 命令。

    ibmcloud resource service-instances --service-name codeengine --long
    
  3. 标识表示 Code Engine 项目的服务实例,并根据输出确定 GUID。

要使用 REST API 来发现 Code Engine 项目的 GUID,请完成以下步骤。

开始之前,必须具有上一步中的 access_token

  1. 使用以下 IBM Cloud 目录 API 方法: 返回父目录条目

    示例输出

    curl -X GET \
      'https://globalcatalog.cloud.ibm.com/api/v1?include=*&q=name:codeengine+active:true' \
      -H 'Authorization: Bearer ACCESS_TOKEN'
    

    标识资源列表中的唯一资源标识。 字段名为 ID,JSON 路径为 resources[].id

  2. 使用 IBM Cloud 资源控制器 API 方法 获取所有资源实例的列表来查询 IBM Cloud 资源控制器。 您必须在全局目录中具有 Code Engine 项目名称,项目所在的区域以及 Code Engine 的唯一资源标识。 使用 Code Engine 项目的名称作为查询参数。

    示例输出

    curl -X GET \
        'https://resource-controller.cloud.ibm.com/v2/resource_instances?name=MY_PROJECT&resource_id=RESOURCE_ID' \
        -H 'Authorization: Bearer ACCESS_TOKEN'
    
  3. 从结果列表中的区域标识 Code Engine 项目。 查找要在后续步骤中使用的 guid 输出。

查询 IBM Code Engine API

在开始之前,您必须掌握以下信息。

  • 先前步骤中的 access_tokenrefresh_token
  • Code Engine 项目的 guid
  • Code Engine 项目所在的区域。

使用 get kubeconfig for the specified project Code Engine API 方法来获取 Kubernetes 配置。

示例输出

curl -X GET \
    'https://resource-controller.cloud.ibm.com/v2/resource_instances?name=MY_PROJECT&resource_id=RESOURCE_ID' \
    -H 'Authorization: Bearer ACCESS_TOKEN'

使用 Code Engine CLI 检索 Kubernetes 配置

  1. 登录到 IBM Cloud 并以区域,帐户和资源组为目标。

    ibmcloud login target -r REGION -c ACCOUNT_ID -g RESOURCE_GROUP
    
  2. 创建您的Code Engine项目:

    ibmcloud ce project create --name PROJECT
    
  3. 选择 Code Engine 项目作为当前上下文,并将该项目附加到缺省 Kubernetes 配置文件。

    ibmcloud ce project select --name PROJECT --kubecfg
    

现在,您已准备好将 kubectl 命令用于项目。

有关使用 Code Engine API,Kubernetes API 和 kubectl 的更多信息,请参阅以下主题:

定制资源定义 (CRD)

以下部分列出了要与 Code Engine配合使用的定制资源定义方法。

批处理 CRD 方法

使用作业和作业在 Code Engine 中运行时,可以使用批处理 CRD。

Code Engine
版本 种类
codeengine.cloud.ibm.com v1beta1 JobDefinition
codeengine.cloud.ibm.com v1beta1 JobRun

检索 Kubernetes 配置后,可以使用以下方法来查看批处理 CRD 详细信息。

  1. 使用 kubectl explain --api-version='codeengine.cloud.ibm.com/v1beta1' <Kind>
  2. 下载 Swagger 或 OpenAPI CRD 规范

请注意,如果不删除任何关联的 pod,那么无法删除作业运行。 使用 propagationPolicy=Orphan 选项删除的任何尝试都将被拒绝。

函数 CRD 方法

使用 Code Engine 中的函数时,可以使用函数 CRD。

Code Engine
版本 种类
codeengine.cloud.ibm.com v1beta1 Function

提供 CRD 方法

在 Code Engine 中使用应用程序时,可以使用服务 CRD。

为 Code Engine
版本 种类
serving.knative.dev v1 Configuration
serving.knative.dev v1 Revision
serving.knative.dev v1 Route
serving.knative.dev v1 Service

有关这些 CRD 的更多信息,请参阅 Knative Serving API Specification

源到映像 CRD 方法

在 Code Engine 中使用构建和构建时,可以使用源到映像 CRD。

Code Engine
版本 种类
shipwright.io v1beta1 Build
shipwright.io v1beta1 BuildRun

检索 Kubernetes 配置后,可以使用下列其中一种方法来查看源到映像 CRD 详细信息。

预订 CRD 方法

使用 Code Engine 中的预订时,可以使用预订 CRD。

Code Engine
版本 种类
sources.codeengine.cloud.ibm.com v1alpha1 CosSource
sources.knative.dev v1beta1 KafkaSource
sources.knative.dev v1 PingSource

检索 Kubernetes 配置后,可以使用下列其中一种方法来查看预订 CRD 详细信息。