在macos上搭建istio

来源:互联网 发布:百度软件制作 编辑:程序博客网 时间:2024/06/03 17:39

istio介绍

  istio是google和ibm开发的一套基于k8s和docker技术的微服务架构,理论来自service mesh,参考资料

环境准备

1、安装minikube(k8s的单机版)v0.23.0
         本文安装的minikube版本是当前最新版本v0.23.0,若以后你希望安装最新版本的minikube,请参考链接。
 macos终端执行:

 # curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.23.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/


2、安装最新版的kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl

3、安装虚拟机VirtualBox

minikube支持xhyve、VirtualBox、VMwareFusion、hyperVKVM等多种虚拟机驱动器,这里我们使用VirtualBox,请读者自行下载安装。

4、下载istio

到 Istio release 页面上,根据您的操作系统下载对应的发行

启动minikube

    在终端执行:minikube start

        第一次执行会自动从服务器下载minikube的镜像文件,如果下载失败,重复执行多次即可。 

        

启动成功后可以创建实例并部署(示例创建一个tomcat8.0的实例):

        kubectl run hello-minikube --image=tomcat:8.0 --port=8080

        发布hello-minikube

        kubectl expose deployment hello-minikube --type=NodePort

        查看 pods

        kubectl get pods

        这个过程中会发现pod一直处于ContainerCreating状态,说明过程中出现了错误

        查看logs

        minikube logs

通过日志可以看出是有一个镜像gcr.io/google_containers/pause-amd64:3.0 显示拉取失败,分析原因应该是 gcr.io 这个地址被墙了 。所以需要替换该镜像,设置minikube的镜像拉取策略为本地优先获取。

        # 替换镜像

$ docker pull visenzek8s/pause-amd64:3.0

$ docker tag visenzek8s/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

        # 显式设置拉取策略为 IfNotPresent

$ kubectl run hello-minikube --image=tomcat:8.0 --port=8080 --image-pull-policy=IfNotPresent 

把所有出错的容器的按照这种方式修改,就可以正常启动了。

#查看k8s控制台

        $ minikube dashboard

        

启动istio

      1、将下载的istio-0.2.12解压,切换到istio目录
      2、将 istioctl 客户端二进制文件加到 PATH 中:export PATH=$PWD/bin:$PATH
      3、安装 Istio 的核心部分:kubectl apply -f install/kubernetes/istio.yaml
      4、确认系列 kubernetes 服务已经部署:kubectl get svc -n istio-system
     

      5、确认对应的 Kubernetes pod 已部署并且所有的容器都启动并运行:kubectl get pods -n istio-system

     

如图所示,istio已经正常启动了,如果遇到docker镜像下载失败的,可以手动去dockerstore下载相关镜像即可。

istio官方示例BookInfo启动

BookInfo 应用程序包括四个独立的微服务:
productpage:productpage(产品页面)微服务,调用 details 和 reviews 微服务来填充页面。
details:details 微服务包含书籍的详细信息。
reviews:reviews 微服务包含书籍的点评。它也调用 ratings 微服务。
ratings:ratings 微服务包含随书评一起出现的评分信息。
有3个版本的 reviews 微服务:
版本v1不调用 ratings 服务。
版本v2调用 ratings ,并将每个评级显示为1到5个黑色星。
版本v3调用 ratings ,并将每个评级显示为1到5个红色星。 
 

应用程序的端到端架构如下所示

1、构建应用程序容器:kubectl apply -f samples/bookinfo/kube/bookinfo.yaml
        2、确认所有服务和 pod 已正确定义并运行:kubectl get services
 

       

kubectl get pods

       

所有的pod都是running状态就表示bookinfo的样例已经成功启动

3、Minikube:Minikube 不支持外部负载均衡器。您可以使用 ingress 服务的主机 IP 和 NodePort 来访问 ingress

export GATEWAY_URL=$(kubectl get po -l istio=ingress -o 'jsonpath={.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -o'jsonpath={.spec.ports[0].nodePort}')

最后在浏览器访问:http://${GATEWAY_URL}/productpage

不断刷新页面,右侧的book reviews会根据配置的流量策略切换服务

       


原创粉丝点击