女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Kubernete實(shí)現(xiàn)應(yīng)用的藍(lán)綠部署

馬哥Linux運(yùn)維 ? 來(lái)源:稀土掘金 ? 作者:chulinx ? 2022-08-20 14:57 ? 次閱讀

背景介紹

某些情況下,我們?cè)谑褂肒ubernetes作為業(yè)務(wù)應(yīng)用的云平臺(tái),想要實(shí)現(xiàn)應(yīng)用的藍(lán)綠部署用來(lái)迭代應(yīng)用版本,用lstio太重太復(fù)雜,而且它本身定位于流控和網(wǎng)格治理;Ingress-Nginx在0.21版本引入了Canary功能,可以為網(wǎng)關(guān)入口配置多個(gè)版本的應(yīng)用程序,使用annotation來(lái)控制多個(gè)后端服務(wù)的流量分配。

Ingress-Nginx-Annotation Canary 功能介紹

如果想啟用Canary功能,要先設(shè)置nginx.ingress.kubernetes.io/canary: "true",然后可以啟用以下注釋來(lái)配置Canary

nginx.ingress.kubernetes.io/canary-weight 請(qǐng)求到Canary ingress中指定的服務(wù)的請(qǐng)求百分比,值為0-100的整數(shù),根據(jù)設(shè)置的值來(lái)決定大概有百分之多少的流量會(huì)分配Canary Ingress中指定的后端s服務(wù)

nginx.ingress.kubernetes.io/canary-by-header 基于request header 的流量切分,適用于灰度發(fā)布或者A/B測(cè)試,當(dāng)設(shè)定的hearder值為always是,請(qǐng)求流量會(huì)被一直分配到Canary入口,當(dāng)hearder值被設(shè)置為never時(shí),請(qǐng)求流量不會(huì)分配到Canary入口,對(duì)于其他hearder值,將忽略,并通過(guò)優(yōu)先級(jí)將請(qǐng)求流量分配到其他規(guī)則

nginx.ingress.kubernetes.io/canary-by-header-value 這個(gè)配置要和nginx.ingress.kubernetes.io/canary-by-header 一起使用,當(dāng)請(qǐng)求中的hearder key和value 和nginx.ingress.kubernetes.io/canary-by-header nginx.ingress.kubernetes.io/canary-by-header-value匹配時(shí),請(qǐng)求流量會(huì)被分配到Canary Ingress入口,對(duì)于其他任何hearder值,將忽略,并通過(guò)優(yōu)先級(jí)將請(qǐng)求流量分配到其他規(guī)則

nginx.ingress.kubernetes.io/canary-by-cookie 這個(gè)配置是基于cookie的流量切分,也適用于灰度發(fā)布或者A/B測(cè)試,當(dāng)cookie值設(shè)置為always時(shí),請(qǐng)求流量將被路由到Canary Ingress入口,當(dāng)cookie值設(shè)置為never時(shí),請(qǐng)求流量將不會(huì)路由到Canary入口,對(duì)于其他值,將忽略,并通過(guò)優(yōu)先級(jí)將請(qǐng)求流量分配到其他規(guī)則

金絲雀規(guī)則按優(yōu)先順序進(jìn)行如下排序:canary-by-header - > canary-by-cookie - > canary-weight

基于權(quán)重的小規(guī)模版本測(cè)試

v1版本編排文件

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
labels:
app:echoserverv1
name:echoserverv1
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv1
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv1
namespace:echoserver
spec:
selector:
name:echoserverv1
type:ClusterIP
ports:
-name:echoserverv1
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv1
namespace:echoserver
labels:
name:echoserverv1
spec:
template:
metadata:
labels:
name:echoserverv1
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv1
ports:
-containerPort:8080
name:echoserverv1

查看v1版本創(chuàng)建的資源

$[K8sSj]kubectlgetpod,service,ingress-nechoserver
NAMEREADYSTATUSRESTARTSAGE
pod/echoserverv1-657b966cb5-7grqs1/1Running024h

NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
service/echoserverv1ClusterIP10.99.68.728080/TCP24h

NAMEHOSTSADDRESSPORTSAGE
ingress.extensions/echoserverv1echo.chulinx.com8024h

