istio源碼解析系列(一)-istio開發環境搭建

istio源碼解析系列(一)-istio開發環境搭建

來自專欄 Istio源碼解析系列

前言

本系列文章主要從源碼(35e2b904)出發,對istio做深入剖析,讓大家對istio有更深的認知,從而方便平時排查問題。不了解Service Mesh和Istio的同學請先閱讀敖小劍老師如下文章進行概念上的理解:

  • Service Mesh:下一代微服務
  • 服務網格新生代-Istio

本文主要對istio在ubuntu16.04下環境搭建做簡單介紹,Mac用戶和其他linux發行版用戶請根據bash腳本做相應調整。

環境搭建

安裝docker

# 參考 https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1

配置docker代理[可選]

新建/etc/systemd/system/docker.service.d/http-proxy.conf,添加如下配置

[Service]Environment="HTTP_PROXY=http://<your_proxy>/" "HTTPS_PROXY=http://<your_proxy>/" "NO_PROXY=192.168.0.0/16,127.0.0.0/8" # your_proxy替換成你自己的代理

安裝virtualbox

# virtualbox需要裝最新的5.2.10, https://www.virtualbox.org/wiki/Linux_Downloads# Mac OSwget https://download.virtualbox.org/virtualbox/5.2.10/VirtualBox-5.2.10-122088-OSX.dmg# ubuntu AMD64wget https://download.virtualbox.org/virtualbox/5.2.10/virtualbox-5.2_5.2.10-122088~Ubuntu~xenial_amd64.deb && sudo apt install ./virtualbox-5.2_5.2.10-122088~Ubuntu~xenial_amd64.deb# centos6 AMD64wget https://download.virtualbox.org/virtualbox/5.2.10/VirtualBox-5.2-5.2.10_122088_el6-1.x86_64.rpm && yum install ./VirtualBox-5.2-5.2.10_122088_el7-1.x86_64.rpm# centos7 AMD64wget https://download.virtualbox.org/virtualbox/5.2.10/VirtualBox-5.2-5.2.10_122088_el7-1.x86_64.rpm && yum install ./VirtualBox-5.2-5.2.10_122088_el7-1.x86_64.rpm

安裝k8s集群

使用vagrant安裝k8s集群[建議]

參考jimmysong的vagrant教程kubernetes-vagrant-centos-cluster,其中節點個數根據自己機器配置酌情更改(參考kubernetes-vagrant-centos-cluster)。

使用minikube安裝k8s集群[可選]

  • 安裝minikube

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ # 下載minikubecurl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/ # 下載kubectl

  • 啟動k8s

# 注minikube可以不使用virtualbox啟動k8s,不過需要dockerc處於橋接模式,否則可能導致網路連接不通,配置過程請自行搜索minikube start --extra-config=controller-manager.ClusterSigningCertFile="/var/lib/localkube/certs/ca.crt" --extra-config=controller-manager.ClusterSigningKeyFile="/var/lib/localkube/certs/ca.key" --extra-config=apiserver.Admission.PluginNames=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota --kubernetes-version=v1.9.4 --logtostderr

配置Istio repo

  • 配置github並拉取代碼

# 配置github代理git config --global http.https://github.com.proxy http://proxy:1080# 在github上fork Istio,並clone到自己公共的$GOPATH/src/istio.io/下mkdir -p $GOPATH/src/istio.iocd $GOPATH/src/istio.iogit clone https://github.com/$YOU/istiocd istiogit remote add upstream https://github.com/istio/istiogit config --global --add http.followRedirects 1

  • 配置環境變數

未避免污染全局環境變數,強烈建議安裝autoenv。

cd $GOPATH/src/istio.io/istio

在istio根目錄下新增.env文件,配置如下:

export GOPATH=$YOUR_GOPATH # $YOUR_GOPATH為你的GOPATH路徑export PATH=$PATH:$GOPATH/binexport ISTIO=$GOPATH/src/istio.io # eg. ~/go/src/istio.io# Please change HUB to the desired HUB for custom docker container# builds.export HUB="docker.io/$USER" # $USER為你的dockerhub賬號# The Istio Docker build system will build images with a tag composed of# $USER and timestamp. The codebase doesnt consistently use the same timestamp# tag. To simplify development the development process when later using# updateVersion.sh you may find it helpful to set TAG to something consistent# such as $USER.export TAG=$USER # TAG為你編譯Istio各組建後打包鏡像的tag,建議Mac/ubuntu當前賬號# If your github username is not the same as your local user name (saved in the# shell variable $USER), then replace "$USER" below with your github usernameexport GITHUB_USER=$USER # GITHUB_USER為你的github賬號# Specify which Kube config youll use for testing. This depends on whether# youre using Minikube or your own Kubernetes cluster for local testing# For a GKE cluster:export KUBECONFIG=${HOME}/.kube/config# Alternatively, for Minikube:# export KUBECONFIG=${GOPATH}/src/istio.io/istio/.circleci/configexport ISTIO_DOCKER_HUB="docker.io/$USER" # make build時使用此變數export ISTIO_VERSION=$USER # make build時使用此變數

使當前.env生效:

cd .

Istio編譯組件並測試

  • 編譯鏡像

# make init # 初始化,檢查目錄結構、Go版本號、初始化環境變數、檢查vendor等make docker # 對各組件(istioctl、mixer、pilot、istio-auth等)進行二進位包編譯、測試、鏡像編譯make push # 推送鏡像到dockerhub# 其他指令make pilot docker.pilot # 編譯pilot組件和鏡像make app docker.app # 編譯app組件和鏡像make proxy docker.proxy # 編譯proxy組件和鏡像make proxy_init docker.proxy_init # 編譯proxy_init組件和鏡像make proxy_debug docker.proxy_debug # 編譯proxy_debug組件和鏡像make sidecar_injector docker.sidecar_injector # 編譯sidecar_injector組件和鏡像make proxyv2 docker.proxyv2 # 編譯proxyv2組件和鏡像make push.docker.pilot # 推送pilot鏡像到dockerhub,其他組件類似

  • 其他腳本

cd $GOPATH/src/istio.io/istio./bin/get_workspace_status # 查看當前工作目錄狀態,包括環境變數等install/updateVersion.sh -a ${HUB},${TAG} # 使用當前環境變數生成Istio清單samples/bookinfo/build_push_update_images.sh # 使用當前環境變數編譯並推送bookinfo鏡像

  • 測試鏡像

參考Istio doc


作者

鄭偉,小米信息部技術架構組

招聘

小米信息部武漢研發中心,信息部是小米公司整體系統規劃建設的核心部門,支撐公司國內外的線上線下銷售服務體系、供應鏈體系、ERP體系、內網OA體系、數據決策體系等精細化管控的執行落地工作,服務小米內部所有的業務部門以及 40 家生態鏈公司。

同時部門承擔微服務體系建設落地及各類後端基礎平台研發維護,語言涉及 Go、PHP、Java,長年虛位以待對微服務、基礎架構有深入理解和實踐、或有大型電商後端系統研發經驗的各路英雄。

歡迎投遞簡歷:jin.zhang(a)xiaomi.com

更多技術文章:小米信息部技術團隊

推薦閱讀:

如何應對線上故障
微服務化的資料庫設計與讀寫分離
Istio Egress 規則簡介
微服務是如何製造更多問題的?
istio源碼解析系列(三)-Mixer工作流程淺析

TAG:Kubernetes | 微服務架構 | Go語言 |