注意:

建立 OCI DevOps 管線以建立及部署 Golang 微服務

簡介

這是六個部分教學課程系列的 4 ,其中顯示如何使用 Golang 微服務 (表示使用 OCI SDK、OCI-CLI、資源管理程式、OCI Devops 和 Helm 來部署和毀棄 Apache Airflow) 在 OKE 叢集上部署暫時一組資源。

目標

本教學課程將介紹如何建立及部署 OCI DevOps 管線。

必要條件

作業 1:探索登入程式碼

注意
此程式碼已經上傳至您的 OCI 儲存區域,名稱為 go-login ,位於此實驗室的較早步驟。

T1_1

作業 2:探索 go-microservices 程式碼

注意
此程式碼已經上傳至您的 OCI 儲存區域,名稱為 go-microservice ,位於此實驗室的較早步驟中。

T2_1

作業 3:建立 Go-login 和 go-microservice 的 DevOps 使用者自建物件

建立 DevOps 組建管線之前,必須先建立將與組建結果 (Helm 套裝程式和容器映像檔) 連線的使用者自建物件。

  1. 前往您為此教學課程建立的 OCI 登錄。

    T3_1

  2. 按一下 DevOps 專案底下的「使用者自建物件」,然後按一下新增使用者自建物件,然後輸入容器映像檔儲存區域

    T3_2

    登錄 URL 的重要注意事項

    T3_2

    • 這是 sa-saopaulo-1 區域的登錄基準。

    • 檢查您的區域碼,如果您不是使用 "sa-saopaulo-1" ,該程式碼將會有所不同。如需詳細資訊,請參閱區域與可用性網域

    T3_2

  3. 重複步驟 2 並新增 go-microservice 人工因素。

    T3_2

  4. 藉由從程式碼儲存區域貼上 values.yaml 檔案的內容,建立新的一般使用者自建物件來儲存 go-login 的 Helm 值。

    T3_4

  5. 藉由從程式碼儲存區域貼上 values.yaml 檔案的內容,建立新的一般使用者自建物件來儲存 go-microservice 的 Helm 值。

    T3_5

  6. 建立新的 Helm 圖表類型使用者自建物件以進行登入。您必須在圖表 URL 上設定正確的命名空間與區域代碼。

    T3_6

  7. 為 go-microservice 建立新的 Helm 圖表類型人工因素。您必須在圖表 URL 上設定正確的命名空間與區域代碼。

    T3_7

此時,您的 DevOps 專案中應該要有下列使用者自建物件。

T3_7

作業 4:建立 Go-login 的 Devops 組建管線

  1. 前往您 DevOps 專案的主控台頁面,然後選取您建立的 DevOps 專案。

  2. 選取組建管線,然後按一下建立組建管線,輸入名稱和描述,然後按一下建立

    T4_2

  3. 按一下新增階段,然後選取受管理組建

    T4_2

    T4_2

  4. 主要程式碼儲存區域中,選取 go-login 的 OCI 儲存區域。

    T4_4

    • 確認您的儲存區域,選取後按一下新增
  5. 新增組建管線的階段至發布使用者自建物件至登錄。選取傳遞使用者自建物件選項,然後選取先前步驟中建立的 go-login-image 使用者自建物件。

    T4_5

    T4_5

您的管線看起來應該像這樣。

T4_5

作業 5:建立 Go-microservice 的 DevOps 組建管線

  1. 前往您 DevOps 專案的主控台頁面,然後選取您建立的 DevOps 專案。

  2. 選取組建管線,按一下建立組建管線,輸入名稱和描述,然後按一下建立

    T4_2

  3. 按一下新增階段,然後選取受管理組建

    T4_2

    T4_2

  4. 主要程式碼儲存區域中,選取 go-microservice 的 OCI 儲存區域。

    T4_4

    • 確認您的儲存區域,選取後按一下新增
  5. 新增組建管線的階段至發布使用者自建物件至登錄。選取傳遞使用者自建物件選項,然後選取先前步驟中建立的 go-microservice-image 使用者自建物件。

    T4_5

    T4_5

您的管線看起來應該像這樣。

T4_5

作業 6:組建管線 {build_spec.yaml} - go-login

build_spec 檔案是 yaml 檔案,描述組建管線執行期間要執行的步驟。它是在雲端建置執行程式上執行,並支援大多數雲端原生應用系統常用的語言。此檔案位於 OCI 上 go-login 回覆碼的根目錄。此檔案使用 VAULT 的某些變數,因此我們需要將其變更為教學課程的 Vault ocids。

