本文是Active Network公司IT副總裁Nate的分享,他將在文中介紹他們構建Kubernetes平臺中用到的各種工具,爲你構建穩定、可靠、便捷的K8S平臺分享經驗和建議。
Kubernetes已經成爲業界公認的容器編排事實標準,它幾乎無所不在。如今已經很難遇到一個從未了解Kubernetes這一技術的IT從業者。軟件開發、測試以及基礎設施都在其「業務範圍」內。node
在建立一個生產就緒的Kubernetes平臺以前,你須要準備好將應用程序從傳統環境中遷移出來,而這毫不是一項簡單的任務。你須要一個etcd數據庫、kube-controller、kube-scheduler、證書、core-DNS等。它還要投入資源和時間來調研以肯定合適的組件組合以及可靠、自適應的測試方法以便在交換或加強組件時能夠快速更改。git
除了建立環境和管理流程以外,公司戰略戰術的規劃也格外重要。不多有公司僅僅爲了知足基礎設施的需求而開始採用容器。你的容器環境設計和技術棧更可能須要支持新舊計算形態,同時要避免重複使用資產、資源和費用。(技術棧和設計的功能示例以下圖)github
Rancher是一個開源的企業級Kubernetes管理平臺,爲企業用戶提供Kubernetes-as-a-Service (Kubernetes即服務),它簡潔直觀的界面風格及操做體驗,極大程度解決了業界遺留已久的Kubernetes原生UI易用性不佳以及學習曲線陡峭的問題。經過使用Rancher,你能夠遠離手動建立Kubernetes集羣的痛苦而且能夠一鍵自動設置集羣。它還提供一套K8s集羣所需的功能集,包括配置、訪問控制、全局DNS、災備和恢復、監控、日誌以及集羣升級。使用Ansible將能夠爲K8s節點配置 CentOS VMs。docker
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策略以及網絡安全策略的功能。
因爲全部東西及其依賴項都被打包到容器中,所以Kubernetes可使得持續部署成爲現實,它還能從特定的工做節點中調度工做負載。而滾動更新策略能夠零停機執行持續部署。
Jenkins是一個十分出色的持續集成和鏡像構建的工具,它提供與Gitlab、Nexus、JFrog artifactory、SonarQube、Neuvector、Fority、Helm和Rancher進行進行集成,以構成一個完整的CI/CD 流水線。
Helm打包整個應用程序棧到chart中,包括應用程序所需的pod、服務、secert、ingress、持久化存儲等。Helm還能在跨不一樣環境的狀況下保持部署一致。(以下圖)
總而言之,如今有不少方法能夠幫助構建Kubernetes平臺,將應用程序部署在K8S集羣中變得比以往任什麼時候候都更容易。我但願這能讓你更好地瞭解須要關注的領域以及知道哪些工具或平臺可以讓K8S集羣在企業中成爲現實。