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)http://xiaomi.com
更多技術文章:小米信息部技術團隊
推薦閱讀:
※如何應對線上故障
※微服務化的資料庫設計與讀寫分離
※Istio Egress 規則簡介
※微服務是如何製造更多問題的?
※istio源碼解析系列(三)-Mixer工作流程淺析
TAG:Kubernetes | 微服務架構 | Go語言 |