azure k8s netcore 程序初次部署

如下都是我在2018年12月份作的實驗,今天才發佈出來。html

念想

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

開始使用Azure

初次使用Azure,Azure首頁就有大大的標題寫明瞭能夠試用一個月以及200$的額度。沒有使用國內的Azure,直接在azure的官網註冊並使用了,用的visa信用卡,說是扣1$用來驗證信用卡,後面會退還,可是不知道爲啥如今尚未退給我,還有不知道爲何扣了我10塊錢,懶得糾結了,就放在那了。註冊經過以後後面能夠經過訪問 portal.azure.com 進入控制檯,按照上面的連接,開始下面的一步步操做;github

準備步驟

Azure CLIdocker

KubeCtlshell

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

安裝Azure CLI很簡單,按照官網的教程就能夠。api

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

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

建立ACR

Azure Container Registry (ACR)就是一個docker的倉庫中心,相似於docker hub,ACR的建立能夠參考上面分享的國外連接,很簡單;ide

建立AKS

這一步很是重要,也是我耗時最久的一個地方,被坑的最大的一個地方是由於我老是想着用離國內較近的區域(Location),我選擇的區域基本上都是日本西部,可是AKS的資源組區域目前還不支持日本西部,目前只支持eastus, westeurope, centralus, canadacentral, canadaeast這些區域(參考連接),按照上面分享的國外連接去操做以後總會提示部署失敗,報錯的詳情是

{"code":"DeploymentFailed","message":"至少一個資源部署操做失敗。請列出部署操做顯示詳細信息。有關用法詳細信息,請參閱 https://aka.ms/arm-debug。","details":[{"code":"BadRequest","message":"{\r\n \"error\": {\r\n \"code\": \"BadRequest\",\r\n \"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'.)\"\r\n }\r\n}"}]}

在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:\blogpost\opensshprivatekey」

aks鏈接acr
kubectl create secret docker-registry acrconnection —docker-server=https://dotnettryacr.azurecr.io —docker-username=dotnettryacr —docker-password=awhdXW6nZa6EUjxPNLbLsUrjJQM30wK+ —docker-email=briswhite@hotmail.com

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>

轉載請註明出處:http://www.javashuo.com/article/p-wceqjdbr-dp.html

相關文章
相關標籤/搜索