灰度發布在實際生產部署中是經常被使用的方式,常規的方法是手動從前端lb(負載均衡)上將後端伺服器摘掉,然後,停服務,最後上傳**,完成軟連線更新。在使用ci/cd工具時,這個過程變得自動化了,我們只需要通過jenkins這個功能強大的開源持續整合和部署工具,就可以聯合gitlab 或 gogs 來實現自動拉取**,並根據自己編寫的pipeline指令碼,實現自動連線到lb上摘掉後端server,並自動連線到後端server上,上傳**,並重啟服務,最後通過郵件通知管理員整個過程的結果報告。但今天,k8s的更讓我們看到了一種更便捷高效的灰度發布的實現方法,下面就來說說:
由於本人能力有限,對k8s的理解尚淺,原理部分在後續研究透徹後,在來詳細說明,本編僅供初學者參考
首先需要製作此次實驗的基礎映象:
1. dockerfile的編寫:
mkdir dockerfile && cd dockerfile
vim dockerfile #注意: dockerfile的檔名首字母要大寫
from alpine:latest
maintainer "zcf "
env ngx_doc_root="/var/lib/nginx/html" hostname="" ip="" port="" index_page=""
run apk --no-cache add nginx && mkdir -p $/shop /run/nginx
copy chk.html $
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 "
" > $/index.html
cat > /etc/nginx/conf.d/default.conf <
server ;
listen $:$;
root $;
location / index.html index.htm;
location = /404.html {
internal;
eofexec "$@" #它就是來接受cmd傳入的引數的.
2 ) 給entrypoint.sh 新增執行許可權
chown +x entrypoint.sh
3) 後期做健康檢查時,使用的html檔案:
echo ok > chk.html
2. 開始製作docker映象檔案:
3. 將製作好的映象檔案,打上標籤,並上傳到harbor上。
docker login harbor.zcf.com -u admin -p 123456 #登入harbor
4. 為了方便延時恢**布的效果,我們還需要在製作乙個映象
# 因此,這裡我可以直接給容器傳遞這個變數,來實現修改nginx首頁的效果.
docker commit --pause ngx1 #將ngx1暫停,並將當前容器狀態,匯出為乙個新映象。
docker kill ngx1 && docker rm -fv ngx1 #製作完映象,就直接刪除測試ngx1容器.
[email protected]:~# docker images
repository tag image id created size
85355d4af36c 6 seconds ago 7.02mb #這個就上剛製作的新映象.
#測試執行映象,若沒有問題,就可以上傳到本地harbor上了。
測試映象是否修改了nginx的首頁為you_info的內容.
docker kill ngx1 #刪除ngx1容器.
#先建立三個pod,乙個client,兩個nginx
#1. 先建立 client
kubectl get pods -o wide #檢視pod的建立詳情.
#2. 建立nginx
kubectl get deployment -w #watch著監控k8s幫我們建立2個pod的過程.
kubectl get pod -o wide
#3. 登入client,測試訪問nginx
/ # #說明: 若你的kube-dns沒有部署成功,這裡的nginx可換成service的ip.
/ # # kubectl get svc |grep nginx #這個就是nginx的service的集群ip.
#4. 以上測試可看到,已經能夠實現負載均衡的效果了。
接著,開始進行灰度發布測試
kubectl set image --help
#上面執行命令時,就可以看著,另乙個終端中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
kubectl describe pods nginx-***-xx
kubectl rollout undo --help
kubectl rollout undo deployment nginx
6. 測試k8s集群外部訪問nginx
#type: clusterip 把它修改為 type:nodeport
#檢視svc的更新資訊:
kubectl get svc #這裡就可以看到,myap service的埠將動態增加乙個. 如:80:30020/tcp,注意:30020是隨機分配的。
#它的範圍是,你在使用kubeasz部署時,設定 node_port_range="30000-60000"中隨機選的.
http://master或node的物理ip:30020/
#好了,以上測試結果,我就不截圖了,想看到結果的道友們要多多動手測試,然後多多總結,多多思考,就可以看到,並且明白了。
原文:
K8s部署prometheus監控K8s細節
prometheus 一些配置檔案可以再github上找到。部署 root kube prometheus manifests 目錄下所有檔案 部署 root kube prometheus manifests setup 目錄下所有檔案 要注意的是自己要建立乙個工作空間 如果報錯執行下面語句 部署...
k8s 多租戶 k8s 基礎介紹
備註 1 每乙個pod裡執行著乙個特殊的容器 pause容器,其他容器都是業務容器,這些業務容器共享pause容器的網路棧和volume 邏輯卷 掛載卷。因此他們之間的通訊和資料交換更為高效。2 k8s設計了pod物件,將每個服務程序包裝到相應的pod中,使其成為pod中執行的乙個容器 contai...
k8s集群部署 docker部署k8s安裝篇
1 安裝docker 緊接著配置乙個穩定 stable 的倉庫 倉庫配置會儲存到 etc yum.repos.d docker ce.repo檔案中 yum config manager add repo 更新yum安裝的相關docke軟體包 安裝docker ce yum update y yum...