【光说不练假把式】今天说一说Kubernetes 在有赞的实践
生活随笔
收集整理的這篇文章主要介紹了
【光说不练假把式】今天说一说Kubernetes 在有赞的实践
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
戳藍字“CSDN云計算”關注我們哦!
作者 |??木魚 on基礎保障責編 | 阿禿一、背景我們為什么選擇 Kubernetes?因為 Kubernetes 幾乎支持所有的容器業務類型,包括無狀態應用、有狀態應用、任務型和 Daemonset,Kubernetes 也逐漸成為容器編排領域不爭的事實標準。同時,從資源利用率,開發測試運維和 DevOps 三方面出發,會極大的提升人和機器的效率。
二、方案
整體架構
Kubernetes 在整個系統中處于偏底層,負責容器的編排。我們開發了一套 Web 的運維平臺,能夠完成開發者絕大部分的日常開發操作功能,其中包括了應用發布、伸縮容、回滾、灰度藍綠發布、CI/CD 流水線、日志和監控的查看等。
集群部署
為了實現集群的高可用,平臺提供多個 IDC 部署,應用可以同時部署到不同 IDC 的 Kubernetes 集群,同時我們在一個 IDC 同時部署了兩個集群,應用可以部署到同機房的兩個集群,這樣可以解決跨機房調用問題,也可以防止 Kubernetes 集群過大導致的調度性能問題。同時在同一個 IDC 內,集群可以選擇自建和云提供商的集群,在雙十一這種情況下,可以利用云的彈性,快速擴容集群來滿足資源的需求。在同個 IDC 部署多個集群的出發點是,我們沒有使用 Kubernetes 的 Ingress,自研了 k8s-sync 組件會在發布時自動將容器的 IP 同步到我們的統一接入中,為了避免 k8s-sync 出錯,如果在一個集群中 IP 同步不一致會快速失敗,而不會影響其他的集群和現有的服務。Master 高可用
Master 節點是 Kubernetes 中最重要的部分,生產中必須要保障它的高可用。etcd 是 Kubernetes 當中唯一帶狀態的服務,集群中所有的數據都保存在 etcd 中。Kubernetes 選用 etcd 作為它的后端數據存儲倉庫正是看重了其使用分布式架構,沒有單點故障的特性。一是使用獨立的 etcd 集群,使用 3 臺或者5臺服務器只運行etcd,獨立維護和升級。甚至可以使用 CoreOS 的 update-engine 和locksmith,讓服務器完全自主地完成升級。這個 etcd 集群將作為基石用于構建整個集群。采用這項策略的主要動機是 etcd 集群的節點增減都需要顯式的通知集群,保證 etcd 集群節點穩定可以更方便地用程序完成集群滾動升級,減輕維護負擔。
kube-apiserver 高可用apiserver 本身是一個無狀態服務,要實現其高可用相對要容易一些,前端部署了負載均衡,其他組件都通過這個負載均衡去訪問 apiserver。kube-controller-manager 與?kube-scheduler 高可用
這兩項服務是 Master 節點的一部分,他們的高可用相對容易,僅需要運行多份實例即可。這些實例會通過向 apiserver 中的 Endpoint 加鎖的方式來進行leader election, 當目前拿到 leader 的實例無法正常工作時,別的實例會拿到鎖,變為新的 leader。
日志針對日志采集,在有贊主要分為兩類,對于輸出到 stdout 和 stderr 的日志,會使用 filebeat 進行采集,寫入到 kafaka 中做后續的存儲和處理。對于 Java 類應用,在虛擬機時代,就已經自研了一套日志處理方案,在容器中我們沿襲了這套方案,通過 agent 采集走。集群監控對于集群的監控主要分為兩種,對于節點的監控,還是沿襲了虛擬機時代的方案,繼續使用 open-falcon;使用 Kubernetes 后,我們使用了 cadvisor 和 kube-state-metrics,用于采集容器和 Kubernetes 中一些資源對象的數據;同時,對于 Kubernetes 中的組件,kubelet、kube-apiserver、kube-controller-manager 和 kube-scheduler,各自都暴露了 metrics 接口,吐出了自身的運行時的監控數據。這些數據都被集群的 prometheus 全部拉取,然后展示在 Grafana 和運維平臺上。應用監控在運維平臺中,對于應用開發者來說最關心的是應用層面的監控數據。目前,我們結合 cadvisor 和 kube-state-metrics 提供了 CPU、內存、磁盤 IO、網絡 IO 這四個監控項。同時,我們針對容器重啟,銷毀,拉取鏡像失敗,孤兒 Pod 等事件做了監控和報警。服務暴露Kubernetes 中服務的暴露是一個比較重要的問題,同時也有很多開源的方案。剛開始,我們調研了 traefik ,但是很多地方滿足不了我們的需求,所以沿用了內部的接入層 yz7,為了適配 Kubernetes,自研了 k8s-syc。k8s-sync 會 watch 集群中的 endpoints,然后將 IP 同步到 yz7 中。對于 RPC 服務,由于我們內部采用了 macvlan ,這種調用和虛擬機時代保持了一致。
鏡像鏡像的構建主要分 3 層,OS 層、Runtime 層和業務應用層。有贊內部每種應用類型會有嚴格的端口規范,每種應用類型接入容器發布時要符合端口規范。對于 Python 和 NodeJS 應用接入容器發布時比較簡單,只需要在應用 repo 的根路徑下添加 app.yaml 文件,這個文件定義了應用的鏡像的構成,包括 OS、runtime 和 entrypoint。例如,下面是一個 Python 應用的 app.yaml 示例文件。stack: youzanyun-centos6 runtime: python-2.7 entrypoint: gunicorn -c gunicorn_config.py wsgi:application
標簽為了便于運維管理和親和性的需求,我們給 Pod 打上了很多標簽,例如:應用名稱、集群名稱、環境、機房、灰度藍綠等。目前,我們還沒有使用親和性來實現更復雜的高可用,后續會基于這些標簽來規劃應用的親和性和反親和性。Lifecycle Hooks我們使用了 Kubernetes 的 poststart 和 prestop 的鉤子。
- 容器啟動時,會調用定義的 preload 和 online 腳本,該腳本會對應用程序進行健康檢查,健康檢查通過后再執行 online 腳本對應用進行上線動作。
- 容器銷毀時,會調用 offline 和 stop 腳本,和啟動時相反,容器銷毀時會先進行下線動作然后再執行 stop 腳本。
多集群管理目前我們的生產環境的集群包括了自建集群和公有云集群,其他環境也有很多套集群。為了便于進行集群管理,我們自研了集群管理平臺。集群管理員可以在平臺上對進行操作,包括創建集群、添加節點、維護節點、給節點打標簽和查詢集群及節點的水位狀態。
遇到的問題在容器化的過程中,還是碰到了不少的問題,主要有下面這些和大家分享下:1.CPU 核數不準我們使用了 lxcfs 進行了一些隔離,但是對于 Java 程序來說獲取到的 CPU 核數還是不準的,前期我們使用了 hack 的方案,后續升級了 jdk 避免了這個問題。2.有問題時的排查針對發布時,應用程序發布起來出現 CrashLoopbackoff 的情況時,我們提供了調試模式發布,這時,會移除 Pod 的健康檢查和 lifecycle hook,保證可以發布起來。針對線上運行時出現了問題,我們提供了隔離的功能,給 Pod 打上特殊的標簽讓其脫離 Deployment 的控制,同時會執行程序的下線流程,保證不再有流量進來,這樣就保留了有問題時的現場,供開發人員進行現場問題排查。3.Pod 中 Container 的依賴通常,在 Pod 里除了業務容器還有其他的 sidecar 容器,在我們這里特殊的是,業務容器還依賴了 sidecar 容器,但是 Pod 的啟動實際是無序的,所以我們目前使用了富容器,輔助程序和業務程序放在了一起,啟動時控制了它們的啟動次序。目前,社區里也有相應的討論,已經在實現中。
三、未來展望未來,我們期望能開始使用 operator 來優化和改進 Kubernetes 的使用,并使用它去優化一些應用程序的交付;希望可以開始使用 HPA 和 VPA,來實現自動化的伸縮容;實現更精細化的調度,提供集群的利用率。
早鳥票倒計時最后2天,掃碼購票立減2600元!
2019 中國大數據技術大會(BDTC)再度來襲!豪華主席陣容及百位技術專家齊聚,15 場精選專題技術和行業論壇,超強干貨+技術剖析+行業實踐立體解讀,深入解析熱門技術在行業中的實踐落地。
福利掃描添加小編微信,備注“姓名+公司職位”,入駐【CSDN博客】,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!推薦閱讀:
- 【小白集合】詳解服務器內存和顯存基礎知識
- 【忽悠面試官就靠它了】『Spring事務管理器』源碼閱讀梳理
如何破解焦慮成為技術大牛?資深技術 Leader 肺腑忠告
- 快手王華彥:端上視覺技術的極致效率及其短視頻應用實踐 | AI ProCon 2019
每個新手程序員都應該知道的Python開發技巧
5G來了,智能手機們還能拼什么?
- 揭秘!“鏈上FBI”Chainalysis如何追蹤暗網交易?
總結
以上是生活随笔為你收集整理的【光说不练假把式】今天说一说Kubernetes 在有赞的实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 当天买入的股票当天可以卖出吗
- 下一篇: 打征信报告必须要本人去吗