訪問(wèn)v1的服務(wù),可以看到10個(gè)請(qǐng)求都是訪問(wèn)到一個(gè)pod上也就是v1版本的服務(wù)

$[K8sSj]foriin`seq10`;docurl-secho.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs

創(chuàng)建v2版本的服務(wù)

我們開(kāi)啟canary功能,將v2版本的權(quán)重設(shè)置為50%,這個(gè)百分比并不能精確的將請(qǐng)求平均分配到兩個(gè)版本的服務(wù),而是在50%上下浮動(dòng)

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
nginx.ingress.kubernetes.io/canary:"true"
nginx.ingress.kubernetes.io/canary-weight:"50"
labels:
app:echoserverv2
name:echoserverv2
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv2
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv2
namespace:echoserver
spec:
selector:
name:echoserverv2
type:ClusterIP
ports:
-name:echoserverv2
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv2
namespace:echoserver
labels:
name:echoserverv2
spec:
template:
metadata:
labels:
name:echoserverv2
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv2
ports:
-containerPort:8080
name:echoserverv2

創(chuàng)建v2版本的服務(wù)

我們開(kāi)啟canary功能,將v2版本的權(quán)重設(shè)置為50%,這個(gè)百分比并不能精確的將請(qǐng)求平均分配到兩個(gè)版本的服務(wù),而是在50%上下浮動(dòng)

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
nginx.ingress.kubernetes.io/canary:"true"
nginx.ingress.kubernetes.io/canary-weight:"50"
labels:
app:echoserverv2
name:echoserverv2
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv2
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv2
namespace:echoserver
spec:
selector:
name:echoserverv2
type:ClusterIP
ports:
-name:echoserverv2
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv2
namespace:echoserver
labels:
name:echoserverv2
spec:
template:
metadata:
labels:
name:echoserverv2
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv2
ports:
-containerPort:8080
name:echoserverv2

再次查看創(chuàng)建的資源

$[K8sSj]kubectlgetpod,service,ingress-nechoserver
NAMEREADYSTATUSRESTARTSAGE
pod/echoserverv1-657b966cb5-7grqs1/1Running024h
pod/echoserverv2-856bb5758-f9tqn1/1Running04s

NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE
service/echoserverv1ClusterIP10.99.68.728080/TCP24h
service/echoserverv2ClusterIP10.111.103.1708080/TCP4s

NAMEHOSTSADDRESSPORTSAGE
ingress.extensions/echoserverv1echo.chulinx.com8024h
ingress.extensions/echoserverv2echo.chulinx.com804s

訪問(wèn)測(cè)試

可以看到請(qǐng)求有4個(gè)落到v2版本,6個(gè)落到v1版本,理論上來(lái)說(shuō),請(qǐng)求說(shuō)越多,落到v2版本的請(qǐng)求數(shù)越接近設(shè)置的權(quán)重50%

$[K8sSj]foriin`seq10`;docurl-secho.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs

基于header的A/B測(cè)試

更改v2版本的編排文件

增加headernginx.ingress.kubernetes.io/canary-by-header: "v2"

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
nginx.ingress.kubernetes.io/canary:"true"
nginx.ingress.kubernetes.io/canary-weight:"50"
nginx.ingress.kubernetes.io/canary-by-header:"v2"
labels:
app:echoserverv2
name:echoserverv2
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv2
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv2
namespace:echoserver
spec:
selector:
name:echoserverv2
type:ClusterIP
ports:
-name:echoserverv2
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv2
namespace:echoserver
labels:
name:echoserverv2
spec:
template:
metadata:
labels:
name:echoserverv2
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv2
ports:
-containerPort:8080
name:echoserverv2

更新訪問(wèn)測(cè)試

測(cè)試了header 為v2:always v2:never v2:true這三個(gè)hearder值,可以看到當(dāng)hearder為v2:always時(shí),流量會(huì)全部流入v2,當(dāng)v2:never時(shí),流量會(huì)全部流入v1,當(dāng)v2:true時(shí),也就是非always/never,流量會(huì)按照配置的權(quán)重流入對(duì)應(yīng)版本的服務(wù)

$[K8sSj]kubectlapply-fappv2.yml
ingress.extensions/echoserverv2configured
service/echoserverv2unchanged
deployment.extensions/echoserverv2unchanged
$[K8sSj]foriin`seq10`;docurl-s-H"v2:always"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
$[K8sSj]foriin`seq10`;docurl-s-H"v2:never"echo.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
$[K8sSj]foriin`seq10`;docurl-s-H"v2:true"echo.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn

