使用K8S Deployment來部屬App

閱讀時間約 9 分鐘
總結一下,前幾篇介紹了:
1. 使用Minikube安裝Kubernetes
2. 將Docker image部屬到Minikube
3. 透過K8S Ingress 和 NodePort service直接連線Pod中的App

簡單的說,我們開發完成後,會將app build成一個docker image,透過指令指定image建立k8s pod,將我們開發好的app部屬在k8s pod中。
有發現不方便的地方了嗎? 也就是每次我只要有change,我必須從頭開始,把最新的code build成image,將舊的pod刪掉,然後再透過指令建立最新的pod,將最新的app部屬到k8s pod中。
因此,這邊可以使用K8S 的一個resource,叫做Deployment
一般來說,實務上我們不會直接把app部屬到pod,而是會使用Deployment,使用它有很多好處呢!
例如:
1. code進版後,我們可以直接把pod刪除,讓Deployment直接幫我們根據最新的image長出新的pod。
=> 也就是說Deployment會幫忙redeploy pod,一旦有pod死掉或刪除,會自動重新長出來,可以指定要多少pod。
2. 指定image tag來取代目前的pod。
如果是照著前幾篇過來的,先把前面建立的pod, service, ingress都刪除:
$ kubectl delete pods hello-world
$ kubectl delete svc hello-world
$ kubectl delete ingress vic-example
-------------------------------------------------------------------------------------
以下內容, 會一步一步教學如何使用K8S Deployment來部屬App,即使沒看過前面幾篇也沒關係,因為在大部分情況下,都會直接用Deployment。


在開始之前,先啟動minikube:
$ minikube start --driver=docker
$ eval $(minikube docker-env)
=> 這個指令一定要做,才能使用local image

建立docker image:

按照之前的教學,建立image vic/hello_world,這邊不再贅述。
建立Deployment:

使用本機image 「vic/hello_world」 建立 「hello-world」 deployment:
$ kubectl create deployment hello-world --image=vic/hello_world
kubectl create deployment這個語法,加上之前提到的--image-pull-policy=Never來使用本機image,會發現根本沒有這個語法,因此先建立好deployment後再來修改,取得dashboard url:
$ minikube dashboard --url
瀏覽器打開dashboard,找到剛建立的Deployment來編輯:
原本imagePullPolicy是Always改為Never!
查詢剛剛建立的deployment:
$ kubectl get deployment hello-world
可以看到pod也被建立上去了:
$ kubectl get pods

建立Service:
使用 kubectl expose指令公開 Deployment,創建「hello-world」 Service:
$ kubectl expose deployment hello-world --port=6000 --target-port=5000
可以看到service已經建立上去了:
注意: 這邊跟上篇提到的node port是不一樣的,這邊是ClusterIP。

建立ingress:
接著照著上篇的教學,啟用ingress(如果已經有做過上篇,應該已經enable過了):
$ minikube addons enable ingress

Ingress需要撰寫yaml檔來做設定,以 minikube 內建的 Nginx Ingress 為例,建立一個hello-world-ingress.yaml:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: vic-example
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: hello.world.minikube
http:
paths:
- path: /(.*|$)
backend:
serviceName: hello-world
servicePort: 6000
其中host是對外的domain name,有點類似在設定apache的server name,設定好申請的domain即可從外部直接連線過來。 serviceName跟servicePort則填寫上面建立好的Service。
建立一個名為vic-example的Ingress:
$ kubectl apply -f hello-world-ingress.yaml
查看Ingress:
$ kubectl get ingress
由於這只是範例,並不是真的有hello.world.minikube這個domain name,因此為了模擬測試,可以在/etc/hosts中加入host ip mapping:
$ sudo nano /etc/hosts
打開瀏覽器測試APP:
了解Deployment的好處:
1. 試著把pod刪除看看:
可以發現,才剛刪除沒多久,就自動長出pod了。

2. 讓 Deployment 用指定 tag 的 image 取代原本的 Pod:
首先,假如我們有新版本的code開發完了:
build一個 v2.0 tag 的 image:
$ docker build -t vic/hello_world:v3.0 .

查看docker images:
$ docker images
接著讓 Deployment 用指定 tag 的 image 取代原本的 Pod:
$ kubectl set image deployment/hello-world hello-world-rf7wm=vic/hello_world:v2.0 --record
#kubectl set image deployment-name container-name=image-name

其中hello-world-rf7wm=container name,要從dashboard那邊查,找到Deployment後,按下編輯的圖示,如下圖紅框:
在 Pod 重新建立後,可以驗證一下 image 是不是更新了:
$ kubectl get pods -l app=hello-world -o jsonpath='{.items[0].spec.containers[0].image}'

