Kubernetes 為什麼不是我的最優先選項
最近在社群網站寫到「容器數量越來越多,該從 Docker Swarm 轉換到 Nomad 上」的訊息,然後就被問到這幾年來只要是這類問題,畢竟會被問的「為什麼不用 Kubernetes?」的問題。
最近在社群網站寫到「容器數量越來越多,該從 Docker Swarm 轉換到 Nomad 上」的訊息,然後就被問到這幾年來只要是這類問題,畢竟會被問的「為什麼不用 Kubernetes?」的問題。
當我們完成部署後是一個更大的任務開始,我們仍然還有許多的任務需要處理。舉例來說,我們還需要對網站加入各種類型的監控,並且持續的追蹤各項指標(Metrics)的變化,持續的改進。
在Ruby on Rails 容器化最佳指南(一)我們已經大致說明了製作容器的目的、用途,這篇文章會跟大家介紹如何去撰寫 Production-ready(正式環境)可用的容器鏡像。
如果不想花太多時間在了解細節的技巧上,可以參考如何在幾分鐘內容器化 Rails 專案這篇文章,裡面有有針對容器化所製作的 Ruby Gem 可以快速解決這方面的問題。
Ruby on Rails 至今為止一直都是快速開發網站的首選框架之一,雖然我們可以利用 Rails 快速的製作網站,然而在部署上依舊還是要 DevOps 透過手動的方式部署伺服器、更新才能夠進行測試或者發布。
那麼,我們是否有更好的方式來解決這樣的問題呢?
今年 COSCUP 的時候前同事 Cindy 分享了 Rails 容器化最佳實踐 這場演講,裡面提到我們在五倍紅寶石在將 Ruby on Rails 專案轉換為容器的一些技巧。
這系列文章會分享一下這個容器化的過程是怎麼判斷、處理以及在過程中需要注意哪些事情。
去年雙十一活動的時候有一個算是比較急的專案是要做活動網站,當時評估了一下之後決定來嘗試透過 CI 自動生成 GCE 的自訂映像檔然後搭配 Auto Scale 來做部署。
會選擇這樣的方式主要是因為 Rails 或者大多數開發框架的部署工具預設大多是不適合 Auto Scale 的,像是 Capistrano 大多數是手動填入伺服器位置(之前也有實作過透過 GCP API 自動填入)比較適合雲端服務的作法其實就是是製作成一個映像檔來處理,也因此像是 Docker Image 這類型容器化技術在這方面是相對容易做的。
不過考量到容器化本身也還有一些調整問題才適合使用,再加上雲端服務的選擇是使用 GCP 來提供服務,並不像 AWS ECS 有專門針對容器的服務(可能是我不知道)而是提供 K8S 的方案,對一個短期活動來說在整個專案成員都沒有經驗的前提下學習成本還是偏高的。
因此相對適合的做法是用之前我準備好的 Ansible 腳本,搭配 Packer 這套工具直接在 GCP 上面生成一個自訂的映像檔然後直接更新 Instance Group 的設定讓他以新版本 Scale 起來,就能做到基本上網站不斷掉的更新(Health Check 和 Scale 規則需要調整好)
我們大概花了約一天多的時間快速搭起來,這次的開發時間約兩週中間是透過放額外的人力去支援搭建這個部署流程。
寫完上篇後就開始員工旅遊、鐵人賽(從讀遊戲原始碼學做連線遊戲)反而一直都沒有時間把下篇寫完,離 COSCUP 都已經過了一個多月自己都忘記還剩什麼沒有寫在文章裡面。
中間在鐵人賽的部分花了一些時間把目前理解到關於 Unlight 的一些基本設計整理出來,後面則是實作。至於近期也已經開始在搭建 HTML5 版本的底層設計,還有 mruby 的整合(因為想提供 Mod 功能到遊戲中)等等東西都在進行中,十一月還要飛日本一趟參加 Ruby World Conference,可以說是完全都閒不下來。
總之,讓我們在來看看 COSCUP 這場演講的後續吧 XD
在 COSCUP 分享了這兩週左右(8/3 ~ 8/17)把一款決定開放原始碼的網頁遊戲,從無法啟動到恢復伺服器開始運作的一些經驗跟大家分享。 不過看起來還是有很多人沒有機會來聽,雖然之後因為會把一部分重心放在這款遊戲上,所以應該還是有不少機會,但還是簡單的來彙整一下今天講的東西。
上一篇快速閱讀 Unlight 原始碼大致上有提到了我在當時看到原始碼的看法跟概觀。有興趣的話可以搭配演講簡報一起讀這篇文章。
另外,這次整個遊戲運作起來除了我自己本身對 Ruby / ActionScript 有一定的了解外,也要感謝一下我們這個團隊(Open Unlight)的初期成員 Poka 和舞鶴,給我硬體上的支援跟對其他玩家的客服支援,不然有時候真的很難同時處理這些事情。
最近跟朋友弄了一個透過 Chatbot 做出手遊效果的專案,沒出什麼意外的話大概能在九月看到一個雛形。不過既然是手遊類型的遊戲,更新資料跟維護其實就會遇到一些困難點。
如果是線上遊戲或者手遊,大多數只要在公告後把玩家切斷連線然後升級過程中避免玩家連上就好。不過因為是 Chatbot 所以除非能做到不停機升級,不然是很困難的。 如此一來,讓玩家知道遊戲(機器人)正在更新,處於無法使用的狀態,就是一個重要的關鍵。