自定義header-value

apiVersion:extensions/v1beta1
kind:Ingress
metadata:
annotations:
kubernetes.io/ingress.class:nginx
nginx.ingress.kubernetes.io/canary:"true"
nginx.ingress.kubernetes.io/canary-weight:"50"
nginx.ingress.kubernetes.io/canary-by-header:"v2"
nginx.ingress.kubernetes.io/canary-by-header-value:"true"
labels:
app:echoserverv2
name:echoserverv2
namespace:echoserver
spec:
rules:
-host:echo.chulinx.com
http:
paths:
-backend:
serviceName:echoserverv2
servicePort:8080
path:/
---
kind:Service
apiVersion:v1
metadata:
name:echoserverv2
namespace:echoserver
spec:
selector:
name:echoserverv2
type:ClusterIP
ports:
-name:echoserverv2
port:8080
targetPort:8080
---
apiVersion:extensions/v1beta1
kind:Deployment
metadata:
name:echoserverv2
namespace:echoserver
labels:
name:echoserverv2
spec:
template:
metadata:
labels:
name:echoserverv2
spec:
containers:
-image:mirrorgooglecontainers/echoserver:1.10
name:echoserverv2
ports:
-containerPort:8080
name:echoserverv2

更新測(cè)試

可以看到只有header為v2:never時(shí),請(qǐng)求流量才會(huì)流入v2版本,其他值流量都會(huì)按照權(quán)重設(shè)置流入不同版本的服務(wù)

$[K8sSj]kubectlapply-fappv2.yml
ingress.extensions/echoserverv2configured
service/echoserverv2unchanged
deployment.extensions/echoserverv2unchanged

$[K8sSj]foriin`seq10`;docurl-s-H"v2:true"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

$[K8sSj]foriin`seq10`;docurl-s-H"v2:always"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

$[K8sSj]foriin`seq10`;docurl-s-H"v2:never"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs

訪問(wèn)測(cè)試

可以看和header的訪問(wèn)效果是一樣的,只不過(guò)cookie不能自定義value

$[K8sSj]kubectlapply-fappv2.yml
ingress.extensions/echoserverv2configured
service/echoserverv2unchanged
deployment.extensions/echoserverv2unchanged

$[K8sSj]foriin`seq10`;docurl-s--cookie"user_from_shanghai"echo.chulinx.com|grepHostname;done
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

#zlx@zlxdeMacBook-Proin~/Desktop/unicom/k8syml/nginx-ingress-canary-deployment[1652]
$[K8sSj]foriin`seq10`;docurl-s--cookie"user_from_shanghai:always"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv1-657b966cb5-7grqs
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

#zlx@zlxdeMacBook-Proin~/Desktop/unicom/k8syml/nginx-ingress-canary-deployment[1625]
$[K8sSj]foriin`seq10`;docurl-s--cookie"user_from_shanghai=always"echo.chulinx.com|grepHostname;done
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn
Hostname:echoserverv2-856bb5758-f9tqn

總結(jié)

灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以對(duì)新版本進(jìn)行測(cè)試、發(fā)現(xiàn)和調(diào)整問(wèn)題,以保證其影響度,以上內(nèi)容通過(guò)實(shí)例詳細(xì)介紹了Ingress-Nginx的實(shí)戰(zhàn)Canary Annotation,可以借助Ingress-Nginx輕松實(shí)現(xiàn)藍(lán)綠發(fā)布和金絲雀發(fā)布

其他

藍(lán)綠發(fā)布

藍(lán)綠部署中,一共有兩套系統(tǒng):一套是正在提供服務(wù)系統(tǒng),標(biāo)記為“綠色”;另一套是準(zhǔn)備發(fā)布的系統(tǒng),標(biāo)記為“藍(lán)色”。兩套系統(tǒng)都是功能完善的,并且正在運(yùn)行的系統(tǒng),只是系統(tǒng)版本和對(duì)外服務(wù)情況不同。

最初,沒(méi)有任何系統(tǒng),沒(méi)有藍(lán)綠之分。

