中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

eShopOnContainers 知多(duo)少[10]:部署(shu)到 K8S | AKS

1. 引言

斷斷續續,感覺(jue)這(zhe)個系列(lie)又(you)要(yao)半途而(er)廢了。趁著假期,趕緊再更一(yi)篇,介(jie)紹(shao)下如何將eShopOnContainers部署到K8S上,進而(er)實現大家常說的(de)微服務上云(yun)。

2. 先了解下 Helm

讀過我上篇文章的同學,想必對K8S有了個大致了解。K8S引入了Pod、Service、ReplicationSet等概念,來簡化容器的編排工作。然而,發布一個應用,依舊很繁瑣,比如要定義Pod,要關心如何暴露Service,如何自動伸縮。更不用說一個包括多個模塊(Web、DB)的的復雜應用了,想一想要維護一堆yaml文件,就很奔潰。為了解決這一個問題,Helm橫空出世。
Helm 簡單來說就像NuGet包管理器,通過NuGet包管理器,我們可以很容易的管理依賴,借助它可以很方便的查找、安裝、卸載、升級、降級需要的包。只不過Helm管理的包,叫做Helm Chart。
Chart 的包定義結構(gou)如下:

$ helm create mongodb
$ tree mongodb
mongodb
├── Chart.yaml #Chart本身的版本和配置信息
├── charts #依賴的chart
├── templates #配置模板目錄
│   ├── NOTES.txt #helm提示信息
│   ├── _helpers.tpl #用于修改kubernetes objcet配置的模板
│   ├── deployment.yaml #kubernetes Deployment object
│   └── service.yaml #kubernetes Serivce
└── values.yaml #kubernetes object configuration

對于Helm,還有兩(liang)個基(ji)本概念:Repository和Release。Repository是Helm Chart的(de)存儲倉庫,Release是指Chart的(de)部署實(shi)例。

另外,Helm包括(kuo)兩個部分:Client(客戶(hu)端(duan))和Tiller(服(fu)務端(duan))。客戶(hu)端(duan)用于管(guan)理(li)(li)Chart,服(fu)務端(duan)用于管(guan)理(li)(li)Release。

Helm Architecture

從上面這張圖中我們可以看到(dao)Tiller通過API與Kubernetes進行交互,來完成(cheng)Chart包的(de)部署。

以上就是Helm的簡單介紹,若需深入了解,請訪問官網Helm

3. 使用Helm Chart 部署 eShopOnContainers 到 K8S

下面就直接按照裝官方文檔Deploying-to-Kubernetes-(AKS-and-local)-using-Helm-Charts進行實操。

3.1. 安裝Helm

毫無疑問,我們首先得本地安裝Helm,建議直接使用Chocolatey安裝,命令如下
choco install kubernetes-helm
在K8S中提供了認證機制,以確保應用程序的安全訪(fang)問。Tiller要(yao)想與K8S建立連接進行(xing)交互,就(jiu)必須提前在K8S中創建一個ServiceAccount并(bing)分(fen)配給Tiller以完成基于角色(se)的訪(fang)問控制(RBAC)。

# 在k8s目錄下執行以下命令,完成ServiceAccount的創建
$ kubectl apply -f helm-rbac.yaml # 創建名為tiller的ServiceAccount
# 安裝Tiller(Helm服務端),并指定使用上面創建的ServiceAccount
$ helm init --service-account tiller

3.2. 安裝 Nginx ingress controller

