2.1 在MiniKube上搭建Istio环境
为了方便大家开发和体验Kubernetes,社区提供了可以在本地部署的Minikube。由于网络访问原因,很多朋友无法使用Minikube进行实验。为此我们提供了一个修改版的Minikube,可以从阿里云的镜像地址来获取所需的Docker镜像和配置。
Minikube在不同操作系统上支持不同的驱动:
●macOS:xhyve driver、VirtualBox或VMware Fusion。
●Linux:VirtualBox或KVM。
●Windows:VirtualBox或Hyper-V;注意,在Windows环境下,如果开启了Hyper-V,则不支持VirtualBox方式。
2.1.1 安装启动Minikube
我们提供了一个国内可访问的Minikube修改版的文件,可以直接下载使用。
Mac OSX用户可通过以下命令安装Minikube:
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v0.30.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
Linux用户可通过以下命令安装Minikube:
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v0.30.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
Windows用户可通过以下方式下载安装Minikube:http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v0.30.0/minikube-windows-amd64.exe?spm=a2c4e.11153940.blogcont221687.28.7dd54cecA8DSic&f ile=minikube-windows-amd64.exe,并重命名为minikube.exe。
Minikube默认使用VirtualBox驱动来创建Kubernetes本地环境,可以通过以下命令启动:
minikube start --registry-mirror=https://registry.docker-cn.com
默认会启动最新版本的Kubernetes,也可以指定不同的Kubernetes版本,如下所示:
# 安装Kubernetes v1.12.1 minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version v1.12.1 # 安装Kubernetes v1.11.3 minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version v1.11.3
在执行上述命令过程中会下载Minikube ISO文件,如果由于网络原因无法下载,可以先通过其他方式获取该ISO文件,然后在启动命令中加上参数--iso-url并执行ISO文件,例如:
minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version v1.12.1 --iso-url=file://tmp/minikube-v0.30.0.iso
以Kubernetes v1.12.1为例,在Mac机器上进行安装部署,应该有如下类似的执行结果:
minikube start --registry-mirror=https://registry.docker-cn.com --kubernetes-version v1.12.1 Starting local Kubernetes v1.12.1 cluster... Starting VM... Downloading Minikube ISO 170.78 MB / 170.78 MB [============================================] 100.00% 0s Getting VM IP address... Moving files into cluster... Setting up certs... Connecting to cluster... Setting up kubeconfig... Starting cluster components... Kubectl is now configured to use the cluster. Loading cached images from config file.
接着运行如下命令,可以查看安装后的Kubernetes控制台:
minikube dashboard
2.1.2 安装部署Helm
使用Helm安装和配置是将Istio安装到你的开发环境,这是推荐安装方式,因为它为Istio控制平面和数据平面Sidecar提供了丰富的配置。因此首先在Kubernetes中安装Helm。可以根据Helm的官方文档安装:https://github.com/helm/helm/blob/master/docs/install.md,具体来说,方法如下。
在Mac OS上安装:
# Use homebrew on Mac brew install kubernetes-helm # Install Tiller into your Kubernetes cluster helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller: v2.12.2 --skip-refresh # update charts repo (Optional) helm repo update
在Windows上安装:
# Use Chocolatey on Windows # 注:安装的时候需要保证网络能够访问googleapis这个域名 choco install kubernetes-helm # Install Tiller into your Kubernetes cluster helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller: v2.12.2 --skip-refresh # update charts repo (Optional) helm repo update
2.1.3 安装部署Istio
接着,按照如下步骤安装部署Istio。
1)进入到Istio release下载页面https://github.com/istio/istio/releases,下载对应目标操作系统的安装文件。在macOS或者Linux系统中,还可以运行下面的命令,进行下载和自动解压缩:
curl -L https://git.io/getLatestIstio | sh -
2)进入Istio包目录。例如,假设这个安装包是istio-1.4.0,进入该目录即执行cd istio-1.4.0。
安装目录中包含以下内容:
●install/目录中包含了Kubernetes安装所需的.yaml文件。
●samples/目录保存示例应用。
●bin/目录保存istioctl客户端文件,istioctl的功能是手工进行Envoy Sidecar的注入等其他操作。
●istio.VERSION为配置文件。
然后,把istioctl客户端加入PATH环境变量。
3)通过Helm命令,安装istio-init Helm Chart以创建所有Istio所需的自定义资源CRD:
helm install install/kubernetes/helm/istio-init --name istio-init --namespace istio-system
4)使用以下命令验证是否已将所有Istio CRD提交到Kubernetes api-server:
kubectl get crds | grep 'istio.io\|certmanager.k8s.io' | wc -l
5)通过Helm命令,安装istio Helm Chart以创建Istio组件:
helm install install/kubernetes/helm/istio --name istio --namespace istio-system
执行上述命令之后,等待几分钟,待所有Istio相关的容器启动正常之后,查看Kubernetes控制台,得到如图2-1所示的画面。
图2-1 安装后的Istio资源
如果在启动过程中,由于内存限制不能正常启动istio-pilot,可以修改istio-pilot部署YAML定义中的内存大小,默认为2Gi;此外还可以修改istio-pilot的容器组水平伸缩器,将最大副本数从5减小到1,如图2-2所示。
图2-2 Istio Pilot容器组
如果需要调整Minikube虚拟机的内存大小,可以通过conf ig命令进行配置,如下所示:
minikube config set memory 8192 These changes will take effect upon a minikube delete and then a minikube start
如提示所言,需要删掉已有的Minikube,重新启动一个才会生效。其实也可以通过直接修改虚拟机内存和CPU的方式进行调整,即执行minikube stop命令,等待虚拟机停止之后,通过VirtualBox界面调整内存和CPU,然后重新启动Minikube使这些配置生效,如下所示:
minikube start Starting local Kubernetes v1.10.0 cluster... Starting VM... Getting VM IP address... Kubernetes version downgrade is not supported. Using version: v1.12.1 Moving files into cluster... Setting up certs... Connecting to cluster... Setting up kubeconfig... Starting cluster components... Kubectl is now configured to use the cluster. Loading cached images from config file. kubectl label namespace default istio-injection=enabled kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
要获取Minikube的ip地址,执行如下命令:
export INGRESS_HOST=$(minikube ip)
以下命令将服务istio-ingressgateway的类型修改为NodePort,并获取对应的端口:
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
通过执行如下命名部署应用示例Bookinfo:
kubectl label namespace default istio-injection=enabled kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
确认相应的Pod启动成功之后,然后在浏览器中输入http://${INGRESS_HOST}:${INGRESS_PORT}/productpage,可以确认Bookinfo应用的运行情况,如图2-3所示。
图2-3 Bookinfo应用示例
如果刷新几次应用的页面,productpage页面中会随机展示reviews服务的不同版本的效果(用红色、黑色的星形,或者没有显示)。reviews服务出现这种情况是因为我们还没有使用Istio来控制版本的路由。在后续章节中可以学习到如何使用Istio的路由能力。