日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

k8s灰度更新_k8s slb如何实现灰度发布-问答-阿里云开发者社区-阿里云

發布時間:2024/10/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s灰度更新_k8s slb如何实现灰度发布-问答-阿里云开发者社区-阿里云 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先需要制作此次實驗的基礎鏡像: 1. Dockerfile的編寫:   mkdir dockerfile && cd dockerfile   vim Dockerfile    #注意: Dockerfile的文件名首字母要大寫     FROM alpine:latest

MAINTAINER "ZCF zcf@zczf.com"

ENV NGX_DOC_ROOT="/var/lib/nginx/html" HOSTNAME="" IP="" PORT="" INDEX_PAGE=""     RUN apk --no-cache add nginx && mkdir -p ${NGX_DOC_ROOT}/shop /run/nginx

COPY chk.html ${NGX_DOC_ROOT}     COPY entrypoint.sh /bin

CMD ["/usr/sbin/nginx","-g","daemon off;"] #定義啟動nginx服務為前端啟動, -g:是global段,中修改daemon off;     ENTRYPOINT ["/bin/entrypoint.sh"] #將CMD的命令,作為參數傳遞給/bin/entrypoint.sh 腳本.

#準備Dockerfile配套的基礎文件:     1) 啟動容器時,執行的腳本文件: entrypoint.sh       vim entrypoint.sh         #!/bin/sh

echo "

WELCOME TO ${HOSTNAME:-www.zcf.com} WEB SITE | date | hostname | hostname -i | -${YOU_INFO:-v1}- |" > ${NGX_DOC_ROOT}/index.html         cat > /etc/nginx/conf.d/default.conf <

exec "$@"      #它就是來接受CMD傳入的參數的.

2 ) 給entrypoint.sh 添加執行權限     chown +x entrypoint.sh

3) 后期做健康檢查時,使用的html文件:     echo OK > chk.html

開始制作docker鏡像文件:   docker build --tag myapp:v1 ./

將制作好的鏡像文件,打上標簽,并上傳到harbor上。   docker login harbor.zcf.com -u admin -p 123456      #登錄harbor   docker tag myapp:v1 harbor.zcf.com/k8s/myapp:v1    #先打上harbor倉庫路徑   docker push harbor.zcf.com/k8s/myapp:v1        #再上傳鏡像到harbor上。

為了方便延時恢復發布的效果,我們還需要在制作一個鏡像   docker run -d --name ngx1 -e YOU_INFO="DIY-HelloWorld-v2" harbor.zcf.com/k8s/myapp:v1     #說明: -e 是指定要傳遞給容器的環境變量, 因為我提前在myapp中啟動腳本entrypoint.sh中使用的了YOU_INFO這個環境變量,     # 因此,這里我可以直接給容器傳遞這個變量,來實現修改nginx首頁的效果.

docker commit --pause ngx1      #將ngx1暫停,并將當前容器狀態,導出為一個新鏡像。

docker kill ngx1 && docker rm -fv ngx1 #制作完鏡像,就直接刪除測試ngx1容器.

root@k8s-n1:~# docker images     REPOSITORY TAG IMAGE ID CREATED SIZE

85355d4af36c 6 seconds ago 7.02MB    #這個就上剛制作的新鏡像.

#給剛制作好的鏡像打上標簽:harbor.zcf.com/k8s/myapp:v2,便于上傳到harbor上。   docker tag 85355d4af36c harbor.zcf.com/k8s/myapp:v2

#測試運行鏡像,若沒有問題,就可以上傳到本地harbor上了。

docker run -p 83:80 --rm -d --name ngx1 harbor.zcf.com/k8s/myapp:v2

root@k8s-n1:~# curl http://192.168.111.80:83/    #測試鏡像是否修改了nginx的首頁為YOU_INFO的內容.

WERCOME TO www.zcf.com WEB SITE | Fri Jul 19 02:31:13 UTC 2019 | ec4f08f831de | 172.17.0.2 | -DIY-HelloWorld-v2- |

docker kill ngx1      #刪除ngx1容器.

docker push harbor.zcf.com/k8s/myapp:v2     #最后,上傳新鏡像到harbor上.

現在已經有了,myapp:v1 和 myapp:v2 那就可以開始K8s的灰度發布測試了。

#先創建三個pod,一個Client,兩個Nginx   #1. 先創建 Client     kubectl run client --image=harbor.zcf.com/k8s/alpine:v1 --replicas=1     #注意: alpine:是一個最小化的Linux系統,很多開源鏡像站都可以下載到.     kubectl get pods -o wide      #查看Pod的創建詳情.

#2. 創建Nginx   kubectl run nginx --image=harbor.zcf.com/k8s/myapp:v1 --port=80 --replicas=2

kubectl get deployment -w      #watch著監控k8s幫我們創建2個pod的過程.

kubectl get pod -o wide

#3. 登錄Client,測試訪問Nginx   root@k8s-m1:/etc/ansible# kubectl get pod     NAME READY STATUS RESTARTS AGE     client-f5cdb799f-2wsmr 1/1 Running 2 16h     nginx-6d6d8b685-7t7xj 1/1 Running 0 99m     nginx-6d6d8b685-xpx5r 1/1 Running 0 99m

kubectl exec -it client-f5cdb799f-2wsmr sh   / # ip addr   / # for i in seq 1000; do wget -O - -q http://nginx/ ; sleep 1; done   / #    #說明: 若你的kube-dns沒有部署成功,這里的nginx可換成Service的IP.   / #    #   kubectl get svc |grep nginx    #這個就是Nginx的Service的集群IP.

#4. 以上測試可看到,已經能夠實現負載均衡的效果了。     接著,開始進行灰度發布測試     #更新myapp的鏡像為myapp:v2     kubectl set image --help     kubectl set image deployment myapp myapp=harbor.zcf.com/k8s/myapp:v2    #升級myapp的鏡像為myapp:v2

#上面執行命令時,就可以看著,另一個終端中Client的訪問變化情況,你可以發現,訪問逐漸從 v1 變成 DIY-HelloWorld-v2了。

#5.測試動態調整nginx Pod的數量     kubectl scale --replicas=5 deployment nginx    #修改nginx的Pod副本數量為5個.     kubectl get pods

#接著在到Client所在的終端上,查看變化,你會發現,主機名和IP部分開始有更多變化了。

#6. 查看nginx鏡像升級狀態,是否成功     kubectl rollout status deployment nginx

#7. 再查看myapp的鏡像是否已經升級為最新的了     kubectl describe pods nginx-xxx-xx

#8. 將myapp回滾到之前的版本,即v1版本     kubectl rollout undo --help     kubectl rollout undo deployment nginx

測試K8s集群外部訪問nginx   #修改 myapp service的類型,讓它能被集群外部的客戶端訪問.     kubectl edit svc myapp       #type: ClusterIP 把它修改為 type:NodePort

#查看svc的更新信息:     kubectl get svc #這里就可以看到,myap service的端口將動態增加一個. 如:80:30020/TCP,注意:30020是隨機分配的。            #它的范圍是,你在使用kubeasz部署時,設置 NODE_PORT_RANGE="30000-60000"中隨機選的.

#接著就可以在集群外部的客戶端去訪問myapp了     http://Master或Node的物理IP:30020/

總結

以上是生活随笔為你收集整理的k8s灰度更新_k8s slb如何实现灰度发布-问答-阿里云开发者社区-阿里云的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。