azure k8s netcore 程式初次部署

  • 2019 年 10 月 3 日
  • 筆記

以下都是我在2018年12月份做的實驗,今天才發布出來。

念想

首先是了解一些關於K8s的一些基礎概念,推薦查看一下這個鏈接,非常適合入門k8s。是因為K8S的環境搭建比較複雜(最主要是懶),其實也有比較簡單的方式,有一些本地單例部署的方式,如Minikube以及Kubeadm-dind。但是為了更快的了解k8s,所以選擇了雲平台,在查看了一些國外分享的鏈接之後,準備開始使用azure的。

開始使用Azure

初次使用Azure,Azure首頁就有大大的標題寫明了可以試用一個月以及200$的額度。沒有使用中國的Azure,直接在azure的官網註冊並使用了,用的visa信用卡,說是扣1$用來驗證信用卡,後面會退還,但是不知道為啥現在還沒有退給我,還有不知道為什麼扣了我10塊錢,懶得糾結了,就放在那了。註冊通過之後後面可以通過訪問 portal.azure.com 進入控制台,按照上面的鏈接,開始下面的一步步操作;

準備步驟

Azure CLI

KubeCtl

docker for windows(我是在Windows操作的)

安裝Azure CLI很簡單,按照官網的教程就可以。

KubeCtl稍微折騰了一下,其實是我沒怎麼注意,根據官網的也就可以了,我的系統是Windows 10,不過由於是閹割版,powershell的版本是4.0,按照第一個方式操作Powershell的PSGallery,發現不可以運行Install-Script命令,被迫捨棄。換了另一個方式,使用Chocolatey下載並配置KubeCtl,執行kubectl version命令發現可以正常執行。

docker for windows的安裝也是很簡單的,直接去官網下載運行就可以,可能需要設置一下環境變數;

創建ACR

Azure Container Registry (ACR)就是一個docker的倉庫中心,類似於docker hub,ACR的創建可以參考上面分享的國外鏈接,很簡單;

創建AKS

這一步非常重要,也是我耗時最久的一個地方,被坑的最大的一個地方是因為我總是想著用離中國較近的區域(Location),我選擇的區域基本上都是日本西部,但是AKS的資源組區域目前還不支援日本西部,目前只支援eastus, westeurope, centralus, canadacentral, canadaeast這些區域(參考鏈接),按照上面分享的國外鏈接去操作之後總會提示部署失敗,報錯的詳情是

{"code":"DeploymentFailed","message":"至少一個資源部署操作失敗。請列出部署操作顯示詳細資訊。有關用法詳細資訊,請參閱 https://aka.ms/arm-debug。","details":[{"code":"BadRequest","message":"{rn "error": {rn "code": "BadRequest",rn "message": "The Service Principal in ServicePrincipalProfile could not be validated. Please see https://aka.ms/acs-sp-help for more details. (The client 'guid' with object id 'guid' does not have authorization to perform action 'Microsoft.Authorization/roleAssignments/read' over scope '/subscriptions/guid/resourceGroups/dotnetTryAcsCluster/providers/Microsoft.Authorization'.)"rn }rn}"}]}

在UI環境操作了很多次每次都是報上面的錯誤(微軟的官方教程我也試了),經驗告訴我,這條路肯定走不下去了,於是我拋棄了上面的分享鏈接的教程。再次老老實實看一下微軟的官方教程,這一次我選擇的是使用CLI去創建,不再使用UI介面,一步步操作下去,終於看到了部署成功後的JSON,非常開心。之後按照教程下載憑證然後在本地操作aks;

docker 部署

docker鏡像我也是偷懶使用了netcore官方的示例,clone下來之後按照readme生成aspnetapp鏡像,生成之後可以通過命令行(docker images)查看。再次根據國外分享的鏈接,對這個鏡像打兩個標籤(其實只要打一個標籤,或者不打標籤,他多打一個標籤是為了證明acr中docker的分層存儲的UnionFS功能,打標籤是為了讓你能區分版本號),打好標籤再次按照教程所述去acr獲取你要上傳倉庫的密碼,然後上傳即可,之後的操作基本上都是按照教程操作下去,不過也有一些要注意的。

注意點

教程上寫的k8s的本地UI鏈接為:http://127.0.0.1:8001/ui ,實際上這個鏈接打開之後根本看不見什麼東西,只有

Error: 'tls: oversized record received with length 20527'  Trying to reach: 'https://10.244.0.6:9090/'

這麼一個報錯,真正可用的鏈接是 http://localhost:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy

後記

想繼續操作實現持續部署的功能,大概為以下步驟:

  1. docker 重新build已經編譯好的程式碼(或者有CI工具生成),並且打個tag(例如aspnetapp:3),推送到acr;
  2. 結合國外分享的教程以及微軟官網的,重新部署的時候,修改Deploy.xml中的image參數,修改為對應的鏡像tag,接著根據微軟的教程,使用kubectl get pod,查看運行中的pod,接著準備執行以下指令
kubectl set image deployment azure-vote-front azure-vote-front=<acrLoginServer>/azure-vote-front:v2

這裡面有個與我部署的地方有個不一樣的地方,他這裡默認的deployments.extensions的名字和container的名字是一致的,然而我的不一樣,這時候需要仔細的查看一下Deploy.xml中的參數了,我這邊的deployments.extensions的名字是aspnetapp-deployment,container的名字是aspnetapp,所以我的執行命令是這樣的:

kubectl set image deployment aspnetapp-deployment aspnetapp=<acrLoginServer>/azure-vote-front:v2

使用命令記錄

給鏡像打標籤  docker tag aspnetapp dotnettryacr.azurecr.io/myservice/aspnetapp:1    推送docker鏡像  docker push dotnettryacr.azurecr.io/myservice/aspnetapp:3    docker登錄acr  docker login dotnettryacr.azurecr.io -u dotnettryacr -p awhdXW6nZa6EUjxPNLbLsUrjJQM30wK+    kubectl連接到aks cluster  az aks get-credentials --resource-group myResourceGroup --name myAKSCluster    如果有自定義的secret-key  az acs kubernetes get-credentials –resource-group=pascalnaberacs –name=myacscluster –ssh-key-file 「C:blogpostopensshprivatekey」    aks連接acr  kubectl create secret docker-registry acrconnection —docker-server=https://dotnettryacr.azurecr.io —docker-username=dotnettryacr —docker-password=awhdXW6nZa6EUjxPNLbLsUrjJQM30wK+ —[email protected]    ask連接acr方式2    獲取aks服務主體的clientid  az aks show --resource-group myResourceGroup --name myAKSCluster --query "servicePrincipalProfile.clientId" --output tsv    獲取acr的資源ID(acrID)  az acr show --name <acrName> --resource-group myResourceGroup --query "id" --output tsv    創建aks和acr之間的連接  az role assignment create --assignee <clientID> --role Reader --scope <acrID>

轉載請註明出處:https://www.cnblogs.com/briswhite/p/11344034.html