如需有關組建規格的詳細資訊,請參閱組建規格

應設定下列兩個變數。

  1. 前往您的保存庫加密密碼,然後取得每個加密密碼的 OCID

    T6_1

  2. 前往您的專案儲存區域,然後取得 ssh url 進行登入。

    T6_2

    • 更新您的 build_spec.yaml 檔案並以複製的 OCID 加密密碼取代值,然後確認程式碼上的變更。

      T6_2

  3. 前往您的堡壘主機跳轉方塊 Shell 主控台。

    cd $HOME
    # If you still have the old go-login.git and go-microservices.git directory, delete it!
    rm -rf go-login.git
    rm -rf go-microservice.git
    git clone <your ssh url for the repo>
    cd go-login/
    vi build_spec.yaml
    #perform the needed changes for your ocid variables and save the file.
    git add .
    git commit -m "fixed ocid variables"
    git push
    

    T6_3

    T6_3

  4. 前往 DevOps 專案下的 go-login 組建管線,選取參數頁籤,然後新增下列新參數。

    • HELM_REPO:OCI Registry xxx.ocir.io 的基礎。
    • HELM_REPO_URL:相關 Helm 圖表的 OCI 登錄 URL。
    • APP_HOST:主機將用來存取「傳入控制器」上的應用程式。
    • IMAGE_URL:沒有標記的 OCI 登錄映像檔 URL。

    T6_4

  5. 按一下組建管線頁籤,然後按一下開始手動執行

    T6_5

    T6_5

    • 如所見,此組建已順利完成,並將映像檔推送至 OCI 登錄。

      T6_5

  6. 前往 OCI Container Registry 並檢查是否有映像檔。

    T6_5

作業 7:設定 Go-microservice 的 OCI 證明資料

go-microservices 使用 SDK 與 OCI 互動,因此我們必須設定正確的證明資料。在從本教學課程的先前步驟設定堡壘主機期間,我們將使用我們用來設定 OCI CLI 的類似資訊。

所有必要的證明資料都會儲存於 OKE configmap ,並且會插入執行中容器內的環境變數。

T7_0

  1. 前往您的 OCI 儲存區域,並為您的 go-microservice 儲存區域取得 ssh url

    T7_1

  2. 移至 OKE 叢集的主控台頁面,複製叢集 ocid ,然後在下一個步驟中取代 ENV_CLUSTER_ID env 變數的命令。

    T7_2

  3. 開啟堡壘主機蹦現面板終端機。確定您的 ssh 金鑰建立在:~/.oci/oci_api_key.pem 。除了 ENV_CLUSTER_ID 變數之外,您可以在您先前設定 OCI CLI 的堡壘主機 ~/.oci/config 檔案中找到所有其他變數

    cat ~/.oci/config
    

    T7_2

  4. 下方的 Shell 命令清單會建立新的 configmap/values.yaml 檔案,其中包含要插入執行中容器的所有必要變數,然後將它推送至 OCI 上的程式碼儲存區域。在堡壘主機終端機上執行命令之前,請先取代下面 "PASTE YOUR..." 的值。

    cd $HOME
    rm -rf go-microservice/
    git clone <PAST YOUR ssh url>
    cd go-microservice/chart-go-microservice/configmap/
    rm values.yaml
    pem=$(cat ~/.oci/oci_api_key.pem|base64 -w 0)
    echo 'ENV_PEM: "'$pem'"' > values.yaml
    echo 'ENV_TENANCY_OCID: "PASTE YOUR TENANCY OCID"' >> values.yaml
    echo 'ENV_USER_OCID: "PASTE YOUR USER OCID"' >> values.yaml
    echo 'ENV_REGION: "PASTE YOUR REGION NAME"' >> values.yaml
    echo 'ENV_FINGERPRINT: "PASTE YOUR FINGERPRINT"' >> values.yaml
    echo 'ENV_CLUSTER_ID: "PASTER YOUR CLUSTER OCID"' >> values.yaml
    cd $HOME/go-microservice
    git add .
    git commit -m "added correct values on configmap"
    git push
    

    T7_3

    T7_3

現在,Go-microservice 可以透過 SDK 與 OCI 進行通訊。

作業 8:建置管線 {build_spec.yaml} - go-microservices

