三、實踐篇之一,Helm部署Istio


導語 本次采用的是 Kubernetes v1.15.0 版集群環境,Helm 版本為 v2.14.3,安裝的 Istio 版本為 v1.4,官方文檔說明中指出只在 K8S 的 v1.13、v1.14、v1.15 做過測試,請暫時不要將 K8S 升級至 v1.16 版

Ps:Kubernetes安裝指引,請查看文檔==>傳送門

一、部署helm

  • 安裝helm客戶端

從github下載helm(https://github.com/helm/helm/releases)

wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz

解包,只需要包中的一個命令

tar zxf helm-v2.14.3-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/ &&

chmod +x /usr/local/bin/helm

設置命令自動補全

echo 'source <(helm completion bash)' >> /etc/profile

. /etc/profile #重載環境變量

  • 安裝Tiller server(需要創建授權用戶)

tiller-rbac.yaml #創建授權用戶

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

kubectl apply -f tiller-rbac.yaml #執行yaml文件

helm init --service-account=tiller #Tiller server的環境初始化

helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --stable-repo-url http://mirror.azure.cn/kubernetes/charts/ --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's@apiVersion: extensions/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -

檢查安裝

kubectl get pods -n kube-system | grep tiller

helm version

安裝檢查

二、安裝Istio

  • 添加 Istio 到 Helm 倉庫

helm repo add istio.io https://storage.googleapis.com/istio-release/releases/1.4.0/charts/

  • 下載Istio
wget https://github.com/istio/istio/releases/download/1.4.0/istio-1.4.0-linux.tar.gz
tar -zxvf istio-1.4.0-linux.tar.gz
mv istio-1.4.0 istio
cd istio
  • 創建命名空間

kubectl create namespace istio-system

  • 安裝 CRDs (Custom Resource Definitions)

helm template install/kubernetes/helm/istio-ini t --name istio-init --namespace istio-system | kubectl apply -f -

等待 CRDs 創建完成

kubectl -n istio-system wait --for=condition=complete job --all

輸出如下

job.batch/istio-init-crd-10-1.4.0 condition met
job.batch/istio-init-crd-11-1.4.0 condition met
job.batch/istio-init-crd-14-1.4.0 condition met

  • 部署 Istio 到集群

helm template install/kubernetes/helm/istio --name istio --namespace istio-system | kubectl apply -f -

kubectl get pods -n istio-system

istio

  • 為default添加istio注入(可選)

kubectl label namespace default istio-injection=enable

三、部署測試應用bookinfo

bookinfo示例部署了一個用於演示多種 Istio 特性的應用,該應用由四個單獨的微服務構成。 這個應用模仿在線書店的一個分類,顯示一本書的信息。 頁面上會顯示一本書的描述,書籍的細節(ISBN、頁數等),以及關於這本書的一些評論。

  • bookinfo應用的架構

bookinfo

  • Bookinfo 應用分為四個單獨的微服務

    • productpage. 這個微服務會調用 details 和 reviews 兩個微服務,用來生成頁面
    • details. 這個微服務中包含了書籍的詳細信息。
    • reviews. 這個微服務中包含了書籍相關的評論。它還會調用 ratings 微服務
    • ratings. 這個微服務中包含了由書籍評價組成的評級信息。
  • reviews微服務有三個版本

    • v1 版本不會調用 ratings 服務。
    • v2 版本會調用 ratings 服務,並使用 1 到 5 個黑色星形圖標來顯示評分信息。
    • v3 版本會調用 ratings 服務,並使用 1 到 5 個紅色星形圖標來顯示評分信息。
  • bookinfo的編排文件bookinfo.yaml(目錄samples/bookinfo/platform/kube)

  • 創建命名空間用以部署

    kubectl create ns bookinfo-application

  • 為這個命名空間大上 istio-injection=enabled 標簽

    kubectl label namespace bookinfo-application istio-injection=enabled

  • 部署 bookinfo application

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo-application

  • 暴露服務入口

     如果沒有外部負載均衡可以將名為 istio-ingressgateway 的 service 類型由LoadBalancer修改為 NodePort 類型,隨后通過 istio-ingressgateway 所在的服務器IP地址+端口的形式訪問服務。
    istio 的 Gateway 允許外部流量進入 Istio 服務網,與 K8S 的 ingress 直接指定路由不同,istio 的路由規則不在 gateway 中指定,需要通過 VirtualService 單獨配置。執行下面命令創建 gateway 和 virtualservice。

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo-application

    • 訪問頁面並不斷刷新

       可以在瀏覽器打開 http://NodeIp:NodePort/productpage以瀏覽 Bookinfo Application 頁面,如果刷新幾次應用的頁面,就會看到 productpage 頁面中會隨機展示 reviews 服務的不同版本的效果(紅色、黑色的星形或者沒有顯示)。reviews 服務出現這種情況是因為我們還沒有使用 Istio 來控制版本的路由。

    http://192.168.68.150:31380/productpage

    • 最終應用部署的示意圖

    要在 Istio 中運行這一應用,無需對應用自身做出任何改變。 您只要簡單的在 Istio 環境中對服務進行配置和運行,具體一點說就是把 Envoy sidecar 注入到每個服務之中。 最終的部署結果將如下圖所示(注意前面步驟中對bookinfo-application命名空間打了標簽)

     所有的微服務都和 Envoy sidecar 集成在一起,被集成服務所有的出入流量都被 sidecar 所劫持,這樣就為外部控制准備了所需的 Hook,然后就可以利用 Istio 控制平面為應用提供服務路由、遙測數據收集以及策略實施等功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM