使用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
為什麼會看到廣告
avatar-img
21會員
161內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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後,就會有一整套完整的整合、測試、部屬流程,可以大大節省很多時間呢。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
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 影片和詢問內容。