然后,第一套系統(tǒng)開(kāi)發(fā)完成,直接上線,這個(gè)過(guò)程只有一個(gè)系統(tǒng),也沒(méi)有藍(lán)綠之分。

后來(lái),開(kāi)發(fā)了新版本,要用新版本替換線上的舊版本,在線上的系統(tǒng)之外,搭建了一個(gè)使用新版本代碼的全新系統(tǒng)。這時(shí)候,一共有兩套系統(tǒng)在運(yùn)行,正在對(duì)外提供服務(wù)的老系統(tǒng)是綠色系統(tǒng),新部署的系統(tǒng)是藍(lán)色系統(tǒng)。

藍(lán)色系統(tǒng)不對(duì)外提供服務(wù),用來(lái)做啥?

用來(lái)做發(fā)布前測(cè)試,測(cè)試過(guò)程中發(fā)現(xiàn)任何問(wèn)題,可以直接在藍(lán)色系統(tǒng)上修改,不干擾用戶正在使用的系統(tǒng)。(注意,兩套系統(tǒng)沒(méi)有耦合的時(shí)候才能百分百保證不干擾)

藍(lán)色系統(tǒng)經(jīng)過(guò)反復(fù)的測(cè)試、修改、驗(yàn)證,確定達(dá)到上線標(biāo)準(zhǔn)之后,直接將用戶切換到藍(lán)色系統(tǒng):

切換后的一段時(shí)間內(nèi),依舊是藍(lán)綠兩套系統(tǒng)并存,但是用戶訪問(wèn)的已經(jīng)是藍(lán)色系統(tǒng)。這段時(shí)間內(nèi)觀察藍(lán)色系統(tǒng)(新系統(tǒng))工作狀態(tài),如果出現(xiàn)問(wèn)題,直接切換回綠色系統(tǒng)。

當(dāng)確信對(duì)外提供服務(wù)的藍(lán)色系統(tǒng)工作正常,不對(duì)外提供服務(wù)的綠色系統(tǒng)已經(jīng)不再需要的時(shí)候,藍(lán)色系統(tǒng)正式成為對(duì)外提供服務(wù)系統(tǒng),成為新的綠色系統(tǒng)。原先的綠色系統(tǒng)可以銷(xiāo)毀,將資源釋放出來(lái),用于部署下一個(gè)藍(lán)色系統(tǒng)。

藍(lán)綠部署只是上線策略中的一種,它不是可以應(yīng)對(duì)所有情況的萬(wàn)能方案。藍(lán)綠部署能夠簡(jiǎn)單快捷實(shí)施的前提假設(shè)是目標(biāo)系統(tǒng)是非常內(nèi)聚的,如果目標(biāo)系統(tǒng)相當(dāng)復(fù)雜,那么如何切換、兩套系統(tǒng)的數(shù)據(jù)是否需要以及如何同步等,都需要仔細(xì)考慮。

金絲雀發(fā)布

金絲雀發(fā)布(Canary)也是一種發(fā)布策略,和國(guó)內(nèi)常說(shuō)的灰度發(fā)布是同一類(lèi)策略。藍(lán)綠部署是準(zhǔn)備兩套系統(tǒng),在兩套系統(tǒng)之間進(jìn)行切換,金絲雀策略是只有一套系統(tǒng),逐漸替換這套系統(tǒng)

譬如說(shuō),目標(biāo)系統(tǒng)是一組無(wú)狀態(tài)的Web服務(wù)器,但是數(shù)量非常多,假設(shè)有一萬(wàn)臺(tái)。

這時(shí)候,藍(lán)綠部署就不能用了,因?yàn)槟悴豢赡苌暾?qǐng)一萬(wàn)臺(tái)服務(wù)器專(zhuān)門(mén)用來(lái)部署藍(lán)色系統(tǒng)(在藍(lán)綠部署的定義中,藍(lán)色的系統(tǒng)要能夠承接所有訪問(wèn))。

可以想到的一個(gè)方法是:

只準(zhǔn)備幾臺(tái)服務(wù)器,在上面部署新版本的系統(tǒng)并測(cè)試驗(yàn)證。測(cè)試通過(guò)之后,擔(dān)心出現(xiàn)意外,還不敢立即更新所有的服務(wù)器。先將線上的一萬(wàn)臺(tái)服務(wù)器中的10臺(tái)更新為最新的系統(tǒng),然后觀察驗(yàn)證。確認(rèn)沒(méi)有異常之后,再將剩余的所有服務(wù)器更新。

這個(gè)方法就是金絲雀發(fā)布。

實(shí)際操作中還可以做更多控制,譬如說(shuō),給最初更新的10臺(tái)服務(wù)器設(shè)置較低的權(quán)重、控制發(fā)送給這10臺(tái)服務(wù)器的請(qǐng)求數(shù),然后逐漸提高權(quán)重、增加請(qǐng)求數(shù)。

這個(gè)控制叫做“流量切分”,既可以用于金絲雀發(fā)布,也可以用于后面的A/B測(cè)試。

藍(lán)綠部署和金絲雀發(fā)布是兩種發(fā)布策略,都不是萬(wàn)能的。有時(shí)候兩者都可以使用,有時(shí)候只能用其中一種。

A/B測(cè)試

首先需要明確的是,A/B測(cè)試和藍(lán)綠部署以及金絲雀,完全是兩回事。

藍(lán)綠部署和金絲雀是發(fā)布策略,目標(biāo)是確保新上線的系統(tǒng)穩(wěn)定,關(guān)注的是新系統(tǒng)的BUG、隱患。

A/B測(cè)試是效果測(cè)試,同一時(shí)間有多個(gè)版本的服務(wù)對(duì)外服務(wù),這些服務(wù)都是經(jīng)過(guò)足夠測(cè)試,達(dá)到了上線標(biāo)準(zhǔn)的服務(wù),有差異但是沒(méi)有新舊之分(它們上線時(shí)可能采用了藍(lán)綠部署的方式)。

A/B測(cè)試關(guān)注的是不同版本的服務(wù)的實(shí)際效果,譬如說(shuō)轉(zhuǎn)化率、訂單情況等。

A/B測(cè)試時(shí),線上同時(shí)運(yùn)行多個(gè)版本的服務(wù),這些服務(wù)通常會(huì)有一些體驗(yàn)上的差異,譬如說(shuō)頁(yè)面樣式、顏色、操作流程不同。相關(guān)人員通過(guò)分析各個(gè)版本服務(wù)的實(shí)際效果,選出效果最好的版本。

在A/B測(cè)試中,需要能夠控制流量的分配,譬如說(shuō),為A版本分配10%的流量,為B版本分配10%的流量,為C版本分配80%的流量。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 網(wǎng)關(guān)
    +關(guān)注

    關(guān)注

    9

    文章

    5467

    瀏覽量

    52642
  • 控制
    +關(guān)注

    關(guān)注

    5

    文章

    1023

    瀏覽量

    123625
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    242

    瀏覽量

    9011

