一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

螞蟻金服分散式架構發表於2018-08-02

本專案開源地址:https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster,歡迎提交Issue和PR。

就在昨天0點,Istio 1.0釋出,已生產就緒!很多同學都對Istio 1.0躍躍欲試但苦於沒有執行環境。今天我提供給大家一個開箱即用又可以方便定製的分散式開發環境的方法,可用於對Istio、Kubernetes本身和應用進行更好的測試。現在我們使用Vagrant和VirtualBox來建立一個這樣的環境。

注意:Istio 1.0、Kubernetes 1.11、kube-proxy使用ipvs模式,建議使用至少16G記憶體的Mac電腦執行。

準備環境

需要準備以下軟體和環境:

  • 8G以上記憶體

  • Vagrant 2.0+

  • VirtualBox 5.0 +

  • 提前下載Kubernetes 1.9以上版本(支援最新的1.11.0)的release壓縮包

  • Mac/Linux,不支援Windows

叢集

我們使用Vagrant和Virtualbox安裝包含3個節點的kubernetes叢集,其中master節點同時作為node節點。

一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

注意:以上的IP、主機名和元件都是固定在這些節點的,即使銷燬後下次使用vagrant重建依然保持不變。

容器IP範圍:172.33.0.0/30

Kubernetes service IP範圍:10.254.0.0/16

安裝的元件

安裝完成後的叢集包含以下元件:

  • flannel( host-gw模式)

  • kubernetes dashboard

  • etcd(單節點)

  • kubectl

  • CoreDNS

  • kubernetes(版本根據下載的kubernetes安裝包而定,支援Kubernetes1.9+)

可選外掛

  • Heapster + InfluxDB + Grafana

  • ElasticSearch + Fluentd + Kibana

  • Istio service mesh

  • Vistio

使用說明

將該repo克隆到本地,下載Kubernetes的到專案的根目錄。

git clone https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster.gitcd kubernetes-vagrant-centos-clusterwget https://storage.googleapis.com/kubernetes-release/release/v1.11.0/kubernetes-server-linux-amd64.tar.gz複製程式碼

注:您可以在這裡找到Kubernetes的發行版下載地址。

使用vagrant啟動叢集。

vagrant up複製程式碼

如果是首次部署,會自動下載 centos/7的box,這需要花費一些時間,另外每個節點還需要下載安裝一系列軟體包,整個過程大概需要10幾分鐘。

如果您在執行 vagrant up的過程中發現無法下載 centos/7的box,可以手動下載後將其新增到vagrant中。

手動新增centos/7 box

wget -c http://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-1801_02.VirtualBox.boxvagrant box add CentOS-7-x86_64-Vagrant-1801_02.VirtualBox.box --name centos/7複製程式碼

這樣下次執行 vagrant up的時候就會自動讀取本地的 centos/7 box而不會再到網上下載。

訪問kubernetes叢集

訪問Kubernetes叢集的方式有三種:

  • 本地訪問

  • 在VM內部訪問

  • Kubernetes dashboard

通過本地訪問

可以直接在你自己的本地環境中操作該kubernetes叢集,而無需登入到虛擬機器中。

要想在本地直接操作Kubernetes叢集,需要在你的電腦裡安裝 kubectl命令列工具,對於Mac使用者執行以下步驟:

wget https://storage.googleapis.com/kubernetes-release/release/v1.11.0/kubernetes-client-darwin-amd64.tar.gztar xvf kubernetes/platforms/darwin/amd64/kubectl /usr/local/bin/複製程式碼

conf/admin.kubeconfig檔案放到 ~/.kube/config目錄下即可在本地使用 kubectl命令操作叢集。

mkdir -p ~/.kubecp conf/admin.kubeconfig ~/.kube/config複製程式碼

我們推薦您使用這種方式。

在虛擬機器內部訪問

如果有任何問題可以登入到虛擬機器內部除錯:

vagrant ssh node1sudo -ikubectl get nodes複製程式碼

Kubernetes dashboard

還可以直接通過dashboard UI來訪問:https://172.17.8.101:8443

可以在本地執行以下命令獲取token的值(需要提前安裝kubectl):

kubectl -n kube-system describe secret `kubectl -n kube-system get secret|grep admin-token|cut -d " " -f1`|grep "token:"|tr -s " "|cut -d " " -f2複製程式碼

