![Istio服务网格技术解析与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/267/29970267/b_29970267.jpg)
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所示。
![](https://epubservercos.yuewen.com/B6FCA6/16499103605150006/epubprivate/OEBPS/Images/2a4.jpg?sign=1739034464-CmOUGb7hreClKkrz2iA3S6GC50uA8vgP-0-cbf8a925896bdf9d69b954025337f29f)
图2-4 Docker daemon配置
根据实际机器资源情况为Kubernetes配置CPU和内存资源,建议分配4GB或更多内存,如图2-5所示。
![](https://epubservercos.yuewen.com/B6FCA6/16499103605150006/epubprivate/OEBPS/Images/2a5.jpg?sign=1739034464-zbzqfCOl7IRoWYQExDntFpbm6t1XauU4-0-ac5fd16eab98d9a464cc6bea1d3cfcd0)
图2-5 开启Kubernetes
预先从阿里云Docker镜像服务下载Kubernetes所需要的镜像,可以通过修改images.properties文件加载自己需要的镜像,如下所示:
./load_images.sh
开启Kubernetes,并等待Kubernetes开始运行,如图2-6所示。
![](https://epubservercos.yuewen.com/B6FCA6/16499103605150006/epubprivate/OEBPS/Images/2a6.jpg?sign=1739034464-8wqMBnkJB1Ej5ep6vCq7vuGcVAWaI23D-0-43fa68d92b1f3022dd09a52f3b9cf3ed)
图2-6 开启Kubernetes
2.在Docker for Windows中开启Kubernetes
如果是在Windows上运行Docker Desktop,首先为Docker daemon配置Docker Hub的中国官方镜像加速:https://registry.docker-cn.com,如图2-7所示。
![](https://epubservercos.yuewen.com/B6FCA6/16499103605150006/epubprivate/OEBPS/Images/2a7.jpg?sign=1739034464-lLHkSZF0UOKBJE2jpWzRtVtC8L14tQd6-0-2b1023a4667e52403a020595a437ac32)
图2-7 Docker daemon配置
根据实际机器资源情况为Kubernetes配置CPU和内存资源,建议分配4GB或更多内存,如图2-8所示。
![](https://epubservercos.yuewen.com/B6FCA6/16499103605150006/epubprivate/OEBPS/Images/2a8.jpg?sign=1739034464-HqI3ii0OYbYWHAcFlri2VivJfmDDd7wt-0-f4ad816394d974540a8f7457697bf273)
图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集群是否正常运行:
![](https://epubservercos.yuewen.com/B6FCA6/16499103605150006/epubprivate/OEBPS/Images/048-1.jpg?sign=1739034464-C0c6Ajh29aqd3NFkQh2OZmUQAUJh9Nw5-0-fa540dc50da110639e73058f7f8022c2)
或者查看Kubernetes集群的节点信息,以了解它的状态,如下所示:
![](https://epubservercos.yuewen.com/B6FCA6/16499103605150006/epubprivate/OEBPS/Images/048-2.jpg?sign=1739034464-xHwZ0gTh7WVyXNW0CjaMVZzHKs4kdiMi-0-f455ffbdcfaa093d1fd3cf028b337709)
接下来,我们要想启动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所示:
![](https://epubservercos.yuewen.com/B6FCA6/16499103605150006/epubprivate/OEBPS/Images/2a9.jpg?sign=1739034464-M0d1p6SgpQ9x6OaCvPqzyh3XPzCpc9rH-0-6117454a7942aeb9c05830ed625038d6)
图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所示。
![](https://epubservercos.yuewen.com/B6FCA6/16499103605150006/epubprivate/OEBPS/Images/2a10.jpg?sign=1739034464-LI7mTCddyriqMlLnskjKqgYVgXsSO6d5-0-8527952ce4179fcecba94431e633f66a)
图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