istio部署-快速入门
参考
本文为 istio 快速入门部署,一般用于演示环境。
1. 准备工作
- k8s集群要支持istio自动注入,需要检查api server的启动参数,确保
admission control部分按顺序启用MutatingAdmissionWebhook与ValidatingAdmissionWebhook; - 通过
kube-apiserver -h | grep enable-admission-plugins查看已启用的admission control - Which plugins are enabled by default
2. 下载
# 下载1.1.7版本
wget https://github.com/istio/istio/releases/download/1.1.7/istio-1.1.7-linux.tar.gz
# 解压
tar -zxvf istio-1.1.7-linux.tar.gz
3. 实施
cd istio-1.1.7
kubectl apply -f install/kubernetes/istio-demo.yaml
# "-w" 参数用于持续查询pod状态变化;
# pod状态为 "Completed" 时, 表示执行 "Job" 留下的pod, "Completed" 状态说明 "Job" 执行成功
kubectl get pod -n istio-system -w
4. 应用示例
4.1 部署应用
git clone https://github.com/fleeto/flaskapp.git
cd flaskapp
cat flask.istio.yaml
apiVersion: v1
kind: Service
metadata:
name: flaskapp
labels:
app: flaskapp
spec:
# "selector" 仅使用1个标签,则 "Service" 对两个 "Deployment" 均有效
selector:
app: flaskapp
ports:
# 根据istio规范对端口进行命名
- name: http
port: 80
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flaskapp-v1
spec:
replicas: 1
template:
metadata:
# 两个标签,其中以不同的 "version" 标签进行区分;
# istio中通常使用这两个标签作为应用与版本的标识
labels:
app: flaskapp
version: v1
spec:
containers:
- name: flaskapp
# image一致
image: dustise/flaskapp
imagePullPolicy: Always
# 注册一个名为 "version" 的环境变量,两个应用取值不同
env:
- name: version
value: v1
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flaskapp-v2
spec:
replicas: 1
template:
metadata:
labels:
app: flaskapp
version: v2
spec:
containers:
- name: flaskapp
image: dustise/flaskapp
imagePullPolicy: Always
env:
- name: version
value: v2
# 部署应用
kubectl apply -f flask.istio.yaml
4.2 部署istio
- 使用
istioctl进行注入, 其修改Deployment, 在Pod中注入Sidecar容器; - 本节采用手工注入,实际生产环境中一般会打开pod的自动注入功能。
# 注入 "sidecar"
istioctl kube-inject -f flask.istio.yaml | kubectl apply -f -
# 查看pod
# pod中容器数量从"1"变为"2"
kubectl get pod -w
# 注入容器 "istio-proxy" ;
# 另有初始化劫持容器 "istio-init"
kubectl describe pod flaskapp-v1-66b59cdfc6-zk9sz
4.3 部署客户端服务
git clone https://github.com/fleeto/sleep.git
cd sleep/kubernetes/
# 虽然客户端服务不需要提供对外服务能力, 但 "sleep.yaml" 仍然需要创建 "Service" 资源对象;
# istio注入要求: 没有 "Service" 的 "Deployment" 无法被istio发现并进行操作
istioctl kube-inject -f sleep.yaml | kubectl apply -f -
# 验证
kubectl get pod -w
4.4 验证服务
# 重复获取 "http://flaskapp/env/version" 的内容;
# 返回结果:"v2" 与 "v1" 结果随机出现,大约各一半
kubectl exec -it sleep-5f47f5c866-9xtsf -c sleep bash
bash-4.4# for i in `seq 10` ; do http --body http://flaskapp/env/version ; done
4.5 创建目标规则与默认路由
4.5.1 目标规则
# 使用 Pod 标签将 "flaskapp" 服务分成两个 "subset"
cat flaskapp/flaskapp-destinationrule.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: flaskapp
spec:
host: flaskapp
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
4.5.2 默认路由
建议:无论是否进行进一步的流量控制,都建议为网格中的服务创建默认的路由规则,以防发生意料之外的访问结果。
# "VirtualService" 资源对象,接管对 "flaskapp" 主机名的访问,将所有流量转发到 "DestinationRule" 资源对象定义的 "v2 subset"
cat flaskapp/flaskapp-default-vs-v2.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: flaskapp-default-v2
spec:
hosts:
- flaskapp
http:
- route:
- destination:
host: flaskapp
subset: v2
4.5.3 验证
# 重复获取 "http://flaskapp/env/version" 的内容;
# 返回结果:只有 "v2" 返回,默认路由已生效
kubectl exec -it sleep-5f47f5c866-9xtsf -c sleep bash
bash-4.4# for i in `seq 10` ; do http --body http://flaskapp/env/version ; done
5. 总结
典型流程:注入-->部署-->创建目标规则-->创建默认路由。
istio部署-快速入门的更多相关文章
- JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署
接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...
- ELK快速入门(一)基本部署
ELK快速入门一-基本部署 ELK简介 什么是ELK?通俗来讲,ELK是由Elasticsearch.Logstash.Kibana 三个开源软件组成的一个组合体,这三个软件当中,每个软件用于完成不同 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- HTML5快速入门(三)—— 标签综合运用
前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...
- OpenStack云计算快速入门之一:OpenStack及其构成简介
原文:http://blog.chinaunix.net/uid-22414998-id-3263551.html OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助 ...
- [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门
一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到SignalR技术,所以打算总结下Asp.net ...
- Hello, Android 快速入门
Hello, Android Android 开发与 Xamarin 简介 在这两节指南中,我们将 (使用 Xamarin Studio或 Visual Studio)建立我们的第一个 Xamarin ...
- Yacc 与 Lex 快速入门
Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 Lex 和 Yacc 是 UNIX 两个非常重要的.功能强大的工具.事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 ...
- ThinkPHP快速入门
ThinkPHP快速入门 1.ThinkPHP自动生成 当我们部署完ThinkPHP框架后,其会自动生成Application文件夹,如下图所示: 2.自动生成细节分析 问题1:Application ...
随机推荐
- gulp中常用的模块
gulp-cssmin: css压缩 gulp-uglify: js压缩混淆 gulp-imagemin: 图片压缩 gulp-htmlmin: html压缩 gulp-concat: 文件合并 g ...
- 用NABCD法提出靠谱的项目建议
在项目中提出靠谱的建议,一方面能提高项目成功的概率,另一方面锻炼自己能力提升自己在项目中的影响力,所以我们要尽可能抓住机会在项目中提建议.那要如何提出靠谱的建议呢?从需求出发,明确做法和好处,分析竞争 ...
- appium--解决每次安装appium setting和Unlock
前戏 每次启动appium进行自动化的时候,都会提示我们需要安装appium setting和Unlock,而且还都要手动确认 那这两个文件是做什么的呢? Appium settings:用于设置网络 ...
- JAVA SE11环境变量配置(Windows)
附上:03. 安装环境:Windows · IntelliJ IDEA Tutorial 附上:使用调试功能进行 Java debug 附上:Linux(Deepin)下配置java8 - L1412 ...
- flutter RN taro选型思考
当前RN已经成熟,但是依赖于大平台(JD.携程),小公司想开箱即用还是有困难的 纯Flutter还远未成熟,更多的是和原生进行混合 但是作为个体又想要在某一个点切入市场,就是需要作选择,基于当下及未来 ...
- Github配置SSH密钥
设置SSH Key Github上连接已有仓库时的认证,是通过使用SSH的公开密钥 在终端terminal中输入 ssh-keygen 该命令的含义是 generate ssh key, 然后一直按回 ...
- Linux 安装Mysql1.8【yum安装】
.下载mysql的yum源 wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm2.安装yum源yum lo ...
- 1小时搞定vuepress快速制作vue文档/博客+免费部署预览
先来一下演示效果.和vue的官方文档几乎是一致的,页面内容都可自定义. 此教程部署后的效果预览. 在你跟着教程搭建好项目之后,你会收获: 快速搭建一个文档/博客,后期只需要修改markdown内容和导 ...
- 一般处理程序Session
1.要在一般处理程序中获取其他页面的session值,需要引用名空间: using System.Web.SessionState; 2.然后继承一个接口:IRequiresSessionState ...
- jdk8 接口的变化
在jdk8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的.由于这些修饰符都是默认的以下写法等价 publ ...