將 Kubernetes 與 Code Engine 搭配使用

IBM Cloud® Code Engine 其設計旨在讓您無需與其底層技術進行互動。 不過,如果您已有基於 Kubernetes 或 Knative 的現有工具,仍可透過 Code Engine 繼續使用這些工具。Code Engine 支援 Kubernetes (以及 Knative)的 API 及其命令列介面(CLI)指令。 如需更多關於 Knative 的資訊,請參閱《 在 Code Engine 上使用 Knative 》。

如果您決定搭配使用 Kubernetes 與 Code Engine,請考量下列資訊:

  • 在 Kubernetes 上執行的大部分容器或 Pod 也在 Code Engine上執行。
  • Kubernetes 建構 (例如部署) 在 Code Engine 上執行 (如果它們不使用叢集層面的功能,例如安全原則)。Code Engine 限定為可在 Kubernetes 名稱空間中執行的範圍。

Code Engine不支援OpenShift-specific資源或其他容器編排平台,例如Docker Swarm 或 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 互動。 您必須具有特定作業的正確權限層次。 這些角色設定在 Identity and Access Management 中。 請參閱 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 進行鑑別

建立 IBM Cloud IAM 存取記號 方法是對 https://iam.cloud.ibm.com/identity/token 提出 POST 要求。

判定 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。 欄位名稱是 ID,JSON 路徑是 resources[].id

  2. 使用 IBM Cloud 資源控制器 API 方法 取得所有資源實例的清單來查詢 IBM Cloud 資源控制器。 您必須在廣域型錄中具有 Code Engine 專案名稱、專案所在地區,以及 Code Engine 的唯一資源 ID。 使用 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 方法

Working with jobs and job runs in 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。

Serving CRD for 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 規格

來源至影像 CRD 方法

在 Code Engine中使用建置及建置執行 時,您可以使用來源至映像檔 CRD。

Source-to-image CRD for Code Engine
群組 版本 類型
shipwright.io v1beta1 Build
shipwright.io v1beta1 BuildRun

擷取 Kubernetes 配置之後,您可以使用下列其中一個方法來檢視「來源至映像檔 CRD」詳細資料。

訂閱 CRD 方法

Working with subscriptions in Code Engine 時,您可以使用訂閱 CRD。

Code Engine
群組 版本 類型
sources.codeengine.cloud.ibm.com v1alpha1 CosSource
sources.knative.dev v1beta1 KafkaSource
sources.knative.dev v1 PingSource

擷取 Kubernetes 配置之後,您可以使用下列其中一種方法來檢視「訂閱 CRD」詳細資料。