将 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 进行交互。
准备工作
- 您必须 创建项目,并且项目必须处于
active
状态。 - 安装 Kubernetes CLI(
kubectl
) 和 Knative CLI(kn
)。
您可以通过以下方式设置环境。
-
您可以将
--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 服务角色。
资源 | 管理者角色 | 写入者角色 | 读取者角色 |
---|---|---|---|
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 API 或 Code Engine CLI 来检索 Kubernetes 配置。
使用 REST API 检索 Kubernetes 配置
要使用 REST API 检索 Kubernetes 配置,
- 向 IBM Cloud® Identity and Access Management (IAM) 认证以接收 IAM 访问令牌。
- 查询 IBM Cloud 目录和 IBM Cloud 资源控制器以接收项目的 GUID。
- 使用 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,请完成以下步骤。
-
登录到 IBM Cloud 并以区域,帐户和资源组为目标。
ibmcloud login target -r REGION -c ACCOUNT_ID -g RESOURCE_GROUP
-
运行
ibmcloud resource
命令。ibmcloud resource service-instances --service-name codeengine --long
-
标识表示 Code Engine 项目的服务实例,并根据输出确定 GUID。
要使用 REST API 来发现 Code Engine 项目的 GUID,请完成以下步骤。
开始之前,必须具有上一步中的 access_token
。
-
使用以下 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
。 -
使用 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'
-
从结果列表中的区域标识 Code Engine 项目。 查找要在后续步骤中使用的
guid
输出。
查询 IBM Code Engine API
在开始之前,您必须掌握以下信息。
- 先前步骤中的
access_token
和refresh_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 配置
-
登录到 IBM Cloud 并以区域,帐户和资源组为目标。
ibmcloud login target -r REGION -c ACCOUNT_ID -g RESOURCE_GROUP
-
创建您的Code Engine项目:
ibmcloud ce project create --name PROJECT
-
选择 Code Engine 项目作为当前上下文,并将该项目附加到缺省 Kubernetes 配置文件。
ibmcloud ce project select --name PROJECT --kubecfg
现在,您已准备好将 kubectl
命令用于项目。
有关使用 Code Engine API,Kubernetes API 和 kubectl
的更多信息,请参阅以下主题:
定制资源定义 (CRD)
以下部分列出了要与 Code Engine配合使用的定制资源定义方法。
批处理 CRD 方法
当 使用作业和作业在 Code Engine 中运行时,可以使用批处理 CRD。
组 | 版本 | 种类 |
---|---|---|
codeengine.cloud.ibm.com |
v1beta1 | JobDefinition |
codeengine.cloud.ibm.com |
v1beta1 | JobRun |
检索 Kubernetes 配置后,可以使用以下方法来查看批处理 CRD 详细信息。
- 使用
kubectl explain --api-version='codeengine.cloud.ibm.com/v1beta1' <Kind>
。 - 下载 Swagger 或
OpenAPI
CRD 规范。
请注意,如果不删除任何关联的 pod,那么无法删除作业运行。 使用 propagationPolicy=Orphan
选项删除的任何尝试都将被拒绝。
函数 CRD 方法
当 使用 Code Engine 中的函数时,可以使用函数 CRD。
组 | 版本 | 种类 |
---|---|---|
codeengine.cloud.ibm.com |
v1beta1 | Function |
提供 CRD 方法
当 在 Code Engine 中使用应用程序时,可以使用服务 CRD。
组 | 版本 | 种类 |
---|---|---|
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。
组 | 版本 | 种类 |
---|---|---|
shipwright.io |
v1beta1 | Build |
shipwright.io |
v1beta1 | BuildRun |
检索 Kubernetes 配置后,可以使用下列其中一种方法来查看源到映像 CRD 详细信息。
- 使用
kubectl explain --api-version='shipwright.io/v1beta1' <KIND>
。 - 下载 Swagger 或
OpenAPI
CRD 规范。
预订 CRD 方法
当 使用 Code Engine 中的预订时,可以使用预订 CRD。
组 | 版本 | 种类 |
---|---|---|
sources.codeengine.cloud.ibm.com |
v1alpha1 | CosSource |
sources.knative.dev |
v1beta1 | KafkaSource |
sources.knative.dev |
v1 | PingSource |
检索 Kubernetes 配置后,可以使用下列其中一种方法来查看预订 CRD 详细信息。
- 使用
kubectl explain --api-version='sources.knative.dev/<VERSION>' <KIND>
。 - 下载 Swagger 或
OpenAPI
CRD 规范。