Istio服务网格技术解析与实践
上QQ阅读APP看书,第一时间看更新

2.2 在Docker Desktop上搭建Istio环境

Docker社区版(CE)是开发人员和小型团队试用Docker和容器应用的理想之选,适用于许多主流的基础设施平台,如桌面、云和开源操作系统。Docker CE提供了简单快速的安装程序,安装后即可立即着手应用开发。因为Docker CE根据基础设施进行了集成和优化,所以在使用Docker时能够像使用本机应用一样具有流畅的使用体验。有了Docker社区版,你可以构建自己的第一个容器,并与团队伙伴共享,还能自动设置好开发流程。

2.2.1 安装配置Docker Desktop for Kubernetes

如果需要一个Docker for Mac或者Docker for Windows的安装包,可以到官方网站https://www.docker-cn.com/community-edition中去下载最新版本。

由于Kubernetes大量的容器镜像在gcr.io,无法在国内保证稳定的访问,我们提供了一些工具脚本,帮助开发者从阿里云镜像服务所需镜像。通过如下命令,可以下载这些镜像的脚本文件:

git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop
cd k8s-for-docker-desktop

1.在Docker for Mac中开启Kubernetes

如果是在Mac上运行Docker Desktop,首先为Docker daemon配置Docker Hub的中国官方镜像加速:https://registry.docker-cn.com,如图2-4所示。

图2-4 Docker daemon配置

根据实际机器资源情况为Kubernetes配置CPU和内存资源,建议分配4GB或更多内存,如图2-5所示。

图2-5 开启Kubernetes

预先从阿里云Docker镜像服务下载Kubernetes所需要的镜像,可以通过修改images.properties文件加载自己需要的镜像,如下所示:

./load_images.sh

开启Kubernetes,并等待Kubernetes开始运行,如图2-6所示。

图2-6 开启Kubernetes

2.在Docker for Windows中开启Kubernetes

如果是在Windows上运行Docker Desktop,首先为Docker daemon配置Docker Hub的中国官方镜像加速:https://registry.docker-cn.com,如图2-7所示。

图2-7 Docker daemon配置

根据实际机器资源情况为Kubernetes配置CPU和内存资源,建议分配4GB或更多内存,如图2-8所示。

图2-8 开启Kumbernetes

预先从阿里云Docker镜像服务下载Kubernetes所需要的镜像,可以通过修改images.properties文件加载自己需要的镜像,如下所示:

执行如下Bash shell命令:

./load_images.sh

执行如下PowerShell命令:

.\load_images.ps1

提示

如果因为安全策略无法执行PowerShell脚本,请在“以管理员身份运行”的PowerShell中执行Set-ExecutionPolicy RemoteSigned命令。

与在Mac上运行Docker Desktop一样,开启Kubernetes,并等待Kubernetes开始运行。

2.2.2 切换Kubernetes

切换Kubernetes运行上下文至docker-for-desktop如下所示:

kubectl config use-context docker-for-desktop

可以通过如下命令确认Kubernetes集群是否正常运行:

或者查看Kubernetes集群的节点信息,以了解它的状态,如下所示:

接下来,我们要想启动Kubernetes仪表板,还得在集群中部署kubernetes-dashboard.yaml,如下所示:

kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/
src/deploy/recommended/kubernetes-dashboard.yaml

部署成功后,启动Proxy,通过如下命令开启API Server访问代理:

kubectl proxy

通过如下URL访问Kubernetes仪表板,如图2-9所示:

图2-9 访问Kubernetes仪表板

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

你可以选择已配置用来访问集群的kubeconf ig文件,也可以指定使用保密字典来保存持有者令牌,用来在仪表板登录的每个服务帐号都会有保密字典。可以通过以下方式获取令牌:

对于Mac环境:

kubectl -n kube-system describe secret default| awk '$1=="token:"{print $2}'
TOKEN=$(kubectl -n kube-system describe secret default| awk '$1=="token:"{print 
$2}')
echo "${TOKEN}"

对于Windows环境:

TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") 
-split " +")[1]
echo "${TOKEN}"

登录之后即可以看到安装好的Kubernetes,如图2-10所示。

图2-10 查看安装好的Kubernetes

2.2.3 安装部署Helm

使用Helm安装和配置是将Istio安装到生产环境的推荐安装方式,因为Helm为Istio控制平面和数据平面Sidecar提供了丰富的配置。首先要在Kubernetes中安装Helm。可以根据Helm的官方文档安装,地址为https://github.com/helm/helm/blob/master/docs/install.md,安装好的Kubernetes如图2-10所示。

在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.2.4 安装部署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

6)如果要卸载Istio,可以按照如下方式进行:

helm delete --purge istio
helm delete --purge istio-init

按照设计原则,Istio期望安装文件CRD中包含的Istio的自定义资源能够提交到Kubernetes环境中。CRD包含运维者设置的一些运行时配置。因此,我们认为应该交与运维者来明确是否、什么时候删除运行时的配置数据更为合适,而不是随意删除它。需要注意一点的是,删除CRD会永久删除你对Istio所做的任何配置更改。

在istio-init Helm Chart包含的目录istio-init/f iles中,定义了Istio所需的所有自定义资源CRD。获取此Helm Chart后,只需通过kubectl删除这些CRD即可,如下所示:

kubectl delete -f install/kubernetes/helm/istio-init/files