Ingress是用來暴露服務的,本質上和Service類似,但是一個Service只可以暴露一個服務,而一個Ingress可以暴露多個服務,Ingress可以根據請求的主機名和路徑進行請求轉發。但創建Ingress的前提是K8S必須已經有相應的Ingress Controller運行。然而,Dockers-For-Windows中默認并未提供Ingress Controller。我們可以在/k8s目錄下執行以下腳本,以安裝`Nginx ingress controller。

$ .\deploy-ingress.ps1
$ .\deploy-ingress-dockerlocal.ps1

3.3. 使用 Helm 部署 eShopOnContainers

在項目k8s\Helm文件夾下,已經分別為eShopOnContainers的各個部分定義了相應的Chart,如下圖所示。
Chart List

僅需執行.\deploy-all.ps1 -imageTag dev -useLocalk8s $true
腳本,即可一鍵部署。等腳本執行完畢,可以執行helm list來查看所有的release。

$ helm list
NAME                            REVISION        UPDATED                         STATUS          CHART                           APP VERSION     NAMESPACE
eshop-apigwmm                   1               Fri Apr  5 16:55:45 2019        DEPLOYED        apigwmm-0.1.0                   1.0             default
eshop-apigwms                   1               Fri Apr  5 16:55:46 2019        DEPLOYED        apigwms-0.1.0                   1.0             default
eshop-apigwwm                   1               Fri Apr  5 16:55:47 2019        DEPLOYED        apigwwm-0.1.0                   1.0             default
eshop-apigwws                   1               Fri Apr  5 16:55:48 2019        DEPLOYED        apigwws-0.1.0                   1.0             default
eshop-basket-api                1               Fri Apr  5 16:55:49 2019        DEPLOYED        basket-api-0.1.0                1.0             default
eshop-basket-data               1               Fri Apr  5 16:55:44 2019        DEPLOYED        basket-data-0.1.0               1.0             default
eshop-catalog-api               1               Fri Apr  5 16:55:50 2019        DEPLOYED        catalog-api-0.1.0               1.0             default
eshop-identity-api              1               Fri Apr  5 16:55:51 2019        DEPLOYED        identity-api-0.1.0              1.0             default
eshop-keystore-data             1               Fri Apr  5 16:55:43 2019        DEPLOYED        keystore-data-0.1.0             1.0             default
eshop-locations-api             1               Fri Apr  5 16:55:52 2019        DEPLOYED        locations-api-0.1.0             1.0             default
eshop-marketing-api             1               Fri Apr  5 16:55:53 2019        DEPLOYED        marketing-api-0.1.0             1.0             default
eshop-mobileshoppingagg         1               Fri Apr  5 16:55:54 2019        DEPLOYED        mobileshoppingagg-0.1.0         1.0             default
eshop-nosql-data                1               Fri Apr  5 16:55:42 2019        DEPLOYED        nosql-data-0.1.0                1.0             default
eshop-ordering-api              1               Fri Apr  5 16:55:55 2019        DEPLOYED        ordering-api-0.1.0              1.0             default
eshop-ordering-backgroundtasks  1               Fri Apr  5 16:55:56 2019        DEPLOYED        ordering-backgroundtasks-0.1.0  1.0             default
eshop-ordering-signalrhub       1               Fri Apr  5 16:55:57 2019        DEPLOYED        ordering-signalrhub-0.1.0       1.0             default
eshop-payment-api               1               Fri Apr  5 16:55:58 2019        DEPLOYED        payment-api-0.1.0               1.0             default
eshop-rabbitmq                  1               Fri Apr  5 16:55:42 2019        DEPLOYED        rabbitmq-0.1.0                  1.0             default
eshop-sql-data                  1               Fri Apr  5 16:55:41 2019        DEPLOYED        sql-data-0.1.0                  1.0             default
eshop-webhooks-api              1               Fri Apr  5 16:56:03 2019        DEPLOYED        webhooks-api-0.1.0              1.0             default
eshop-webhooks-web              1               Fri Apr  5 16:56:04 2019        DEPLOYED        webhooks-web-0.1.0              1.0             default
eshop-webmvc                    1               Fri Apr  5 16:55:59 2019        DEPLOYED        webmvc-0.1.0                    1.0             default
eshop-webshoppingagg            1               Fri Apr  5 16:56:00 2019        DEPLOYED        webshoppingagg-0.1.0            1.0             default
eshop-webspa                    1               Fri Apr  5 16:56:01 2019        DEPLOYED        webspa-0.1.0                    1.0             default
eshop-webstatus                 1               Fri Apr  5 16:56:02 2019        DEPLOYED        webstatus-0.1.0                 1.0             default

3.4. 驗證部署

使用kubectl get deployment可以查看所有的彈性部署,使用kubectl get ingress可以查看通過ingress暴露的所有服務,使用kubectl get pod,可(ke)以查看所有(you)運行的pod,等所有(you)的pod的STATUS均為Running時,就可(ke)以直接通過訪問應用了,也(ye)可(ke)以訪問監控應用運行狀(zhuang)態。

至此,已成功(gong)部署eShopOnContainers到本(ben)地(di)K8S集(ji)群。

4. 上云

微服務不上云簡直就是浪費感情。有了本地部署的經驗,那么部署上云也就簡單了。除了需要額外創建并配置AKS(Azure Kubernetes Service)外,其他步驟都如出一轍。
下面就來梳理下如何部(bu)署應用到AKS集群(qun)上。

首先你得有Azure賬號,這是第一步,如果沒有請自行前往申請免費賬號把玩。

4.1. 創建AKS

創建AKS有兩種方式一種是基于Azure CLI,一種是直接通過門戶網站直接創建。這里使用第一種方式。
首先確保本地安裝Azure CLI,可使用choco install azure-cli安裝。下面直接通過命令演示。

$ az login #登錄Azure,完成客戶端認證
$ az group create --name aks-group --location eastasia #在East Asia 創建資源組
$ az aks create `
--resource-group aks-group `
--name eshop `
--node-count 1 `
--enable-addons http_application_routing,monitoring ` # 啟用Http Routing(包含Ingress Controller和External-DNS)和監控
--generate-ssh-keys # 創建 ask 集群
$ az aks get-credentials --resource-group aks-group --name eshop # 獲取證書以便從本地連接到AKS集群
$ kubectl config current-context # 查看當前上下文是不是eshop
$ kubectl get nodes # 獲取aks集群節點