注意:token的值也可以在 vagrant up的日誌的最後看到。

一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

只有當你安裝了下面的heapster元件後才能看到上圖中的監控metrics。

元件

Heapster監控

建立Heapster監控:

kubectl apply -f addon/heapster/複製程式碼

訪問Grafana

使用Ingress方式暴露的服務,在本地 /etc/hosts中增加一條配置:

172.17.8.102 grafana.jimmysong.io複製程式碼

訪問Grafana:http://grafana.jimmysong.io

一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

Traefik

部署Traefik ingress controller和增加ingress配置:

kubectl apply -f addon/traefik-ingress複製程式碼

在本地 /etc/hosts中增加一條配置:

172.17.8.102 traefik.jimmysong.io複製程式碼

訪問Traefik UI:http://traefik.jimmysong.io

一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

EFK

使用EFK做日誌收集。

kubectl apply -f addon/efk/複製程式碼

注意:執行EFK的每個節點需要消耗很大的CPU和記憶體,請保證每臺虛擬機器至少分配了4G記憶體。

Helm

用來部署helm。

hack/deploy-helm.sh複製程式碼

Service Mesh

我們使用 istio 作為 service mesh。

安裝

到Istio release 頁面下載istio的安裝包,安裝istio命令列工具,將 istioctl命令列工具放到你的 $PATH目錄下,對於Mac使用者:

wget https://github.com/istio/istio/releases/download/1.0.0/istio-1.0.0-osx.tar.gztar xvf istio-1.0.0-osx.tar.gzmv bin/istioctl /usr/local/bin/複製程式碼

在Kubernetes中部署istio:

kubectl apply -f addon/istio/複製程式碼

執行示例

kubectl apply -n default -f <(istioctl kube-inject -f yaml/istio-bookinfo/bookinfo.yaml)istioctl create -f yaml/istio-bookinfo/bookinfo-gateway.yaml複製程式碼

在您自己的本地主機的 /etc/hosts檔案中增加如下配置項。

172.17.8.102 grafana.istio.jimmysong.io172.17.8.102 servicegraph.istio.jimmysong.io複製程式碼

我們可以通過下面的URL地址訪問以上的服務。


一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

更多詳細內容請參考Vistio—使用Netflix的Vizceral視覺化Istio service mesh。

管理

除了特別說明,以下命令都在當前的repo目錄下操作。

掛起

將當前的虛擬機器掛起,以便下次恢復。

vagrant suspend複製程式碼

恢復

恢復虛擬機器的上次狀態。

vagrant resume複製程式碼

注意:我們每次掛起虛擬機器後再重新啟動它們的時候,看到的虛擬機器中的時間依然是掛載時候的時間,這樣將導致監控檢視起來比較麻煩。因此請考慮先停機再重新啟動虛擬機器。

重啟

停機後重啟啟動。

vagrant haltvagrant up# login to node1vagrant ssh node1# run the prosivision scripts/vagrant/hack/k8s-init.shexit# login to node2vagrant ssh node2# run the prosivision scripts/vagrant/hack/k8s-init.shexit# login to node3vagrant ssh node3# run the prosivision scripts/vagrant/hack/k8s-init.shsudo -icd /vagrant/hack./deploy-base-services.shexit複製程式碼

現在你已經擁有一個完整的基礎的kubernetes執行環境,在該repo的根目錄下執行下面的命令可以獲取kubernetes dahsboard的admin使用者的token。

hack/get-dashboard-token.sh複製程式碼

根據提示登入即可。

清理

清理虛擬機器。

vagrant destroyrm -rf .vagrant複製程式碼

注意

僅做開發測試使用,不要在生產環境使用該專案。

參考

  • Kubernetes Handbook——Kubernetes中文指南/雲原生應用架構實踐手冊

  • duffqiu/centos-vagrant

  • coredns/deployment

  • Kubernetes 1.8 kube-proxy 開啟 ipvs

  • Vistio—使用Netflix的Vizceral視覺化Istio service mesh

一鍵在本地搭建執行Istio 1.0的分散式Kubernetes叢集

歡迎大家在本公眾號上踴躍投稿,投稿方式請訪問:https://github.com/servicemesher/trans



相關文章