Kubernetes(k8s)是Google開源的大規模容器集群管理系統, 如何將基於CentOS7自帶的Kubernetes組件、分散式鍵值存儲系統etcd以及Flannel實現的overlay網路來搭建一個簡單的k8s集群。


我覺得除了部署外,前期 k8s 集群的規劃,及部署之後的持續運營,要同時考慮。在開發沙箱中使用Kubernetes相對容易,但是如果要在生產中開始使用Kubernetes,則解決很多問題:

  1. 規劃階段會碰到的問題:集群是用作開發測試使?,還是?產使用? 集群部署在物理理機上,還是雲平台上? 集群采?哪種網路?案?應用服務如何對外暴露? 集群用哪種持久化存儲? 集群節點用哪種操作系統?
  2. 部署階段會碰到的問題:如何快速創建集群主機資源? 如何實現自動化一鍵部署,比如調用 Ansible、Puppet等?是否可以支持離線部署? 是否有可視化頁面,降低部署門檻?
  3. 運營階段會碰到的問題:集群如何無縫升級? 集群如何快速擴容? 監控、告警、日誌是否完善? 如何進行快速安全加固,打補丁? 集群如何進行備份和恢復?

Kubespray、KOps 這類工具只關注安裝部署階段,滿足不了前期規劃,及後期持續運營的要求。Openshift 之類的平台過於龐大,沒有商業支持很難陸地。

目前我們發現比較好的兩個工具是 KubeOperator 和 RKE(Rancher),如果僅是集群管理員使用的話,KubeOperator 會更合適, 可以通過 Web UI 在 VMware、OpenStack 和物理機上規劃、部署和運營生產級別的 Kubernetes 集群,支持內網離線環境、支持 GPU、內置應用商店,已經通過 CNCF 的 Kubernetes 軟體一致性認證。


首先要進行集群基礎環境的準備,在美團雲上創建三台內網機器,其中一台名為tkmaster主機作為k8s集群的Master節點,剩餘兩台tkminion01~02則是集群的Minion節點。 要求這三台機器均可訪問外網,可以創建一個虛擬路由器,通過虛擬路由器訪問外網;也可以為每台機器綁定一個浮動IP,但是為了避免集群暴露到外網造成的安全問題,需要對浮動IP設定好防火牆規則。

Master節點軟體環境準備:禁用CentOS7自帶防火牆,安裝kubernetes、etcd、ntpd等軟體。Minion節點軟體環境準備:同樣禁用CentOS7自帶防火牆,安裝kubernetes、flannel、ntpd等軟體。

修改Master節點上etcd的配置/etc/etcd/etcd.conf(本文並沒有搭建etcd集群,如果需要參見官方搭建etcd集群的指導教程)。

修改Master節點kubernetes的全局配置文件/etc/kubernetes/config。

修改Master節點kubernetes apiserver的配置文件/etc/kubernetes/apiserver。

啟動Master節點的相關服務:ntpd、etcd、kube-apiserver、kube-scheduler、kube-controller-manager,並將這些服務設為開機自動啟動。

如果每一個服務都啟動成功,那麼sudo systemctl status $SRV顯示的信息則包含Active: active (running)。

在Master節點修改etcd的配置,設定Minion中flannel所使用的子網範圍為172.17.1.0~172.17.254.0(每一個Minion節點都有一個獨立的flannel子網)。

修改Minion節點上flannel的配置/etc/sysconfig/flanneld,設定etcd的相關信息,其中172.26.10.110為tkmaster的IP地址。

修改Minion節點kubernetes的全局配置文件/etc/kubernetes/config。

修改Minion節點上kubernetes kubelet的配置/etc/kubernetes/kubelet。

在Minion節點上啟動相關服務:ntpd、flanneld、docker、kube-proxy、kubelet,並將這些服務設為開機自啟動。

類似Master節點,如果每一個服務都啟動成功,那麼sudo systemctl status $SRV顯示的信息則包含Active: active (running)。

在Master節點查看k8s集群狀態。

在Master節點查看flannel子網分配情況。

在Minion節點通過ip a查看flannel和docker網橋的網路配置信息,確認是否與etcd中/http://coreos.com/network/subnets的信息一致。

從github下載kubernetes源碼,並切換到kubernetes/examples/guestbook參考官方文檔搭建一個完整的應用來驗證集群的基本功能。

如果出現異常情況可以通過sudo journalctl -f -u unitname來查看kubelet、kube-proxy、flannel、docker等服務的日誌。

  1. Minion無法從http://gcr.io中下載pause鏡像,導致Pod無法創建。
    由於不可抗力的因素, 無法從http://gcr.io下載默認的pause鏡像;所以只能從dockerhub來下載pause鏡像並打tag來解決該問題。


目前市面上比較多:KubeOperator,KubeSphere,Rancher 這三個比較常用吧。

KubeOperator 19年剛出來的時候就體驗過了,用起來比較方便,GitHub 更新的挺快的,值得期待。Rancher K3s 挺火爆,都是不錯的開源產品。


根據提主的問題,相信已經對kubernetes的架構有了一定的了解,希望搭建kubernetes來進一步學習kubernetes,這是一個好的開始,如果提主是希望在公司內搭建kubernetes來使用的化,推薦用openshift或rancher,因為從CI/CD的角度來說,kubernetes只有CD這一塊,而鏡像構建(CI)這一塊是缺失的,紅帽出品的openshift很好的不足了這一點

推薦一位大牛的容器技術公眾號

http://weixin.qq.com/r/TxPp8cDE5Z2arYSS90Zd (二維碼自動識別)


裝個k8s沒必要那麼麻煩吧,直接kubeoperator搞起啊,開源好用,就算花錢買原廠服務也很便宜,聽說還可以本地化服務


推薦閱讀:
相关文章