Azure:在AKS上部署 Istio 1.4.3

來源:Microsoft云科技
作者:Microsoft云科技
時(shí)間:2020-09-02
2776
開源當(dāng)中,Istio無疑是Service Mesh架構(gòu)微服務(wù)最活躍的社區(qū),它基本是技術(shù)和平臺中立的,支持各種混合部署的模式,解決了很多微服務(wù)中遇到的共性問題,如對連接,安全和監(jiān)控的管理等等,使得我們開發(fā)只需集中精力實(shí)現(xiàn)業(yè)務(wù)需求就好,絕大多數(shù)共性問題可以在部署時(shí)通過配置解決?,F(xiàn)在(2020.2.10)穩(wěn)定的版本也到了1.4.3。

微服務(wù)火了好幾年,但因?yàn)闆]有統(tǒng)一標(biāo)準(zhǔn),涉及的技術(shù)范圍廣泛,更新迭代太快,學(xué)習(xí)曲線較陡,要完整,系統(tǒng)的掌握并非易事。不過技術(shù)終究是要為業(yè)務(wù)服務(wù),無論用什么技術(shù),只要能快速開發(fā),易于部署,簡化運(yùn)維和更新,能快速響應(yīng)業(yè)務(wù)的需求和變化,就是好技術(shù)。微服務(wù)之所以受歡迎,就是一旦掌握了,就可以達(dá)到以上目的。就好比開飛機(jī),會(huì)開飛機(jī),當(dāng)然很快,但要學(xué)會(huì),得下些功夫。還好,在開源社區(qū)和云技術(shù)發(fā)展得如火如荼的今天,我們不用從零開始造飛機(jī),只要選用主流的技術(shù)和平臺,就站在了一群牛人的肩膀上,學(xué)會(huì)了就可以穩(wěn)定飛上好幾年。

開源當(dāng)中,Istio無疑是Service Mesh架構(gòu)微服務(wù)最活躍的社區(qū),它基本是技術(shù)和平臺中立的,支持各種混合部署的模式,解決了很多微服務(wù)中遇到的共性問題,如對連接,安全和監(jiān)控的管理等等,使得我們開發(fā)只需集中精力實(shí)現(xiàn)業(yè)務(wù)需求就好,絕大多數(shù)共性問題可以在部署時(shí)通過配置解決?,F(xiàn)在(2020.2.10)穩(wěn)定的版本也到了1.4.3。

這篇文章就先探討一下 Istio 在Azure上基于AKS的安裝,我們可以幾分鐘內(nèi)把Istio的平臺運(yùn)行起來,當(dāng)然,這不是AKS的初級介紹,希望讀者對AKS有基本的了解。

我們先簡要介紹一下Istio的主要組件,組件架構(gòu)如下圖:

ia_1100000003.jpg

01

Proxy 基于Envoy的side car, 用C++開發(fā)的高性能的服務(wù)代理,可以自動(dòng)或手動(dòng)注入到服務(wù)的pod中,實(shí)現(xiàn)服務(wù)的共性需求,如健康檢查,融斷,負(fù)載均衡,指標(biāo)采集,加密/安全等。

02

Mixer 關(guān)鍵主控組件,主要負(fù)責(zé)服務(wù)策略下發(fā),從Proxy和其他服務(wù)收集指標(biāo)數(shù)據(jù)等。同時(shí)支持通過插件增加功能。

03

Pilot 負(fù)責(zé)服務(wù)(Side Car)發(fā)現(xiàn),服務(wù)的流量管理/智能路由,以及服務(wù)可靠性保障等。

04

Citadel 主要負(fù)責(zé)身份和證書的管理,保障使得服務(wù)間以及與客戶端間的通信安全。

05

Galley 負(fù)責(zé)配置的驗(yàn)證,導(dǎo)入,處理和分發(fā),它為其他Istio組件屏蔽了底層平臺(如Kubernetes)的差異。

參考: 

https://istio.io/docs/ops/deployment/architecture/

Istio的組件都會(huì)以pod的形式部署在k8s或AKS上,所以建議用獨(dú)立的namesapce istio-system來管理,當(dāng)然也會(huì)占用一定的資源。為減少與業(yè)務(wù)應(yīng)用的相互影響和保證高可用,能在生產(chǎn)環(huán)境用獨(dú)立的node pool來部署這些組件就更好。

01

創(chuàng)建AKS集群 

可以參考以下命令,需要注意的是, Istio安裝時(shí)默認(rèn)Pilot Pod需要比較大的內(nèi)存(2G * 2 pods),建議不要選4G或以下的虛機(jī)。

#全局變量 按需要修改

RGName=aksISTIO         #資源組名稱

REGION=southeastasia    #部署區(qū)域

AKSNAME=aksISTIO        #AKS 集群名稱

NODESIZE=Standard_B2ms  #使用虛機(jī)大小


#創(chuàng)建資源組

az group create --name $RGName --location $REGION