build_spec 檔案是 yaml 檔案,描述組建管線執行期間要執行的步驟。它是在雲端建置執行程式上執行,並支援大多數雲端原生應用系統常用的語言。此檔案位於 OCI 上 go-microservice 回覆碼的根目錄。此檔案使用 VAULT 的某些變數,因此我們需要將其變更為教學課程的 Vault ocids。

如需有關組建規格的詳細資訊,請參閱組建規格

應設定下列兩個變數。

  1. 前往您的保存庫加密密碼,然後取得每個加密密碼的 OCID

    T6_1

  2. 前往您的專案儲存區域,然後取得 ssh URL 以進行登入。

    T6_2

    • 您必須更新 build_spec.yaml 檔案並以複製的 OCID 加密密碼取代值,然後 確認程式碼變更。

    T6_2

  3. 前往您的堡壘主機跳轉方塊 Shell 主控台。

    cd $HOME
    # If you still have the old go-login.git and go-microservices.git directory, delete it!
    rm -rf go-login.git
    rm -rf go-microservice.git
    git clone <your ssh url for the repo>
    cd go-microservice/
    vi build_spec.yaml
    #perform the needed changes for your ocid variables and save the file.
    git add .
    git commit -m "fixed ocid variables"
    git push
    

    T8_3

    T8_3

  4. 前往 Devops 專案底下的 go-microservice 組建管線,選取參數頁籤並新增參數。

    • HELM_REPO:OCI Registry xxx.ocir.io 的基礎。
    • HELM_REPO_URL:相關 Helm 圖表的 OCI 登錄 URL。
    • APP_HOST:主機將用來存取「傳入控制器」上的應用程式。
    • IMAGE_URL:沒有標記的 OCI 登錄映像檔 URL。

    T6_4

  5. 按一下組建管線頁籤,然後按一下開始手動執行

    T8_5

    T8_5

    • 如所見,此組建已順利完成,並將映像檔推送至 OCI 登錄。

      T8_5

  6. 前往 OCI Container Registry 並檢查是否有映像檔。

    T8_5

作業 9:準備 OKE 以接收部署

本教學課程將手動建立 go-logingo-microservices 的 OKE 命名空間。我們也需要使用加密密碼,在每個命名空間內設定 OCI Container Registry 證明資料。這是必要項目,否則您的部署將無法從登錄擷取容器映像檔。

  1. 從儲存在保存庫中的 OCI 登錄取得純文字 TOKEN 和使用者名稱。

    T9_1

  2. 開啟您的堡壘主機跳板 Shell 主控台,然後執行下列命令。

    注意:請確定您使用上一個步驟中提供的證明資料,取代下方命令上的變數,並且根據您的 gru.ocir.io 區域檢查正確的 Docker-server。

     cd $HOME
     kubectl get ns
     kubectl create ns go-login
     kubectl create ns go-microservices
     kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-login
     kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-microservices
    
    
    • 現在,讓我們部署傳入控制器,以便透過網際網路存取微服務。我們使用的是 v1.4.0 版本的官方傳入影像。

       kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml
       kubectl scale --replicas=4 deployment ingress-nginx-controller -n ingress-nginx
      
      

      T9_2

      T9_2

    • 現在,讓我們來檢查傳入服務是否良好,它應該如下所示。

      kubectl get svc -n ingress-nginx
      

      T9_2

    • 建立 ingress-nginx 之後,會在 OCI 上自動建立新的負載平衡器。現在,請將負載平衡器資源配置更新為更低的資源配置,並且避免額外費用。

  3. 前往您的主控台,選取網路底下的負載平衡器,然後選取新建立的負載平衡器。

    T9_3

  4. 按一下即可更新 SHAPE,然後選取使用彈性負載平衡器核取方塊。

    T9_4

作業 10:建立新的 OCI DevOps 環境

若要能夠部署您的 App,必須建立環境。

  1. 選取您的 DevOps 專案,按一下環境,然後按一下建立環境

    T10_1

    T10_1