檢查 Deployment 的歷史紀錄,確認是否有更新:
$ kubectl rollout history deployment hello-world
由於service跟ingress前面都建立過了是一樣的,所以直接用瀏覽器打開app看有無更新:
#Note:
刪除Deployment:
$ kubectl delete deployment xxx
刪除 Service:
$ kubectl delete svc xxx
刪除 Ingress:
$ kubectl delete ingress xxx
為什麼會看到廣告
20會員
161Content count
留言0
查看全部
發表第一個留言支持創作者!
Vic Lin的沙龍 的其他內容
透過K8S Ingress 和 NodePort service直接連線Pod中的App
透過CI/CD工具,如最常見的Jenkins,可以讓工程師專注在開發上,只要將code push到git後,就會有一整套完整的整合、測試、部屬流程,可以大大節省很多時間呢。
透過K8S Ingress 和 NodePort service直接連線Pod中的App
透過CI/CD工具,如最常見的Jenkins,可以讓工程師專注在開發上,只要將code push到git後,就會有一整套完整的整合、測試、部屬流程,可以大大節省很多時間呢。
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 來製作一個簡單的日曆應用程式。這個應用程式將允許用戶查看日曆、添加事件、刪除事件和更新事件。通過這個過程,我們將使用 Express 來建立伺服器,並使用 FullCalendar 來呈現前端的日曆。
Thumbnail
在使用Java進行網站架設時,考慮網站架構的規劃、網域和主機的選擇、安全性配置、多語言支持以及性能優化至關重要。此外,響應式設計可以確保網站在各種裝置上的良好顯示。透過這些要素,您可以設計出穩定、安全且高效的網站,滿足用戶需求。
Thumbnail
探索如何使用SwiftUI的Grid來實現Bento Grid UI,這是一種靈感來自日本便當盒的設計方法。學習如何通過圓角矩形卡片進行動態排版,並利用Grid和GridRow創建適合大尺寸螢幕的靈活佈局。提升使用者體驗和視覺美感的實用指南。
Thumbnail
Heptabase 是一款生活管理工具,利用 Map、Whiteboard 和 Card 三層級組織資訊。再用 Tags 分類筆記。Journal 搭配行事曆管理任務,確保重要事項優先處理。重點是完成最重要的事,獲得餘閒,靈活應對生活變數。每週反思與計畫調整,有助於優化目標實現。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
陳菊安分享她使用紫妍萃第一型膠原蛋白精華凝露的使用體驗,純粹的第一型膠原蛋白能全面改善肌膚問題,質地輕盈且易吸收,是值得推薦的護膚產品。
Thumbnail
Visual Basic for Applications(VBA)是一種功能強大的程式語言,廣泛用於自動化 Microsoft Office 應用程式中的重複性任務。在這篇教學文章中,我們將介紹如何使用 VBA 來新增、刪除和移動檔案。
Thumbnail
Wix網站設計平台:優缺點解析 Wix架設網站的優點 Wix最大的特色在於其簡單易用的拖放式編輯工具,這使得即便是不會寫程式的新手,也能輕鬆打造出美觀的網站,無論是為品牌還是個人用途。 Wix架設網站的缺點 然而,使用Wix架設網站也有一些缺點。免費版本的功能較為有限,且會有廣告,許多設計模
無論是學術工作者還是生活愛好者, 都能從這篇文章中找到使用Obsidian的好處。 這篇文章將揭示如何有效地管理和利用資訊。 透過實踐, Obsidian已成為我生活與工作中的重要工具。 ▋發現1 - 高效的學術閱讀管理 在學術工作中, 我利用Obsidia
Thumbnail
使用 Gemini AI 聊天服務時,點擊「設定>擴充功能」啟用「YouTube」功能,即可在對話中利用 @YouTube 指令尋找 YouTube 影片和詢問內容。
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 來製作一個簡單的日曆應用程式。這個應用程式將允許用戶查看日曆、添加事件、刪除事件和更新事件。通過這個過程,我們將使用 Express 來建立伺服器,並使用 FullCalendar 來呈現前端的日曆。
Thumbnail
在使用Java進行網站架設時,考慮網站架構的規劃、網域和主機的選擇、安全性配置、多語言支持以及性能優化至關重要。此外,響應式設計可以確保網站在各種裝置上的良好顯示。透過這些要素,您可以設計出穩定、安全且高效的網站,滿足用戶需求。
Thumbnail
探索如何使用SwiftUI的Grid來實現Bento Grid UI,這是一種靈感來自日本便當盒的設計方法。學習如何通過圓角矩形卡片進行動態排版,並利用Grid和GridRow創建適合大尺寸螢幕的靈活佈局。提升使用者體驗和視覺美感的實用指南。
Thumbnail
Heptabase 是一款生活管理工具,利用 Map、Whiteboard 和 Card 三層級組織資訊。再用 Tags 分類筆記。Journal 搭配行事曆管理任務,確保重要事項優先處理。重點是完成最重要的事,獲得餘閒,靈活應對生活變數。每週反思與計畫調整,有助於優化目標實現。
Thumbnail
在這篇教學文章中,我們將展示如何使用 Node.js 建立一個簡單的伺服器,並解決常見的跨來源資源共享(CORS)問題,確保伺服器能夠接收並處理來自不同來源的資料。
Thumbnail
陳菊安分享她使用紫妍萃第一型膠原蛋白精華凝露的使用體驗,純粹的第一型膠原蛋白能全面改善肌膚問題,質地輕盈且易吸收,是值得推薦的護膚產品。
Thumbnail
Visual Basic for Applications(VBA)是一種功能強大的程式語言,廣泛用於自動化 Microsoft Office 應用程式中的重複性任務。在這篇教學文章中,我們將介紹如何使用 VBA 來新增、刪除和移動檔案。
Thumbnail
Wix網站設計平台:優缺點解析 Wix架設網站的優點 Wix最大的特色在於其簡單易用的拖放式編輯工具,這使得即便是不會寫程式的新手,也能輕鬆打造出美觀的網站,無論是為品牌還是個人用途。 Wix架設網站的缺點 然而,使用Wix架設網站也有一些缺點。免費版本的功能較為有限,且會有廣告,許多設計模
無論是學術工作者還是生活愛好者, 都能從這篇文章中找到使用Obsidian的好處。 這篇文章將揭示如何有效地管理和利用資訊。 透過實踐, Obsidian已成為我生活與工作中的重要工具。 ▋發現1 - 高效的學術閱讀管理 在學術工作中, 我利用Obsidia
Thumbnail
使用 Gemini AI 聊天服務時,點擊「設定>擴充功能」啟用「YouTube」功能,即可在對話中利用 @YouTube 指令尋找 YouTube 影片和詢問內容。