经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Kubernetes » 查看文章
istio部署-快速入门
来源:cnblogs  作者:Netonline  时间:2019/10/8 9:10:40  对本文有异议

参考

本文为 istio 快速入门部署,一般用于演示环境。

1. 准备工作

  • k8s集群要支持istio自动注入,需要检查api server的启动参数,确保 admission control 部分按顺序启用 MutatingAdmissionWebhookValidatingAdmissionWebhook;
  • 通过 kube-apiserver -h | grep enable-admission-plugins 查看已启用的 admission control
  • Which plugins are enabled by default

2. 下载

  1. # 下载1.1.7版本
  2. wget https://github.com/istio/istio/releases/download/1.1.7/istio-1.1.7-linux.tar.gz
  3. # tar -zxvf istio-1.1.7-linux.tar.gz

3. 实施

  1. cd istio-1.1.7
  2. kubectl apply -f install/kubernetes/istio-demo.yaml
  3. # "-w" 参数用于持续查询pod状态变化;
  4. # pod状态为 "Completed" 时, 表示执行 "Job" 留下的pod, "Completed" 状态说明 "Job" 执行成功
  5. kubectl get pod -n istio-system -w

4. 应用示例

4.1 部署应用

  1. git clone https://github.com/fleeto/flaskapp.git
  2. cd flaskapp
  3. cat flask.istio.yaml
  4. apiVersion: v1
  5. kind: Service
  6. metadata:
  7. name: flaskapp
  8. labels:
  9. app: flaskapp
  10. spec:
  11. # "selector" 仅使用1个标签,则 "Service" 对两个 "Deployment" 均有效
  12. selector:
  13. app: flaskapp
  14. ports:
  15. # 根据istio规范对端口进行命名
  16. - name: http
  17. port: 80
  18. ---
  19. apiVersion: extensions/v1beta1
  20. kind: Deployment
  21. metadata:
  22. name: flaskapp-v1
  23. spec:
  24. replicas: 1
  25. template:
  26. metadata:
  27. # 两个标签,其中以不同的 "version" 标签进行区分;
  28. # istio中通常使用这两个标签作为应用与版本的标识
  29. labels:
  30. app: flaskapp
  31. version: v1
  32. spec:
  33. containers:
  34. - name: flaskapp
  35. # image一致
  36. image: dustise/flaskapp
  37. imagePullPolicy: Always
  38. # 注册一个名为 "version" 的环境变量,两个应用取值不同
  39. env:
  40. - name: version
  41. value: v1
  42. ---
  43. apiVersion: extensions/v1beta1
  44. kind: Deployment
  45. metadata:
  46. name: flaskapp-v2
  47. spec:
  48. replicas: 1
  49. template:
  50. metadata:
  51. labels:
  52. app: flaskapp
  53. version: v2
  54. spec:
  55. containers:
  56. - name: flaskapp
  57. image: dustise/flaskapp
  58. imagePullPolicy: Always
  59. env:
  60. - name: version
  61. value: v2
  62. # 部署应用
  63. kubectl apply -f flask.istio.yaml

4.2 部署istio

  • 使用 istioctl 进行注入, 其修改 Deployment , 在Pod中注入 Sidecar 容器;
  • 本节采用手工注入,实际生产环境中一般会打开pod的自动注入功能。
  1. # 注入 "sidecar"
  2. istioctl kube-inject -f flask.istio.yaml | kubectl apply -f -
  3. # 查看pod
  4. # pod中容器数量从"1"变为"2"
  5. kubectl get pod -w
  6. # 注入容器 "istio-proxy" ;
  7. # 另有初始化劫持容器 "istio-init"
  8. kubectl describe pod flaskapp-v1-66b59cdfc6-zk9sz

4.3 部署客户端服务

  1. git clone https://github.com/fleeto/sleep.git
  2. cd sleep/kubernetes/
  3. # 虽然客户端服务不需要提供对外服务能力, 但 "sleep.yaml" 仍然需要创建 "Service" 资源对象;
  4. # istio注入要求: 没有 "Service" 的 "Deployment" 无法被istio发现并进行操作
  5. istioctl kube-inject -f sleep.yaml | kubectl apply -f -
  6. # 验证
  7. kubectl get pod -w

4.4 验证服务

  1. # 重复获取 "http://flaskapp/env/version" 的内容;
  2. # 返回结果:"v2" 与 "v1" 结果随机出现,大约各一半
  3. kubectl exec -it sleep-5f47f5c866-9xtsf -c sleep bash
  4. bash-4.4# for i in `seq 10` ; do http --body http://flaskapp/env/version ; done

4.5 创建目标规则与默认路由

4.5.1 目标规则

  1. # 使用 Pod 标签将 "flaskapp" 服务分成两个 "subset"
  2. cat flaskapp/flaskapp-destinationrule.yaml
  3. apiVersion: networking.istio.io/v1alpha3
  4. kind: DestinationRule
  5. metadata:
  6. name: flaskapp
  7. spec:
  8. host: flaskapp
  9. subsets:
  10. - name: v1
  11. labels:
  12. version: v1
  13. - name: v2
  14. labels:
  15. version: v2

4.5.2 默认路由

建议:无论是否进行进一步的流量控制,都建议为网格中的服务创建默认的路由规则,以防发生意料之外的访问结果。

  1. # "VirtualService" 资源对象,接管对 "flaskapp" 主机名的访问,将所有流量转发到 "DestinationRule" 资源对象定义的 "v2 subset"
  2. cat flaskapp/flaskapp-default-vs-v2.yaml
  3. apiVersion: networking.istio.io/v1alpha3
  4. kind: VirtualService
  5. metadata:
  6. name: flaskapp-default-v2
  7. spec:
  8. hosts:
  9. - flaskapp
  10. http:
  11. - route:
  12. - destination:
  13. host: flaskapp
  14. subset: v2

4.5.3 验证

  1. # 重复获取 "http://flaskapp/env/version" 的内容;
  2. # 返回结果:只有 "v2" 返回,默认路由已生效
  3. kubectl exec -it sleep-5f47f5c866-9xtsf -c sleep bash
  4. bash-4.4# for i in `seq 10` ; do http --body http://flaskapp/env/version ; done

5. 总结

典型流程:注入-->部署-->创建目标规则-->创建默认路由。

原文链接:http://www.cnblogs.com/netonline/p/11611634.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号