工作 11:使用 Helm 圖表部署登入 OCI DevOps

  1. 前往您的 Devops 專案,按一下部署管線,然後為 go-login 建立新的管線。

    T11_1

  2. 按一下即可新增要部署的階段,選取將 Helm 圖表安裝至 Kubernetes 叢集,然後選取 go-login 的 helm 使用者自建物件和值使用者自建物件。確定您填入 go-login 的命名空間名稱。

    T11_2

  3. 在組建管線上建立觸發程式,即可在組建完成後自動開始部署。

    1. 前往您 Devops 專案底下的 go-login 組建管線,然後按一下新增階段

    2. 選取觸發部署,按一下選取部署管線,然後選取 go-login-deploy

      T11_3

  4. 按一下開始手動執行以測試管線。

    T11_4

    T11_4

  5. 移除專案頁面上,按一下部署以檢查執行中的部署狀態。

    T11_5

作業 12:驗證您的登入部署

  1. 前往您的堡壘主機終端機並檢查下列項目:

    • 檢查 Pod 狀況。

      kubectl get pod -n go-login
      
    • 檢查應用程式的輸入主機和位址。

      kubectl get ingress -n go-login
      

      T12_1

    • 此部署會使用主機名稱的輸入控制路由流量,這表示我們需要使用正確的主機名稱呼叫服務作為 URL 的一部分。

    • 在本教學課程中,我們並未使用 SSL 憑證。為了能夠呼叫需要在筆記型電腦的本機 /etc/hosts 中包含的服務,請使用正確的 DNS 路由。不建議用於生產環境

    • 記下您的外部 IP 位址,然後在 /etc/hosts 中新增項目。

       sudo vi /etc/hosts
      
      
    • 在檔案的結尾新增一行。

      your.ip.aaa.xx go-login.superocilab.com
      
    • 請執行下列命令。

      cat /etc/hosts
      
    • 您的 /etc/hosts 應該像這樣。

      T12_1

  2. 現在,您可以使用捲軸來呼叫 go-login 服務,並呼叫 /login 端點來產生 jwt TOKEN。

    curl http://go-login.superocilab.com
    curl http://go-login.superocilab.com/login
    

    T12_1

作業 13:使用 Helm 圖表將 go-microservice 部署至 OCI Devops

  1. 前往您的 Devops 專案,按一下部署管線,然後為 go-microservice 建立新的管線。

    T13_1

  2. 按一下以新增要部署的階段,選取安裝 Helm 圖表至 Kubernetes 叢集,然後選取 go-microservice 的 helm 使用者自建物件與值人工因素。確定您填入 go-microservices 的命名空間名稱。

    T13_2

  3. 在組建管線上建立觸發程式,以在組建完成後自動開始部署。

    1. 前往 Devops 專案底下的 go-microservice 組建管線,然後按一下新增階段

    2. 選取觸發器部署,然後按一下選取部署管道,然後選取 go-microservice-deploy

    T13_3

    T13_3

  4. 按一下開始手動執行以測試管線。

    T13_4

    T13_4

  5. 移除專案頁面上,按一下部署以檢查執行中的部署狀態。

    T11_5

作業 14:確認您的 go-microservice 部署

  1. 前往您的堡壘主機終端機並查看下列詳細資訊:

    • 檢查 Pod 狀況。

      kubectl get pod -n go-microservices
      
    • 檢查應用程式的輸入主機和位址。

      kubectl get ingress -n go-microservices
      

      T14_1

    • 此部署會使用主機名稱的輸入控制路由流量,這表示我們需要使用正確的主機名稱呼叫服務作為 URL 的一部分。

    • 在本教學課程中,我們並未使用 SSL 憑證。為了能夠呼叫需要在筆記型電腦的本機 /etc/hosts 中包含的服務,請使用正確的 DNS 路由。不建議用於生產環境

    • 記下您的外部 IP 位址並在您的 /etc/hosts 上新增項目 (您也可以加入您的本機機器!)

       sudo vi /etc/hosts
      
      
    • 在檔案的結尾新增一行。

      your.ip.aaa.xx go-microservice.superocilab.com
      
    • 請執行下列命令。

      cat /etc/hosts
      
    • 您的 /etc/hosts 應該像這樣。

      T14_1

您現在可以呼叫 go-microservice 服務。

curl curl http://go-microservice.superocilab.com

T14_1

下一步

若要繼續前往此學習進程的下一個教學課程,請按一下此處

確認

其他學習資源

探索 docs.oracle.com/learn 的其他實驗室,或者存取更多 Oracle Learning YouTube 頻道上的免費學習內容。此外,請瀏覽 education.oracle.com/learning-explorer 以成為 Oracle Learning 檔案總管。

如需產品文件,請造訪 Oracle Help Center