Chick-Fil-A Architecture
簡介⌗
Chick-fil-A 是一間總部位於美國喬治亞州 College Park 的美式連鎖速食店,以雞肉三明治為主 (圖片看起來其實是漢堡) ,目前有超過 2,200 間連鎖餐廳
2017 架構⌗
- 在這個階段已經有 MQTT 作為訊息傳遞
- 運用 Docker 去做大部分的事情,使用 Docker Swarm
- 使用 Fluentd 做 Event & Log Forwarding
- MQTT
- Docker log
- Redis cluster 作為 Persistence 層
IoT⌗
- 透過 OAuth 流程,註冊 IoT (包含人工流程)
- 利用 Local OAuth 來達到本地認證,除了第一次啟動 IoT 設備以外,IoT 本人就不用再連接到網際網路也可以進行 refresh token
- 獲取 JWT Token 以後都透過 MQTT broker 進行溝通
Deployment flow⌗
2018 架構⌗
- 改用 K8s
- 因為 K8s 可以更簡單的用 Prometheus 做監控
- 用 Fleet 去做部署
Equirements⌗
3 NCU with Quadcore processor, 8 GB RAM, SSD
Goals⌗
- 非工程人員也可以簡單安裝
- 可以遠端管理
- 可以自動發現已經安裝的裝置和裝置上的 K8s 叢集
- 可以自己恢復,可以做到 HA
Bare Metal Cluster K8s at scale⌗
Highlander⌗
為了解決三台機器在內網,開機時要找到誰當 K8s cluster 的 Leader,Chick-Fil-A 自己做了這個工具去
- 確認誰是老大
- 執行 RKE
- 安裝一些基本的 Pods (ex: Istio…)
Resetting Cluster State⌗
當機器有任何問題時,透過 OverlayFS 讓遠端可以去清除機器 (回到 Golden image 的狀態)
Hooves Up⌗
Chick-Fil-A 自己做的 Ansible 工具,當機器啟動時,可以自動註冊到 AWS SSM
Fleet⌗
為了要部署到全部的店家中,Chick-Fil-A 遇到了幾個問題
- 如果有一千的叢集,部署中有 900 個部署成功,另外 100 個失敗,那要
- 全部 rollback?
- 手動解決並且處理掉那 100 個失敗?
最後他們建立了 Fleet 來做部署,這邊他們使用現有的 message broker (MQTT & Amazon SQS),來通知地端的 Cluster 去做部署
Fleet Ecosystem Components
- Fleet Client
- Fleet Server API
- 產生部署需要的 k8s yaml
- 管理 Cluster 的 Git
- 部署狀態監控
- Atlas
- 存放已經測試過的 k8s yaml
- Vessel
- 放在店家的 Agent 用來做部署
- Dashboards
Entire Flow⌗
- 在工程機房
- 使用 Golden image 去安裝系統,內建 Ansible
- 運送機器
- 店家
- 安裝人員打開機器
- Sherlock 運行,確認在店內網路,並且信任機器
- Highlander,找到叢集需要的三台機器運行 RKE
- 每台機器個別註冊 AWS SSM (運用 Hooves Up)
- MQTT 通知 Fleet Vessel 自動從線上抓軟體並且部署