選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
3 分鐘閱讀時間 (671 個字)

以容器取代虛擬機

以容器取代虛擬機

過去我常用 VirtualBox 管理虛擬機,為的就是經常要一個「方便、乾淨的環境」實驗。但真的嗎? 回顧一下幾個問題:

  • 一個 ISO 檔要選要裝至少也要十幾二十分鐘,每次都重來也不是辦法,所以就會傾向於保留一個「剛裝完作業系統」的快照,讓未來重複使用。但這個快照久了又發現實用性不高,因為每次用之前又要再裝一個 Guest Additions 才能讓主客體之間有更好的溝通,那是不是裝了之後再快照一次?快照多的了話又很佔容間,這如何是好?
  • Guest Additions 的雙向剪貼永遠都沒有一個完全正常的版本,只好持續不斷地練習打字。
  • 剛開始覺得小小的磁碟空間就夠了,不過有時候愈搞愈複雜,空間快用爆了怎麼辦?那又不是很容易擴張的。

這幾年都是虛擬機與容器化技術並存,不論是 Docker 或 Kubernetes,拿來測試一些「廣受歡迎的服務」是很方便的。如果之前經常要一個「方便、乾淨的環境」為的就是這些廣受歡迎的服務,合而為一何樂不為?因此虛擬機的使用就有逐漸減少的驅勢。但還是有無可取代的,究其根本,是否適合以容器化取代虛擬機,有一個關鍵因素,那就是「有沒有一個常駐服務在等候請求」?像 Nginx、GitLab、Jenkins、SonarQube、Nexus、ELK、PostgreSQL 這些都有,所以它們都很理所當然地用輕量化的容器;但純粹的作業系統呢?Linux Shell 呢?YUM 呢?似乎就沒有適合的 Image 可用,要不就是當做 Base Image 自己再加工改造,要不就是回歸虛擬機。

現在進入正題(終於),對於純粹作業系統(無常駐服務在等候請求)的 Image,因為一開完機就做完所有事情,在 Docker 的世界裡就會直接停掉,在 Kubernetes 的世界裡就會不停地重啟,所以並不可用。但我們能不能略加修改,在開完機之後給一件「很輕鬆又永遠做不完的事」呢?技術永遠都是說破了就不值錢的東西,在 Docker 我們可以很簡單地:

  • docker run -d --name centos7 centos:7 sleep infinity

一行指令解決,其實關鍵就是最後在指定 centos:7 這個 Image 之後的 sleep infinity 指令,就是那「很輕鬆又永遠做不完的事」。在 Kubernetes 稍微麻煩了些:

  • kubectl create deploy centos7 --image=centos:7
  • kubectl get deploy centos7 -o yaml > centos7.yaml
  • kubectl delete deploy centos7
  • vi centos7.yaml(增加以下紅字的部份)
    • ...
    • spec:
    • ...
    •   template:
    • ...
    •     spec:
    • ...
    •       containers:
    •       - image: centos:7
    •         name: centos7
    •         command: [ "sleep" ]
    •         args: [ "infinity" ]
    • ...
  • kubectl apply -f centos7.yaml

步驟是多了點,似乎也不太優雅,但意思還清楚吧?在摸得比較熟之後,我偏好下面這個稍微精簡一點的方法:

  • kubectl create deploy centos7 --image=centos:7
  • vi patch.yaml(全新的小檔案)
    • spec:
    •   template:
    •     spec:
    •       containers:
    •       - image: centos:7
    •         name: centos7
    •         command: [ "sleep" ]
    •         args: [ "infinity" ]
  • kubectl patch deploy centos7 --type=merge --patch "$(cat patch.yaml)"

希望未來 Kubernetes 也能進步到像 Docker 一樣的簡潔。

PWA - Install Page For Demo
Jenkins Node - 無法存取網路磁碟機

相關文章

 

評論 2

Guest - guest 於 2022/08/11, 週四 14:12

kubectl run centos7 --image=centos:7 --command -- sleep infinity

kubectl run centos7 --image=centos:7 --command -- sleep infinity
David Chou (周彥江) 於 2022/08/11, 週四 14:22

感謝這位朋友補充,這的確是我當初不懂的最佳解!

感謝這位朋友補充,這的確是我當初不懂的最佳解![i][/i]
已經注冊了? 這裡登入
Guest
2024/04/27, 週六

Captcha 圖像