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