-
2017年3月,立項
-
2017年5月,Swarm叢集方案
-
2017年8月,配套建設,開始小範圍業務遷移
-
2017年11月,商城業務完成遷移,經歷高併發考驗
-
2018年3月,調研Kubernetes
-
2018年5月,Kubernetes設計方案
-
2018年8月,圍繞Kubernetes配套建設,開始小範圍業務遷移
-
2018年11月,部分業務遷移,經歷高併發考驗 2019年3月,完成落地
-
統一各語言執行時版本(建議最多3個),彙總各種模組串列
-
統一base映象作業系統發行版、版本、彙總預設安裝的常用工具
-
制定命名規範,使用能夠描述專案用途的名字,域名≈專案名=釋出系統內名字
-
映象分3層:OS、runtime、code
-
編寫OS、runtime的base image
-
編寫Dockerfile和entrypoint模板
-
框架中提供探活API,Liveness、Readiness、Graceful Shutdown等
-
統一日誌格式,建議access日誌為單行json,相對Nginx或httpd預設的空格分割欄位方式,欄位較容易擴充套件,反序列化友好,並且能夠支援命令列工具分析。
-
服務分級,對專案根據重要程度和影響面進行分級,不同級別服務的釋出流程、SLA要求各不相同。
-
Artemis框架
-
服務發現
-
APM(tracing)
-
API Gateway
-
DDNS(自研服務發現,容器間直接IP呼叫)
-
Service(LoadBalancer)阿裡雲SLB(作為降級方案)
-
Ingress(未接入DDNS的)
-
Prometheus
-
AlertManager
-
cAdvisor
-
Node-exporter
-
Kube-state-metrics
-
Geb(自研)
-
Ingress中的url探活
-
CPU、記憶體、load
-
TCP連線數
-
檔案描述符
-
nf_conntrack
-
ILogTail
-
阿裡雲日誌服務
-
Filebeat
-
Kafka
-
ElasticSearch
-
DaemonSet
-
持久化stdout日誌
-
Pod更新後刪除原始日誌檔案
-
日誌收集Agent使用HostPath
-
up(Git)
-
Dozer(Swarm)
-
Chons(Kubernetes)
-
開源專案walle 1.x
-
Git SSH
-
Git Hooks
-
從shell指令碼時代進入工具時代
-
需要手工管理的節點IP和ssh key
-
難於除錯、排錯
-
GitLab
-
Jenkins
-
Docker Swarm
-
Docker Registry
-
阿裡雲監控
-
阿裡雲日誌服務
-
阿裡雲LoadBalancer
-
阿裡雲OpenAPI(節點管理)
-
打包、釋出
-
調整實體數
-
重啟容器
-
進入容器
-
監控連結
-
日誌連結
-
系統事件
-
內部PaaS
-
註重易用性
-
開發人員工作中必用的系統
-
構建、釋出、監控、日誌
-
遮蔽Kubernetes中的概念,但又對Manifes有所展現
-
抽象出Stack和Component概念
-
一套環境
-
一整套獨立的服務棧
-
每個人可以建立
-
可以多套共存
-
基於namespace
-
版本化管理,可以複製、匯出、匯入
-
一個服務
-
Deployment或StatefulSet
-
Service
-
Ingress
-
彈性伸縮 HPA(未來)
-
資源配額
-
域名
-
日誌倉庫
-
監控項
-
Golang
-
multi-stage構建
-
產出精簡映象
-
新增到Git中即可
-
初期由於我們的伺服器還執行在阿裡雲經典網路(IaaS的早期多租戶網路),在Swarm叢集中我們使用了overlay網路,每個容器建立或刪除時,由於需要叢集內部廣播該容器IP等資訊,隨著容器數量的增加,會有同步失敗情況,造成服務容器間不通問題。
-
得到App的服務,大部分是Golang語言開發,由於我們的服務多為HTTP短連線形式,並且如果請求的是域名的話,Golang會直接發起DNS查詢,當查詢量過大時會遇到“lookup failed”相關報錯,需要在容器內部執行nscd服務。
-
核心中的TCP引數,尤其是netfilter相關,對於容器網路穩定性影響較大,圖中為目前我們在使用的核心引數。
-
分鐘級部署
-
秒級伸縮、恢復
-
迭代速度成倍增長
-
TCO節省
-
簡化資源管理
-
為微服務治理打下基礎