快速開始istio
來自專欄 Service Mesh
前言
這篇文章主要是對istio官方Quick Start的實踐的操作記錄,大致內容與官方文檔一致,但是可能會加入一些在部署中可能會遇到的問題;我進行操作的平台是k8s,所以如果你想照著此文章快速的開始部署istio,你先要確保已有一個k8s的集群,同事CNI插件與kube-dns也必須被正確的安裝(驗證kube-dns是否被正確的部署);此次安裝基於istio 0.6版本;
快速開始
- 首先我們需要獲取到最新的版本的istio release包,可以通過
curl -L https://git.io/getLatestIstio | sh -
命令快速的獲取到istio的最新版本包,同時也可以通過istio github releases下載相關對應版本與操作系統的包並進行解壓,最後我們會得到一個istio-0.6.0的文件夾;
- 接下來我們需要進入到我們剛剛解壓的文件夾中並將istioctl二進位文件添加到我們的PATH路徑下方便之後我們調用
cd istio-0.6.0# 如果我們希望以後都能夠在任何目錄使用istioctl命令# 我們可以將下面一句添加到~/.bash_rc文件中export PATH=$PWD/bin:$PATH
- 此時我們需要將istio的相關服務部署到k8s中,通過以下命令我們可以方便快速的進行部署
kubectl apply -f install/kubernetes/istio.yaml
- 驗證部署是否成功
# 查看istio-system namespace下包含的servicekubectl get svc -n istio-system
理想結果應該是這樣子的
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGEistio-ingress 10.83.245.171 35.184.245.62 80:32730/TCP,443:30574/TCP 5histio-pilot 10.83.251.173 <none> 8080/TCP,8081/TCP 5histio-mixer 10.83.244.253 <none> 9091/TCP,9094/TCP,42422/TCP 5h
# 查看istio-system namespace下包含的podkubectl get pods -n istio-system
理想結果應該是這樣子的
istio-ca-3657790228-j21b9 1/1 Running 0 5histio-ingress-1842462111-j3vcs 1/1 Running 0 5histio-sidecar-injector-184129454-zdgf5 1/1 Running 0 5histio-pilot-2275554717-93c43 1/1 Running 0 5histio-mixer-2104784889-20rm8 2/2 Running 0 5h
注意:
- 正常情況下我們能夠看到kubectl的反饋信息是一大堆東西已經被創建,但是在
istio-0.6.0
中可能會出現最後有一些資源沒有被創建,但是這個不影響我們之後正常的使用istio;這個問題對應istio-issues-4189; - 還有一個問題就是可能我們我們創建之後,所有的情況都是看起來是正常的,但是
istio-ingress pod
會一直不斷的重啟,在istio-0.6.0
中這種情況可能是你沒有正確配置kube-dns
或者沒有正確安裝CNI插件
導致的;這個問題對應istio-issues-173;
部署bookinfo驗證
運行以下命令部署bookinfo實例應用
kubectl apply -f <(istioctl kube-inject --debug -f samples/bookinfo/kube/bookinfo.yaml)
驗證部署:
kubectl get services
正確的輸出應該想下面這樣子的:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGEdetails 10.0.0.31 <none> 9080/TCP 6mkubernetes 10.0.0.1 <none> 443/TCP 7dproductpage 10.0.0.120 <none> 9080/TCP 6mratings 10.0.0.15 <none> 9080/TCP 6mreviews 10.0.0.170 <none> 9080/TCP 6m
和
kubectl get pods
正確的輸出應該想下面這樣子的:
NAME READY STATUS RESTARTS AGEdetails-v1-1520924117-48z17 2/2 Running 0 6mproductpage-v1-560495357-jk1lz 2/2 Running 0 6mratings-v1-734492171-rnr5l 2/2 Running 0 6mreviews-v1-874083890-f0qf0 2/2 Running 0 6mreviews-v2-1343845940-b34q5 2/2 Running 0 6mreviews-v3-1813607990-8ch52 2/2 Running 0 6m
使用以下命令獲取訪問的服務地址:
export GATEWAY_URL=$(kubectl get po -l istio=ingress -n istio-system -o jsonpath={.items[0].status.hostIP}):$(kubectl get svc istio-ingress -n istio-system -o jsonpath={.spec.ports[0].nodePort})
驗證bookinfo實例應用是否正常運行:
curl -o /dev/null -s -w "%{http_code}
" http://${GATEWAY_URL}/productpage# 應該輸出以下值,如果輸出為000或者其他500以上數字為部署失敗200
推薦閱讀: