真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何跨不同版本K8S,為有狀態(tài)工作負(fù)載做藍(lán)綠部署

容器的生態(tài)正在爆發(fā)!不僅僅應(yīng)用層在快速變化,還有用于管理應(yīng)用程序的平臺(tái):Kubernetes,也在快速變化。這就為Ops團(tuán)隊(duì)帶來了一個(gè)必須要解決的難題。IT團(tuán)隊(duì)如何才能保證一款應(yīng)用程序能夠在各種不同版本的Kubernetes上都能良好運(yùn)行呢?
如何跨不同版本K8S,為有狀態(tài)工作負(fù)載做藍(lán)綠部署
如何跨不同版本K8S,為有狀態(tài)工作負(fù)載做藍(lán)綠部署
PX-Motion演示視頻:如何跨不同版本Kubernetes,為有狀態(tài)的工作負(fù)載做藍(lán)綠部署

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、金安ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的金安網(wǎng)站制作公司

藍(lán)-綠部署是一種專門用于解決這一問題的技術(shù),并能夠降低生產(chǎn)環(huán)境部署的過程中的停機(jī)或錯(cuò)誤風(fēng)險(xiǎn)。在藍(lán)綠部署場(chǎng)景下,用戶需要構(gòu)建兩個(gè)完全相同的生產(chǎn)環(huán)境(分別稱為藍(lán)與綠),這兩個(gè)環(huán)境之間僅在需要部署的新的變更方面存在差異。每一次僅激活一個(gè)環(huán)境,兩個(gè)環(huán)境之間的數(shù)據(jù)傳輸也是部署過程的一部分。該技術(shù)對(duì)于不含任何數(shù)據(jù)的無狀態(tài)應(yīng)用非常有效,但對(duì)于數(shù)據(jù)庫(kù)這類有狀態(tài)應(yīng)用則存在一定的困難,因?yàn)橛脩舨坏貌槐A魞煞萆a(chǎn)數(shù)據(jù)副本。這種情況下可能會(huì)需要使用Postgres、MySQL以及其他數(shù)據(jù)庫(kù)備份和恢復(fù)腳本,或定制化操作手冊(cè)或自動(dòng)腳本等將數(shù)據(jù)從一個(gè)數(shù)據(jù)源人工移動(dòng)到另一個(gè)數(shù)據(jù)源,這個(gè)過程將會(huì)非常復(fù)雜并且會(huì)耗費(fèi)大量的時(shí)間。

Portworx采用PX-Motion解決了有狀態(tài)應(yīng)用程序的藍(lán)綠部署過程中的數(shù)據(jù)管理問題。PX-Motion使IT團(tuán)隊(duì)能夠很方便地在各種環(huán)境之間進(jìn)行數(shù)據(jù)和應(yīng)用配置的遷移,極大地簡(jiǎn)化了有狀態(tài)應(yīng)用的藍(lán)綠部署。

本篇博文將對(duì)PX-Motion的功能與能力進(jìn)行探討。具體地說,筆者將展示如何對(duì)兩個(gè)不同版本的Kubernetes上運(yùn)行的有狀態(tài)LAMP堆棧進(jìn)行藍(lán)綠部署。

總結(jié)來說,我們會(huì):

  1. 將兩個(gè)Kubernetes集群(分別稱為來源集群和目標(biāo)集群)配對(duì),從而使數(shù)據(jù)、配置和Pods能夠這兩個(gè)集群之間進(jìn)行轉(zhuǎn)移,這是藍(lán)綠部署的一部分。

  2. 使用Kubernetes將一個(gè)LAMP堆棧部署到來源集群上,并驗(yàn)證應(yīng)用程序能夠運(yùn)行。

  3. 使用PX-Motion可以將Kubernetes的部署、加密文件、副本集、服務(wù)、持久卷、持久卷連接以及數(shù)據(jù)等,從來源集群遷移到目標(biāo)集群上進(jìn)行測(cè)試和驗(yàn)證。在遷移完成之后,所有的Pods都能夠在來源集群上繼續(xù)運(yùn)行?,F(xiàn)在我們已經(jīng)有了兩個(gè)集群在運(yùn)行,分別是藍(lán)色和綠色。

  4. 使用Kubernetes驗(yàn)證我們的應(yīng)用以及自身數(shù)據(jù)是否正在目標(biāo)集群上正常運(yùn)行。

  5. 在新集群上的部署驗(yàn)證完成之后,我們就可以更新我們的負(fù)載平衡設(shè)置,從而使所有的流量指向新集群。此時(shí)藍(lán)綠部署就完成了。

我們開始吧!

如何跨不同版本K8S,為有狀態(tài)工作負(fù)載做藍(lán)綠部署

安裝PX-Motion

前提條件

如果你正在嘗試PX-Migration,請(qǐng)確認(rèn)已經(jīng)滿足所有的前提條件(https://docs.portworx.com/cloud-references/migration/migration-stork/#overview)。

配對(duì)Kubernetes集群為數(shù)據(jù)遷移做準(zhǔn)備
從來源集群(Kubernetes 1.10.3)向目標(biāo)集群(Kubernetes 1.12.0)進(jìn)行工作載荷遷移之前,我們需要將這兩個(gè)集群配對(duì)起來。配對(duì)的概念相當(dāng)于將手機(jī)和藍(lán)牙播放器進(jìn)行配對(duì),使兩種不同的設(shè)備結(jié)合起來工作。
集群配對(duì)首先要做的是對(duì)目標(biāo)集群進(jìn)行配置。首先,建立對(duì)于pxctl (“pixie-cuttle”)的訪問,即Portworx CLI。下面將介紹如何在可被kubectl訪問的工作站上使用pxctl。

$ kubectl config  use-context `
$ PX_POD_DEST_CLUSTER=$(kubectl get pods --context
    -l name=portworx -n kube-system 
   -o jsonpath='{.items[0].metadata.name}')
$ alias pxctl_dst="kubectl exec $PX_POD_DEST_CLUSTER \
   --context 
   -n kube-system /opt/pwx/bin/pxctl"

下一步,對(duì)目標(biāo)集群對(duì)象存儲(chǔ)進(jìn)行設(shè)置,使其準(zhǔn)備好與來源集群進(jìn)行配對(duì)。我們需要在目標(biāo)集群上設(shè)置一個(gè)對(duì)象存儲(chǔ)端點(diǎn),作為數(shù)據(jù)在遷移過程中進(jìn)行分級(jí)的位置。

$ pxctl_dst -- volume create --size 100 objectstore
$ pxctl_dst -- objectstore create -v objectstore
$ pxctl_dst -- cluster token show
Token is 

下一步,創(chuàng)建一個(gè)集群配對(duì)YAML配置文檔,從而對(duì)應(yīng)到來源Kubernetes集群上。這個(gè)clusterpair.yaml(https://docs.portworx.com/cloud-references/migration/migration-stork/#overview)文檔將包含如何與目標(biāo)集群調(diào)度程序和Portworx存儲(chǔ)進(jìn)行驗(yàn)證的信息。運(yùn)行如下命令并編輯YAML文檔即可建立配對(duì):

$ storkctl generate clusterpair --context  > clusterpair.yaml`
  1. 說明:你可以用你自己的名稱替換“metadata.name”。

  2. 說明:在如下示例中,options.token可以使用通過上述“cluster tokenshow”命令生成的令牌。

  3. 說明:在如下示例中,對(duì)于options.ip,將需要負(fù)載均衡器或Portworx節(jié)點(diǎn)的IP或者DNS,這樣我們才能夠訪問9001和9010端口。

下一步,使用kubectl,將這個(gè)集群配對(duì)應(yīng)用到來源集群上。

$ kubectl config use-context 
$ kubectl create -f clusterpair.yaml

在這種架構(gòu)下,集群配對(duì)通過互聯(lián)網(wǎng)(VPC至VPC)進(jìn)行連接。這就需要確保我們的目標(biāo)存儲(chǔ)能夠良好地與來源集群連接。 請(qǐng)參照如下說明。(https://docs.portworx.com/cloud-references/migration/)

  1. 說明:這些步驟均是暫用措施,后續(xù)新版本的發(fā)布后將由自動(dòng)化過程取代。

  2. 說明: 云到云、本地環(huán)境到云、云到本地環(huán)境,都需要類似的步驟。

如果所有步驟均操作成功,則請(qǐng)使用storkctl列出集群配對(duì),程序?qū)@示存儲(chǔ)和調(diào)度程序的Ready狀態(tài)。如果顯示Error,則請(qǐng)使用kubectl describe clusterpair,以獲取更多信息。

$ storkctl get clusterpair
NAME      STORAGE-STATUS   SCHEDULER-STATUS   CREATED
green     Ready            Ready              19 Nov 18 11:43 EST
$ kubectl describe clusterpair new-cluster | grep paired
  Normal  Ready   2m    stork  Storage successfully paired
  Normal  Ready   2m    stork  Scheduler successfully paired

pxctl也可以用于列出集群配對(duì)。

$ pxctl_src cluster pair list
CLUSTER-ID  NAME               ENDPOINT                      CREDENTIAL-ID
c604c669    px-cluster-testing http://portworx-api.com:9001  a821b2e2-788f

我們的集群現(xiàn)在已經(jīng)配對(duì)成功了。

在Kubernetes 1.12.0上測(cè)試工作負(fù)載

目前Kubernetes 1.10.3來源集群已經(jīng)和1.12.0目標(biāo)集群完成了配對(duì),我們可以將運(yùn)行的工作負(fù)載、配置以及數(shù)據(jù)從一個(gè)集群遷移到另一個(gè)集群上,來測(cè)試目標(biāo)集群1.12.0Kubernetes上的應(yīng)用程序是否能夠正常運(yùn)行。在遷移過程中及完成后,所有的Pods都將繼續(xù)在來源集群上運(yùn)行。我們現(xiàn)在有了兩個(gè)集群,即藍(lán)色和綠色,只在其運(yùn)行的Kubernetes版本上存在差異。

$ kubectl config  use-context <1.10.3 source cluster context>

如果想要檢查當(dāng)前使用的Kubernetes版本,請(qǐng)運(yùn)行kubectl version命令。這個(gè)命令能夠輸出當(dāng)前的客戶端和服務(wù)器版本。如下所示,服務(wù)器版本為1.10.3。

$ kubectl version --short | awk -Fv '/Server Version: / {print "Kubernetes Version: " $3}'
Kubernetes Version: 1.10.3-eks

在1.10.3上部署應(yīng)用程序

在遷移工作負(fù)載時(shí),我們需要一個(gè)來源集群上已經(jīng)存在的工作負(fù)載。在演示中,我們將使用Heptio的示例LAMP堆棧在來源集群上創(chuàng)建一個(gè)LAMP堆棧(http://docs.heptio.com/content/tutorials/lamp.html),從而在MySQL卷上使用Portworx。這個(gè)堆棧包含了一個(gè)存儲(chǔ)分類,包括Portworx、加密文件、HPH網(wǎng)頁(yè)前端,以及一個(gè)具備Porworx卷副本的mySQL數(shù)據(jù)庫(kù)。

$ kubectl create ns lamp   

$ kubectl create -f . -n lamp
job.batch "mysql-data-loader-with-timeout" created
storageclass.storage.k8s.io "portworx-sc-repl3" created
persistentvolumeclaim "database" created
deployment.extensions "mysql" created
service "mysql" created
deployment.extensions "php-dbconnect" created
service "web" created
secret "mysql-credentials" created

使用kubectl對(duì)Pods進(jìn)行檢索,確保其處于Running狀態(tài)下。

$ kubectl get po -n lamp
NAME                                   READY     STATUS    RESTARTS   AGE
mysql-6f95f464b8-2sq4v                 1/1       Running   0          1m
mysql-data-loader-with-timeout-f2nwg   1/1       Running   0          1m
php-dbconnect-6599c648-8wnvf           1/1       Running   0          1m
php-dbconnect-6599c648-ckjqb           1/1       Running   0          1m
php-dbconnect-6599c648-qv2dj           1/1       Running   0          1m

提取Web服務(wù)。記錄服務(wù)的CLUSTER-IP和EXTERNAL-IP。遷移完成后,這兩個(gè)數(shù)據(jù)將會(huì)因?yàn)樘幱谛碌募荷隙l(fā)生變化。

$ kubectl get svc web -n lamp -o wide
NAME      TYPE           CLUSTER-IP       EXTERNAL-IP             PORT(S)      AGE   SELECTOR
web       LoadBalancer   172.20.219.134   abe7c37c.amazonaws.com  80:31958/TCP 15m   app=php-dbconnect

訪問端點(diǎn)或使用curl確認(rèn)WordPress已安裝、運(yùn)行正常且已連接至MySQL。

如何跨不同版本K8S,為有狀態(tài)工作負(fù)載做藍(lán)綠部署
MySQL連接

$ curl -s abe7c37c.amazonaws.com/mysql-connect.php | jq
{
  "outcome": true
}

驗(yàn)證是否也為MySQL容器創(chuàng)建了PVC。如下我們將看到PVC、數(shù)據(jù)庫(kù),各有三個(gè)副本用于部署。這個(gè)卷是MySQL的ReadWriteOnce卷塊。

$ kubectl get pvc -n lamp
NAME       STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
database   Bound     pvc-c572277d-ec15-11e8-9f4d-12563b3068d4   2Gi        RWO            portworx-sc-repl3   28m

卷信息也可以使用pxctl進(jìn)行展示。Volume list命令的輸出如下。

$ pxctl_src -- volume list
ID                 NAME                                      SIZE  HA STATUS                       
618216855805459265 pvc-c572277d-ec15-11e8-9f4d-12563b3068d4  2 GiB 3  attached on 10.0.3.145

將應(yīng)用程序遷移至Kubernetes 1.12.0

對(duì)本地kubectl客戶端進(jìn)行配置,使其使用正在運(yùn)行1.12.0的目標(biāo)集群。

$ kubectl config use-context <1.12.0 destination cluster context>

運(yùn)行kubectl Version命令,這個(gè)命令將輸出當(dāng)前的客戶端和服務(wù)器版本,如下看到運(yùn)行的1.12.0。

$ kubectl version --short | awk -Fv '/Server Version: / {print "Kubernetes Version: " $3}'
Kubernetes Version: 1.12.0

驗(yàn)證LAMP堆棧Pods是否正在運(yùn)行中。如下所示,該集群的Namespace沒有資源,即表示遷移還未發(fā)生。

$ kubectl get po
No resources found.

下一步,使用Stork客戶端storkctl,創(chuàng)建一次遷移,將LAMP堆棧資源和卷從1.10.3集群遷移到1.12.0集群上。向storkctl create migration的命令的輸入包括clusterPair、namespaces以及可選的includeResources和startApplications,從而將相關(guān)資源納入并在遷移完成后啟動(dòng)應(yīng)用程序。該命令的更多信息請(qǐng)點(diǎn)擊這里(https://docs.portworx.com/cloud-references/migration/migration-stork/)。

$ storkctl --context  \
   create migration test-app-on-1-12 \
   --clusterPair green \
   --namespaces lamp \
   --includeResources \
   --startApplications
Migration test-app-on-1-12 created successfully

遷移創(chuàng)建后,使用storkctl獲取遷移狀態(tài)。

$  storkctl --context  get migration
NAME               CLUSTERPAIR   STAGE     STATUS       VOLUMES   RESOURCES   CREATED
test-app-on-1-12   green         Volumes   InProgress   0/1       0/7         19 Nov 18 13:47 EST

pxctl也可以用于查看遷移狀態(tài)。卷將顯示出與遷移有關(guān)的STAGE和STATUS。

$ pxctl_src cloudmigrate status

CLUSTER UUID: 33293033-063c-4512-8394-d85d834b3716
TASK-ID            VOLUME-ID               VOLUME-NAME                               STAGE     STATUS     
85d3-lamp-database 618216855805459265      pvc-c572277d-ec15-11e8-9f4d-12563b3068d4  Done      Initialized

完成后,遷移將顯示STAGE → Final和 STATUS → Successful。

$ storkctl --context   get migration

NAME               CLUSTERPAIR   STAGE     STATUS       VOLUMES   RESOURCES   CREATED
test-app-on-1-12   green         Final     Successful   1/1       7/7         19 Nov 18 13:47 EST

現(xiàn)在從目標(biāo)集群中獲得Pods。如下所示,PHP與MySQL現(xiàn)在都在目的集群上運(yùn)行。

$ kubectl get po -n lamp
NAME                            READY     STATUS    RESTARTS   AGE
mysql-66d895ff69-z49jl          1/1       Running   0          11m
php-dbconnect-f756c7854-2fc2l   1/1       Running   0          11m
php-dbconnect-f756c7854-c48x8   1/1       Running   0          11m
php-dbconnect-f756c7854-h8tgh   1/1       Running   0          11m

注意CLUSTER-IP和EXTERNAL-IP現(xiàn)在已經(jīng)發(fā)生了變化。這表示服務(wù)現(xiàn)在在新的Kubernetes 1.12集群上運(yùn)行,并且因此包含了與此前不同的子網(wǎng)。

$  kubectl get svc web -n lamp -o wide
NAME      TYPE           CLUSTER-IP     EXTERNAL-IP            PORT(S)       AGE  SELECTOR
web       LoadBalancer   10.100.0.195   aacdee.amazonaws.com   80:31958/TCP  12m  app=php-dbconnect

如果網(wǎng)站能夠在1.12.0集群上被訪問、運(yùn)行正常并且數(shù)據(jù)已經(jīng)正確遷移到了1.12.0集群,則將會(huì)返回相同的輸出內(nèi)容。

Web網(wǎng)頁(yè)前端

如何跨不同版本K8S,為有狀態(tài)工作負(fù)載做藍(lán)綠部署

MySQL連接

$ curl -s http://aacdee.amazonaws.com//mysql-connect.php | jq
{
  "outcome": true
}

如下我們可以看到來源(下)和目標(biāo)(上)集群上,kubectl get po -n lamp的輸出。注意Pods的AGE,目的集群(上)中有最近遷移進(jìn)來的LAMP堆棧。

如何跨不同版本K8S,為有狀態(tài)工作負(fù)載做藍(lán)綠部署

兩個(gè)集群在遷移后運(yùn)行的是相同的程序和數(shù)據(jù)。

如何跨不同版本K8S,為有狀態(tài)工作負(fù)載做藍(lán)綠部署

回顧整個(gè)過程:

  1. 第一步,1.10.3 EKS集群與1.12.0集群配對(duì)。

  2. LAMP堆棧(Linux, Apache, MySQL, PHP)部署到1.10.3集群上。

  3. 使用PX-Motion將Kubernetes部署、加密文件、副本集、服務(wù)、持久卷、持久卷連接,以及LAMP堆棧數(shù)據(jù)遷移到1.12.0集群上。

  4. 應(yīng)用程序在1.12.0集群上被訪問,并驗(yàn)證其是否正確運(yùn)行。

持久卷和連接都使用PX-Motion(https://docs.portworx.com/cloud-references/migration)在各個(gè)集群之間進(jìn)行遷移,Kubernetes資源和副本都使用Portworx Stork在目標(biāo)集群上進(jìn)行啟動(dòng)。

現(xiàn)在我們擁有了兩個(gè)完全可運(yùn)行的Kubernetes集群和兩個(gè)環(huán)境,即藍(lán)色和綠色部署環(huán)境。在實(shí)際操作中,你需要在綠色集群上進(jìn)行所有測(cè)試,從而確保應(yīng)用程序不會(huì)在新的集群上發(fā)生預(yù)期之外的問題。確認(rèn)測(cè)試完成之后,將負(fù)載均衡從藍(lán)色集群切換至新的綠色集群,此時(shí)部署就完成了!

**結(jié)論

PX-Motion具有將Portworx卷和Kubernetes資源在集群之間進(jìn)行遷移的能力。上述樣例就是使用PX-Motion幫助團(tuán)隊(duì)實(shí)現(xiàn)藍(lán)綠部署的過程:對(duì)其工作負(fù)載和數(shù)據(jù)在新版本的Kubernetes上進(jìn)行測(cè)試,并幫助團(tuán)隊(duì)在新的綠色集群上運(yùn)行應(yīng)用程序。在不同版本的Kubernetes上進(jìn)行真實(shí)負(fù)載和數(shù)據(jù)測(cè)試,使得運(yùn)營(yíng)團(tuán)隊(duì)能夠在發(fā)布新版本的Kubernetes之前獲得充足的信心。藍(lán)綠部署并不是PX-Motion唯一的功能,請(qǐng)查看我們其他的PX-Motion博文了解更多。**


網(wǎng)頁(yè)名稱:如何跨不同版本K8S,為有狀態(tài)工作負(fù)載做藍(lán)綠部署
文章網(wǎng)址:http://weahome.cn/article/gggjsc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部