原文標(biāo)題:使用 Kubernetes Ingress-Nginx 實(shí)現(xiàn)藍(lán)綠、灰度發(fā)布!你會(huì)用了嗎?

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    邊緣AI實(shí)現(xiàn)的核心環(huán)節(jié):硬件選擇和模型部署

    邊緣AI的實(shí)現(xiàn)原理是將人工智能算法和模型部署到靠近數(shù)據(jù)源的邊緣設(shè)備上,使這些設(shè)備能夠在本地進(jìn)行數(shù)據(jù)處理、分析和決策,而無(wú)需將數(shù)據(jù)傳輸?shù)竭h(yuǎn)程的云端服務(wù)器。邊緣AI的實(shí)現(xiàn)旨在將人工智能能力下沉到邊緣設(shè)備
    的頭像 發(fā)表于 06-19 12:19 ?289次閱讀
    邊緣AI<b class='flag-5'>實(shí)現(xiàn)</b>的核心環(huán)節(jié):硬件選擇和模型<b class='flag-5'>部署</b>

    HarmonyOS5云服務(wù)技術(shù)分享--Serverless抽獎(jiǎng)模板部署

    通過(guò)endCallback實(shí)現(xiàn)中獎(jiǎng)消息推送 ? ??安全加固?? 非免認(rèn)證模式下建議: 添加請(qǐng)求頻率限制 使用HTTPS加密回調(diào) 用戶ID做哈希處理 五、常見(jiàn)問(wèn)題QA ? 部署后訪問(wèn)顯示空白
    發(fā)表于 05-22 20:25

    凱米斯科技BGA-406在線藍(lán)綠藻傳感器:守護(hù)水體生態(tài)的科技先鋒

    在當(dāng)今全球水資源面臨嚴(yán)峻挑戰(zhàn)的時(shí)代,水體富營(yíng)養(yǎng)化問(wèn)題日益凸顯,藍(lán)綠藻水華頻繁爆發(fā),對(duì)生態(tài)環(huán)境、飲用水安全以及水產(chǎn)養(yǎng)殖業(yè)造成了巨大威脅。為了有效監(jiān)測(cè)和應(yīng)對(duì)這一問(wèn)題,凱米斯科技憑借其在水環(huán)境監(jiān)測(cè)領(lǐng)域
    的頭像 發(fā)表于 05-21 10:26 ?135次閱讀
    凱米斯科技BGA-406在線<b class='flag-5'>藍(lán)綠</b>藻傳感器:守護(hù)水體生態(tài)的科技先鋒

    如何利用RAKsmart服務(wù)器實(shí)現(xiàn)高效多站點(diǎn)部署方案

    利用RAKsmart服務(wù)器實(shí)現(xiàn)高效多站點(diǎn)部署方案,需結(jié)合其網(wǎng)絡(luò)優(yōu)勢(shì)、彈性資源管理和合理的架構(gòu)設(shè)計(jì)。以下是分步實(shí)施方案,涵蓋網(wǎng)絡(luò)優(yōu)化、資源分配、數(shù)據(jù)管理及監(jiān)控等核心環(huán)節(jié),主機(jī)推薦小編為您整理發(fā)布如何利用RAKsmart服務(wù)器實(shí)現(xiàn)
    的頭像 發(fā)表于 05-19 10:38 ?114次閱讀

    如何在RAKsmart服務(wù)器上實(shí)現(xiàn)企業(yè)AI模型部署

    AI模型的訓(xùn)練與部署需要強(qiáng)大的算力支持、穩(wěn)定的網(wǎng)絡(luò)環(huán)境和專(zhuān)業(yè)的技術(shù)管理。RAKsmart作為全球領(lǐng)先的服務(wù)器托管與云計(jì)算服務(wù)提供商,已成為企業(yè)部署AI模型的理想選擇。那么,如何在RAKsmart服務(wù)器上實(shí)現(xiàn)企業(yè)AI模型的
    的頭像 發(fā)表于 03-27 09:46 ?455次閱讀

    【幸狐Omni3576邊緣計(jì)算套件試用體驗(yàn)】DeepSeek 部署及測(cè)試

    【幸狐 Omni3576 邊緣計(jì)算套件測(cè)評(píng)】DeepSeek 部署及測(cè)試 本文介紹了幸狐 Omni3576 邊緣計(jì)算套件實(shí)現(xiàn) DeepSeek 部署及測(cè)試的相關(guān)流程,包括模型介紹、部署
    發(fā)表于 03-21 19:31

    MSP430部署

    MSP430可以部署簡(jiǎn)單的模型嗎
    發(fā)表于 03-16 19:29

    K230D部署模型失敗的原因?

    重現(xiàn)步驟 1.按照教程實(shí)現(xiàn)MicroPython 版本部署流程,連接上并將文件放到對(duì)應(yīng)位置后,剛運(yùn)行就斷開(kāi)和canmv ide的連接了(此時(shí)用的固件版本是圖中推薦的K230D_Zero...
    發(fā)表于 03-11 06:19

    yolov5轉(zhuǎn)onnx在cubeAI進(jìn)行部署部署失敗的原因?

    第一個(gè)我是轉(zhuǎn)onnx時(shí) 想把權(quán)重文件變小點(diǎn) 就用了半精度 --half,則說(shuō)17版本不支持半精度 后面則是沒(méi)有縮小的單精度 但是顯示哪里溢出了···· 也不說(shuō)是哪里、、。。。 到底能不能部署yolov5這種東西啊?? 也沒(méi)看見(jiàn)幾個(gè)部署在這上面..............
    發(fā)表于 03-07 11:38

    如何部署OpenVINO?工具套件應(yīng)用程序?

    編寫(xiě)代碼并測(cè)試 OpenVINO? 工具套件應(yīng)用程序后,必須將應(yīng)用程序安裝或部署到生產(chǎn)環(huán)境中的目標(biāo)設(shè)備。 OpenVINO?部署管理器指南包含有關(guān)如何輕松使用部署管理器將應(yīng)用程序打包并部署
    發(fā)表于 03-06 08:23

    是否可以使用OpenVINO?部署管理器在部署機(jī)器上運(yùn)行Python應(yīng)用程序?

    使用 OpenVINO?部署管理器創(chuàng)建運(yùn)行時(shí)軟件包。 將運(yùn)行時(shí)包轉(zhuǎn)移到部署機(jī)器中。 無(wú)法確定是否可以在部署機(jī)器上運(yùn)行 Python 應(yīng)用程序,而無(wú)需安裝OpenVINO? Toolkit 和 Python。
    發(fā)表于 03-05 08:16

    紹興數(shù)據(jù)局率先實(shí)現(xiàn)政務(wù)環(huán)境下的DeepSeek模型部署

    2月14日,紹興數(shù)據(jù)局率先基于華為昇騰服務(wù)器,成功部署上線DeepSeek全尺寸大模型,在全省率先實(shí)現(xiàn)政務(wù)環(huán)境下的DeepSeek模型部署。 春節(jié)期間,DeepSeek憑借卓越效能和精確推理爆火出圈
    的頭像 發(fā)表于 02-20 11:22 ?1407次閱讀
    紹興數(shù)據(jù)局率先<b class='flag-5'>實(shí)現(xiàn)</b>政務(wù)環(huán)境下的DeepSeek模型<b class='flag-5'>部署</b>

    基于 Docker 與 Jenkins 實(shí)現(xiàn)自動(dòng)化部署

    前言 重塑自動(dòng)化部署新高度,Docker 攜手 Jenkins,在華為云 Flexus X 云服務(wù)器的加持下,引領(lǐng)持續(xù)集成與部署的新紀(jì)元。Flexus X 以其卓越的性能、靈活的資源配置和高效的成本
    的頭像 發(fā)表于 01-07 17:25 ?487次閱讀
    基于 Docker 與 Jenkins <b class='flag-5'>實(shí)現(xiàn)</b>自動(dòng)化<b class='flag-5'>部署</b>

    YOLOv6在LabVIEW中的推理部署(含源碼)

    YOLOv6 是美團(tuán)視覺(jué)智能部研發(fā)的一款目標(biāo)檢測(cè)框架,致力于工業(yè)應(yīng)用。如何使用python進(jìn)行該模型的部署,官網(wǎng)已經(jīng)介紹的很清楚了,但是對(duì)于如何在LabVIEW中實(shí)現(xiàn)該模型的部署,筆者目前還沒(méi)有看到
    的頭像 發(fā)表于 11-06 16:07 ?857次閱讀
    YOLOv6在LabVIEW中的推理<b class='flag-5'>部署</b>(含源碼)

    涂鴉HEDV本地化部署方案,助你低成本實(shí)現(xiàn)定制化開(kāi)發(fā)!

    ,如何低成本實(shí)現(xiàn)快速交付、敏捷迭代以及滿足本地合規(guī)部署的需求,成為了行業(yè)亟待解決的問(wèn)題。面對(duì)這一挑戰(zhàn),涂鴉智能精心推出了海德薇(HEDV)本地部署解決方案,一個(gè)輕量
    的頭像 發(fā)表于 07-06 08:15 ?1616次閱讀
    涂鴉HEDV本地化<b class='flag-5'>部署</b>方案,助你低成本<b class='flag-5'>實(shí)現(xiàn)</b>定制化開(kāi)發(fā)!
    主站蜘蛛池模板: 海门市| 邢台市| 治多县| 扶沟县| 宁国市| 丁青县| 广河县| 萨嘎县| 庆云县| 潮州市| 阜城县| 塘沽区| 潢川县| 五常市| 商洛市| 饶河县| 保德县| 卓尼县| 扎赉特旗| 北京市| 公安县| 如皋市| 慈溪市| 哈密市| 襄垣县| 江西省| 扬州市| 武强县| 宁武县| 蕉岭县| 贵港市| 始兴县| 班玛县| 德庆县| 清河县| 高碑店市| 丹阳市| 无棣县| 永修县| 彩票| 汪清县|