一鍵在本地搭建運行Istio 1.0的分佈式Kubernetes集羣

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

就在昨天0點,Istio 1.0發佈,已生產就緒!不少同窗都對Istio 1.0躍躍欲試但苦於沒有運行環境。今天我提供給你們一個開箱即用又能夠方便定製的分佈式開發環境的方法,可用於對Istio、Kubernetes自己和應用進行更好的測試。如今咱們使用Vagrant和VirtualBox來建立一個這樣的環境。
linux

注意:Istio 1.0、Kubernetes 1.十一、kube-proxy使用ipvs模式,建議使用至少16G內存的Mac電腦運行。git

準備環境

須要準備如下軟件和環境:github

  • 8G以上內存centos

  • Vagrant 2.0+api

  • VirtualBox 5.0 +bash

  • 提早下載Kubernetes 1.9以上版本(支持最新的1.11.0)的release壓縮包架構

  • Mac/Linux,不支持Windowsapp

集羣

咱們使用Vagrant和Virtualbox安裝包含3個節點的kubernetes集羣,其中master節點同時做爲node節點。ssh

注意:以上的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的日誌的最後看到。

只有當你安裝了下面的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

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

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地址訪問以上的服務。


更多詳細內容請參考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


歡迎你們在本公衆號上踊躍投稿,投稿方式請訪問:https://github.com/servicemesher/trans

相關文章
相關標籤/搜索