#創(chuàng)建AKS集群,vm-set-type  load-balancer-sku 兩參數(shù)保證支持多node pool,不需要也可以去掉

az aks create --resource-group $RGName --name $AKSNAME \

    --node-count 2 --enable-addons monitoring --generate-ssh-keys \

    --admin-username myadmin --node-vm-size $NODESIZE \

    --vm-set-type VirtualMachineScaleSets \

    --load-balancer-sku standard





#安裝完成后運(yùn)行以下命令確認(rèn)運(yùn)行正常

#安裝az aks命令支持

az aks install-cli


#獲取AKS集群隱式登錄

az aks get-credentials --resource-group $RGName --name $AKSNAME


#查看節(jié)點(diǎn)信息

kubectl get nodes


#因?yàn)?/span>AKS安裝Istio需要啟用(默認(rèn))RBAC, 想用k8s web console,需授權(quán)給服務(wù)帳號

kubectl create clusterrolebinding kubernetes-dashboard --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard


#通過tunnel本地IP來瀏覽 k8s web console

az aks browse -n $AKSNAME -g $RGName

02

安裝Istio

#下載Istio安裝介質(zhì)

# Specify the Istio version that will be leveraged throughout these instructions

ISTIO_VERSION=1.4.3

curl -sL"https://github.com/istio/istio/releases/download/$ISTIO_VERSION/istio-$ISTIO_VERSION-linux.tar.gz" | tar xz


cd istio-$ISTIO_VERSION

sudo cp ./bin/istioctl /usr/local/bin/istioctl

sudo chmod +x /usr/local/bin/istioctl


# Generate the bash completion file and source it in your current shell

mkdir -p ~/completions && istioctl collateral --bash -o ~/completions

source ~/completions/istioctl.bash


# Source the bash completion file in your .bashrc so that the command-line completions

# are permanently available in your shell

echo "source ~/completions/istioctl.bash" >> ~/.bashrc



#創(chuàng)建istio namespace

kubectl create namespace istio-system --save-config


#管理員密碼

MYPASSWORD=xxxxxxxxx


#k8s創(chuàng)建Grafana的管理用戶

GRAFANA_USERNAME=$(echo -n "grafana" | base64)

GRAFANA_PASSPHRASE=$(echo -n ${MYPASSWORD} | base64)


cat <<EOF | kubectl apply -f -

apiVersion: v1

kind: Secret

metadata:

  name: grafana

  namespace: istio-system

  labels:

    app: grafana

type: Opaque

data:

  username: $GRAFANA_USERNAME

  passphrase: $GRAFANA_PASSPHRASE

EOF


#k8s創(chuàng)建Kiali的管理用戶

KIALI_USERNAME=$(echo -n "kiali" | base64)

KIALI_PASSPHRASE=$(echo -n ${MYPASSWORD} | base64)


cat <<EOF | kubectl apply -f -

apiVersion: v1

kind: Secret

metadata:

  name: kiali

  namespace: istio-system

  labels:

    app: kiali

type: Opaque

data:

  username: $KIALI_USERNAME

  passphrase: $KIALI_PASSPHRASE

EOF


通過yaml來安裝istio 

Istio自帶安裝腳本,里面有幾個(gè)安裝模版,每個(gè)模版含不同的組件,見下圖: 

ia_1100000004.jpg

如果想安裝demo的模版,可以通過下面命令:

istioctl manifest apply --set profile=demo

也可以創(chuàng)建istio安裝yaml文件,來自定義安裝組件,見:https://github.com/radezheng/blog/blob/master/Istio/istio.aks.yaml 

安裝命令如下,在安裝介質(zhì)目錄外面運(yùn)行:

istioctl manifest apply -f istio.aks.yaml --logtostderr --set installPackagePath=./istio-1.4.3/install/kubernetes/operator/charts

安裝完成如下圖: 確認(rèn)安裝成功

ia_1100000005.jpg

#確認(rèn)安裝成功

kubectl get svc --namespace istio-system --output wide


#確認(rèn)所有Pod都在running狀態(tài)

kubectl get pods --namespace istio-system


#可以用上面創(chuàng)建的管理用戶登錄

istioctl dashboard grafana


istioctl dashboard prometheus


istioctl dashboard jaeger


#可以用上面創(chuàng)建的管理用戶登錄

istioctl dashboard kiali

至此,安裝完成。幾分鐘就有一個(gè)可用的Istio環(huán)境了,接下來可以把精力主要放在如何開發(fā)或運(yùn)維上面。出于學(xué)習(xí)的目的,大家也可以嘗試部署Istio官方例子Bookinfo App, 具體參考: 

https://istio.io/docs/examples/bookinfo/  

例子成功部署如下圖

ia_1100000006.jpg


希望大家都可以成為中國機(jī)長。

立即登錄,閱讀全文
原文鏈接:點(diǎn)擊前往 >
文章來源:Microsoft云科技
版權(quán)說明:本文內(nèi)容來自于Microsoft云科技,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家