4.2. AKS 中安裝 Helm

AKS上和本機一樣需要(yao)(yao)安(an)(an)裝Helm,不過AKS上主要(yao)(yao)是要(yao)(yao)用到服務端(Tiller)以(yi)便進行Chart的管(guan)理(li)。不過好消息是AKS上Helm Client默認(ren)已(yi)經安(an)(an)裝好了,所(suo)以(yi)只需要(yao)(yao)安(an)(an)裝Tiller就Ok了。

  1. 首先創建ServiceAccount,用于K8S與Tiller的認證
    我們可以簡單使用項目k8s文件夾下現有的helm-rbac.yaml來創建ServiceAccount。直接執行kubectl apply -f .\helm-rbac.yaml
  2. 創建Tiller
    helm init --service-account tiller #指定使用上面創建的ServiceAccount

4.3. 部署 eShopOnContainers 到 AKS

k8s/helm文件夾打開Powershell執行以下(xia)腳本即可一鍵部署:

$ .\deploy-all.ps1 -externalDns aks -aksName eshop -aksRg aks-group -imageTag dev

4.4. 驗證部署

執行kubectl get ingress

$ kubectl get ingress
NAME                 HOSTS                                           ADDRESS       PORTS     AGE
eshop-apigwmm        eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        45s
eshop-apigwms        eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        44s
eshop-apigwwm        eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        42s
eshop-apigwws        eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        41s
eshop-identity-api   eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        38s
eshop-webhooks-api   eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        24s
eshop-webhooks-web   eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        23s
eshop-webmvc         eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        29s
eshop-webspa         eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        27s
eshop-webstatus      eshop.23a0868cb60a45e18d24.eastasia.aksapp.io   13.70.31.45   80        25s

等所有的pod都處于Running狀態時,就可以直接通過Hosts:
來訪問應用了。
如果測試登錄,可能會遭遇502 Bad Gateway,這是因為Identity Server 發送的請求頭數據包超過了AKS中Nginx Ingress Controller的默認設置,可以直接/k8s/helm目錄執行kubectl apply -f aks-httpaddon-cfg.yaml來解決這個問題。

玩耍了一段時間后,別忘了清理資源,畢竟上云是要RMB的啊。執行az group delete -n aks-group,刪除最開始(shi)創建的(de)資源組。

5. 總結

That's all?
雖然(ran)成功將eShopOnContainers部(bu)署(shu)到云上,但一點也高(gao)興不(bu)起來(lai)。從開(kai)發(fa)到部(bu)署(shu)再到運維,發(fa)現到處都(dou)是學不(bu)完的技術債。哎,誰讓你(ni)當初非要當程序員呢?

posted @ 2019-04-06 22:06  「圣杰」  閱讀(3091)  評論(3)    收藏  舉報