istio1.0 实现蓝绿发布

环境:

192.168.0.91   master

192.168.0.92   node

第一步:安装k8s集群,参照:https://www.cnblogs.com/effortsing/p/10312081.html

第二步:安装 istio1.0 参照:https://www.cnblogs.com/effortsing/p/10603392.html

第三步:部署同一个应用的两个版本

我们构建了简单的基于Nginx的Docker镜像来作为应用案例:janakiramm/myapp:v1和janakiramm/myapp:v2。

部署完成之后,这两个版本的Nginx会分别显示蓝色或者绿色背景的静态页面。我们用这些图像来完成我们的教程

cat>myapp.yaml<<EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapp-v1
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
version: v1
spec:
containers:
- name: myapp
image: janakiramm/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myapp-v2
spec:
replicas: 1
template:
metadata:
labels:
app: myapp
version: v2
spec:
containers:
- name: myapp
image: janakiramm/myapp:v2
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: myapp
labels:
app: myapp
spec:
type: ClusterIP
ports:
- port: 80
name: http
selector:
app: myapp
EOF 我们先从创建YAML文件开始,来定义V1和V2版本Nginx的部署,同时也设置集群IP把服务暴露出来。请注意我们用不同的标签来区分Pods——app和版本。因为两次部署的版本号不一样,app名字可以相同。 这是Istio所希望的,像单一的app那样处理它们,用不同的个版本来区分。 集群的服务定义也是一样的,标签app: myapp关联了基于不同版本所创建的Pod。 通过kubectl来创建deployment和service。注意deployment和service是Kubernetes的相关术语,和Istio没有关系。唯一和Istio的关联是我们为deployment和service创建标签的方式 kubectl apply -f myapp.yaml [root@test2 ~]# kubectl apply -f myapp.yaml
deployment.extensions/myapp-v1 created
deployment.extensions/myapp-v2 created
service/myapp created [root@test2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-v1-58c55dbfb6-lcvzq 1/1 Running 0 48s
myapp-v2-5c8c686fc6-4v4mn 1/1 Running 0 48s [root@test2 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22d
myapp ClusterIP 10.100.239.218 <none> 80/TCP 4m 配置Istio之前,我们先来检查一下app的版本。我们可以通过port-forward deployments访问Pod。通过运行下面的命令访问V1的8080端口。准备好CTRL+C kubectl port-forward deployment/myapp-v1 8080:80 访问: 可以看到下面的访问结果中倒数第5行是nignx的V1版本 [root@test2 ~]# curl http://10.100.239.218:80
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sample Deployment</title>
<style>
body {
color: #ffffff;
background-color: blue;
font-family: Arial, sans-serif;
font-size: 14px;
} h1 {
font-size: 500%;
font-weight: normal;
margin-bottom: 0;
} h2 {
font-size: 200%;
font-weight: normal;
margin-bottom: 0;
}
</style>
</head>
<body>
<div align="center">
<h1>Welcome to V1 of the web application</h1>
<h2>This application will be deployed on Kubernetes.</h2>
</div>
</body>
</html> 运行下面的命令访问V2的8081端口,继续CTRL+C kubectl port-forward deployment/myapp-v2 8081:80 访问: 可以看到下面的访问结果中倒数第5行是nignx的vNext版本 [root@test2 ~]# curl http://10.100.239.218:80
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sample Deployment</title>
<style>
body {
color: #ffffff;
background-color: green;
font-family: Arial, sans-serif;
font-size: 14px;
} h1 {
font-size: 500%;
font-weight: normal;
margin-bottom: 0;
} h2 {
font-size: 200%;
font-weight: normal;
margin-bottom: 0;
}
</style>
</head>
<body>
<div align="center">
<h1>Welcome to vNext of the web application</h1>
<h2>This application will be deployed on Kubernetes.</h2>
</div>
</body>
</html> 第四步:配置蓝绿部署 我们的实验目标是让流量有选择的访问某一个部署,而且不能有服务停止。为了达到这目的,我们要告诉Istio依照权重来路由流量 为了达到这个效果我们需要设置三个对象: 网关 Istio网关描述了在网格边界的负载均衡器如何处理进出的HTTP/TCP连接。着重描述了哪些端口应该被暴露出来,有哪些协议可以用,负载均衡器的SNI配置等等。 接下来,我们把网关指向默认的Ingress网关,它在Istio安装的时候就被创建出来了 创建网关: cat>apigatway.yaml<<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: app-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
EOF kubectl create -f apigatway.yaml 报错如下:(暂时不做了) [root@test2 ~]# kubectl create -f apigatway.yaml
Error from server (Timeout): error when creating "apigatway.yaml": Timeout: request did not complete within allowed duration 目的地规则 Istio目的地规则定义了流量被路由以后访问服务的规则。请注意在Kubernete中这个规则是如何利用标签来声明的。 apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: myapp
spec:
host: myapp
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2 虚拟服务 虚拟服务定义了当主机获得地址以后一系列流量的路由规则。每一条路由规则都定义了某个基于特定协议的流量的匹配规则。当一个流量被匹配了,基于版本,它会被发送到相关的目标服务 在下面的操作中,我们声明了V1和V2的权重都为50,这就意味着流量会被平均分配 apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: myapp
spec:
hosts:
- "*"
gateways:
- app-gateway
http:
- route:
- destination:
host: myapp
subset: v1
weight: 50
- destination:
host: myapp
subset: v2
weight: 50 参照:http://dockone.io/article/8297 https://it.baiked.com/kubernetes/3444.html(未做成) https://blog.csdn.net/qq_33093199/article/details/51397628(解决报错的) https://blog.csdn.net/liukuan73/article/details/81165716 http://blog.itpub.net/28624388/viewspace-2199899/ http://blog.itpub.net/28624388/viewspace-2199899/ https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/81571517 https://istio.io/docs/setup/kubernetes/additional-setup/sidecar-injection/ (官网这个简单的sleep实例都做不成)

istio1.0 实现蓝绿发布(未完成)的更多相关文章

  1. 附032.Kubernetes实现蓝绿发布

    蓝绿发布原理 蓝绿发布本质上是希望能优雅无误的迭代应用,以便于使应用平稳提供服务.通常是不停老版本的同时对新版本进行先发布,然后确认无误后进行流量切换,即并行部署. Kubernetes中可以通过de ...

  2. 一文读懂蓝绿发布、A/B 测试和金丝雀发布的优缺点

    作者 | 扬少 背景 目前,业界已经总结出了几种常见的服务发布策略来解决版本升级过程中带来的流量有损问题.本文首先会对这些普遍的发布策略进行简单的原理解析,最后结合阿里云的云原生网关对这些发布策略进行 ...

  3. 持续部署入门:基于 Kubernetes 实现蓝绿发布

    前言 软件世界比以往任何时候都更快.为了保持竞争力,需要尽快推出新的软件版本,而不会中断活跃用户访问,影响用户体验.越来越多企业已将其应用迁移到 Kubernetes. 在 Kubernetes 中有 ...

  4. 手把手教你在 TKE 集群中实现简单的蓝绿发布和灰度发布

    概述 如何在腾讯云 Kubernetes 集群实现蓝绿发布和灰度发布?通常要向集群额外部署其它开源工具来实现,比如 Nginx Ingress,Traefik 等,或者让业务上 Service Mes ...

  5. 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别(转)

    出处:https://www.baidu.com/link?url=QjboallwNm_jxcL3fHG57wEakiBfAs_3-TChTGu1eBXstlHEsGBc-NDA7AKTqsiroB ...

  6. 蓝 / 绿部署(Blue/Green) 金丝雀发布(Canary Release) 功能标记(Feature Flagging)

    https://www.cnblogs.com/apanly/p/8784096.html 最终,我选择了 GraphQL 作为企业 API 网关 蓝 / 绿部署(Blue/Green) 金丝雀发布( ...

  7. Contour 学习笔记(二):使用级联功能实现蓝绿部署和金丝雀发布

    上篇文章介绍了 Contour 分布式架构的工作原理,顺便简单介绍了下 IngressRoute 的使用方式.本文将探讨 IngressRoute 更高级的用法,其中级联功能是重点. 1. Ingre ...

  8. 蓝绿部署、A/B测试以及灰度发布(金丝雀发布)

    过去的10多年里,很多大公司都在使用蓝绿部署,安全.可靠是这种部署方式的特点.蓝绿部署虽然算不上”Sliver Bullet“,但确实很实用.在有关于“微服务”.“DevOps”.“Cloud-nat ...

  9. 蓝绿部署、金丝雀发布(灰度发布)、A/B测试

    本文转载自蓝绿部署.金丝雀发布(灰度发布).A/B测试的准确定义 概述 蓝绿部署.A/B测试.金丝雀发布,以及灰度发布.流量切分等,经常被混为一谈,影响沟通效率. 根本原因是这些名词经常出现,人们耳熟 ...

随机推荐

  1. 基线baseline

    vertical:元素的垂直对齐方式:默认 vertical:baseline ,一行内对其基线,如下图就是以父元素基线对齐,上图vertical:top 垂直对齐方式,行内元素头部对齐.

  2. Spring Cloud 组件 —— gateway

    Spring Cloud 网关主要有三大模块:route.predicates.filters 其中 filter 最为关键,是功能增强的核心组件. 列举出一些功能组件: 5.6 CircuitBre ...

  3. BZOJ-1042:硬币购物(背包+容斥)

    题意:硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. 思路:这么老的题,居然今天才做到. ...

  4. ubuntu18docker下安装MySQL

    sudo docker run –name mysqldb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root-d mysql:latest 这里的容器名字叫:mysql ...

  5. python连接redis哨兵集群

    一.redis集群模式有多种, 哨兵模式只是其中的一种实现方式, 其原理请自行谷歌或者百度 二.python 连接 redis 哨兵集群 1. 安装redis包 pip install redis 2 ...

  6. 关于defer.promise.then 异步的一个疑问 | 用柯里化做promise | 用递归做promise

    疑问:感觉会报错,因为执行到defer.promise.then这时候还没到defer.resolve,因为异步读文件,总归会慢 解答:先执行defer.promise.then,是给callback ...

  7. 67-Flutter中高德地图插件的使用

    1.注册和建立高德API应用 高德网站:https://lbs.amap.com/ 控制台-应用管理-创建应用 在创建 Key 2.获得SHA1 进入Flutter项目中的android文件夹内,打开 ...

  8. JavaScript基础08——DOM

    DOM的概念 DOM是document Object Model的缩写,简称文档对象模型.他给文档提供了一种结构化的表示方式,可以改变文档的内容和呈现方式 所谓的DOM是以家族的形式描述HTML.父子 ...

  9. luoguP4169 [Violet]天使玩偶/SJY摆棋子 K-Dtree

    P4169 [Violet]天使玩偶/SJY摆棋子 链接 luogu 思路 luogu以前用CDQ一直过不去. bzoj还是卡时过去的. 今天终于用k-dtree给过了. 代码 #include &l ...

  10. CSS注册页面案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...