Active Network實踐:構建Kubernetes平臺的最佳工具
本文是Active Network公司IT副總裁Nate的分享,他將在文中介紹他們構建Kubernetes平臺中用到的各類工具,為你構建穩定、可靠、便捷的K8S平臺分享經驗和建議。
Kubernetes已經成為業界公認的容器編排事實標準,它幾乎無所不在。現在已經很難遇到一個從未了解Kubernetes這一技術的IT從業者。軟體開發、測試以及基礎設施都在其“業務範圍”內。
在建立一個生產就緒的Kubernetes平臺之前,你需要準備好將應用程式從傳統環境中遷移出來,而這絕不是一項簡單的任務。你需要一個etcd資料庫、kube-controller、kube-scheduler、證書、core-DNS等。它還要投入資源和時間來調研以確定合適的元件組合以及可靠、自適應的測試方法以便在交換或增強元件時可以快速更改。
除了建立環境和管理流程之外,公司戰略戰術的規劃也格外重要。很少有公司僅僅為了滿足基礎設施的需求而開始採用容器。你的容器環境設計和技術棧更可能需要支援新舊計算形態,同時要避免重複使用資產、資源和費用。(技術棧和設計的功能示例如下圖)
管理和自動化
Rancher是一個開源的企業級Kubernetes管理平臺,為企業使用者提供Kubernetes-as-a-Service (Kubernetes即服務),它簡潔直觀的介面風格及操作體驗,極大程度解決了業界遺留已久的Kubernetes原生UI易用性不佳以及學習曲線陡峭的問題。通過使用Rancher,你可以遠離手動建立Kubernetes叢集的痛苦並且可以一鍵自動設定叢集。它還提供一套K8s叢集所需的功能集,包括配置、訪問控制、全域性DNS、災備和恢復、監控、日誌以及叢集升級。使用Ansible將可以為K8s節點配置 CentOS VMs。
日誌和監控
Rancher具有內建的FluentD部署,可用於構建EFK堆疊。可以將每個叢集配置為把FluentD日誌推送到Elasticsearch例項。
Kibana是一個開源的視覺化平臺,可以極為方便地檢視和搜尋Elasticsearch日誌。
Elasticsearch Github repo:
https://github.com/helm/charts/tree/master/stable/elasticsearch
Prometheus是一個收集監控指標的優質方案,Prometheus server可用於儲存時間序列資料,alert-manager可用於管理告警,node-exporter可從節點匯出指標,Kube-state-metrics可以為所有k8s物件生成指標。
Prometheus Github repo:
https://github.com/helm/charts/tree/master/stable/prometheus
然而,Prometheus缺少使用者介面,因此需要Grafana,這是一個資料視覺化工具。它能夠連線到Prometheus server,提供監控用的圖表和dashboard。
Grafana Github repo:
https://github.com/helm/charts/tree/master/stable/grafana
持久化儲存
在Kubernetes裡的一切都是動態的和無狀態的,這違背了傳統儲存方案的原則。因此,選擇一個可行的持久化儲存方案是你將面臨的其中一個難題。市場上有許多流行的解決方案,如Ceph、Rook、StarageIO以及Portworx。
其中,Portworx具有資料移動性、高可用性、平臺獨立性、持久卷的動態加密配置。在worker節點上,我們建議anotherdisk(vmdk)通過Portworx建立儲存池。Portworx配備了名為stork的智慧排程程式,可以通過僅在幾個工作節點上安裝Portworx來節省許可成本。
你可以使用這個helm chart部署Portworx:
https://github.com/portworx/helm/tree/master/charts/portworx
容器安全
容器安全在一直不斷髮展,由於pod的動態特性,讓容器內發生的所有程式和通訊具有可見性和可控制變得至關重要。Neuvector可以提供主機和pod的連續執行時保護,它可以通過掃描Kubernetes叢集、節點、pod以及容器映象來保護容器不受安全漏洞的影響。此外,還有一個附帶的優勢是能夠為叢集提供docker和kubernetes基準。它還能通過學習pod/service的良好行為來成為網路防火牆,並且基於此動態建立安全策略。當service在“保護模式”中時,它能夠防止任何未經授權的程式或網路通訊為該pod或服務執行。
你可使用這個helm chart 部署 Neuvector:
https://github.com/neuvector/neuvector-helm
負載均衡
一旦應用程式部署在K8S叢集中後,有幾個選項可以將它們暴露到叢集外部。另一個需要考慮的因素是,如果你是將應用程式從傳統基礎架構遷移到容器中來,並且希望保留回滾的狀態或想要在傳統環境中保留現在已經遷移到K8S叢集中的服務。
AVI Networks可以提供軟體定義的負載均衡器,它有一個控制平面和一個服務平面。這一負載均衡器提供負載均衡、流量管理、彈性伸縮以及端到端的自動化K8S服務。AVI在K8S雲上將服務引擎部署為PODS,它可以處理南北流量(即客戶端和伺服器之間的流量),以及K8S服務的負載均衡。
每次在K8S雲中建立ingress時,AVI都配置了DNS伺服器和IPAM池,可以自動建立虛擬服務。它將從IPAM分配一個IP,建立一個DNS入口並且配置後端的pod池。AVI同時能夠通過ingress的註釋新增各種HTTP策略以及網路安全策略的功能。
CI/CD工具
由於所有東西及其依賴項都被打包到容器中,因此Kubernetes可以使得持續部署成為現實,它還能從特定的工作節點中排程工作負載。而滾動更新策略可以零停機執行持續部署。
Jenkins是一個十分出色的持續整合和映象構建的工具,它提供與Gitlab、Nexus、JFrog artifactory、SonarQube、Neuvector、Fority、Helm和Rancher進行進行整合,以構成一個完整的CI/CD 流水線。
Helm打包整個應用程式棧到chart中,包括應用程式所需的pod、服務、secert、ingress、持久化儲存等。Helm還能在跨不同環境的情況下保持部署一致。(如下圖)
總而言之,現在有很多方法可以幫助構建Kubernetes平臺,將應用程式部署在K8S叢集中變得比以往任何時候都更容易。我希望這能讓你更好地瞭解需要關注的領域以及知道哪些工具或平臺能夠讓K8S叢集在企業中成為現實。