Kubernetes簡要介紹
Kubernetes是Google開源的容器集群管理系統,其提供應用部署、維護、 擴展機制等功能,利用Kubernetes能方便地管理跨機器運行容器化的應用,其主要功能如下:
1) 使用Docker對應用程序包裝(package)、實例化(instantiate)、運行(run)。
2) 以集群的方式運行、管理跨機器的容器。
3) 解決Docker跨機器容器之間的通訊問題。
4) Kubernetes的自我修復機制使得容器集群總是運行在用戶期望的狀態。
Kubernetes Master節點的組成
1、etcd
所有的持久性狀態都保存在etcd中。Etcd同時支持watch,這樣組件很容易得到系統狀態的變化,從而快速響應和協調工作。
2、Kubernetes API Server
這個組件提供對API的支持,響應REST操作,驗證API模型和更新etcd中的相應對象。
3、Scheduler
通過訪問Kubernetes中/binding API, Scheduler負責Pods在各個節點上的分配。Scheduler是插件式的,Kubernetes將來可以支持用戶自定義的scheduler。
4、Kubernetes Controller Manager Server
Controller Manager Server負責所有其它的功能,比如endpoints控制器負責Endpoints對象的創建,更新。node控制器負責節點的發現,管理和監控。將來可能會把這些控制器拆分並且提供插件式的實現。
Kubernetes slave節點的組成
1、Kubelet
Kubelet組件管理Pods和它們的容器,鏡像和卷等信息。
2、Kube-Proxy
Kube-proxy是一個簡單的網絡代理和負載均衡器。它具體實現Service模型,每個Service都會在所有的Kube-proxy節點上體現。根據Service的selector所覆蓋的Pods, Kube-proxy會對這些Pods做負載均衡來服務於Service的訪問者。
二、Kubernetes組件
Kubernetes以RESTFul形式開放接口,用戶可操作的REST對象有三個:
1、pod:是Kubernetes最基本的部署調度單元,可以包含container,邏輯上表示某種應用的一個實例。比如一個web站點應用由前端、後端及數據庫構建而成,這三個組件將運行在各自的容器中,那麽我們可以創建包含三個container的pod。
2、service:是pod的路由代理抽象,用於解決pod之間的服務發現問題。因為pod的運行狀態可動態變化(比如切換機器了、縮容過程中被終止了等),所以訪問端不能以寫死IP的方式去訪問該pod提供的服務。service的引入旨在保證pod的動態變化對訪問端透明,訪問端只需要知道service的地址,由service來提供代理。
3、replicationController:是pod的復制抽象,用於解決pod的擴容縮容問題。通常,分布式應用為了性能或高可用性的考慮,需要復制多份資源,並且根據負載情況動態伸縮。通過replicationController,我們可以指定一個應用需要幾份復制,Kubernetes將為每份復制創建一個pod,並且保證實際運行pod數量總是與該復制數量相等(例如,當前某個pod宕機時,自動創建新的pod來替換)。
可以看到,service和replicationController只是建立在pod之上的抽象,最終是要作用於pod的,那麽它們如何跟pod聯系起來呢?這就要引入label的概念:label其實很好理解,就是為pod加上可用於搜索或關聯的一組key/value標簽,而service和replicationController正是通過label來與pod關聯的。如下圖所示,有三個pod都有label為"app=backend",創建service和replicationController時可以指定同樣的label:"app=backend",再通過label selector機制,就將它們與這三個pod關聯起來了。例如,當有其他frontend pod訪問該service時,自動會轉發到其中的一個backend pod。
三、軟件包安裝
centos7系統通過yum方式安裝即可。當前kubernetes的最新版本為1.9,目前尚不建議在生產環境使用1.9版本,官網推薦使用kubeadm部署,為了更簡單也更系統的學習kubernetes集群的組件,本系列文章采用rpm方式安裝kubernetes 1.5.2 版本,後續會介紹如何本地離線安裝1.9版本。
# yum -y install etcd kubernetes
1、通用配置文件
/etc/kubernetes/config
2、Apiserver服務配置文件
/etc/kubernetes/apiserver
啟動腳本:/lib/systemd/system/kube-apiserver.service
3、kube-controller-manager 服務配置文件
/etc/kubernetes/controller-manager
啟動腳本:/lib/systemd/system/kube-controller-manager.service
4、kube-scheduler服務配置文件
/etc/kubernetes/scheduler
啟動腳本: /lib/systemd/system/kube-scheduler.service
5、kubernet服務配置文件
/etc/kubernetes/kubelet
啟動腳本:/lib/systemd/system/kubelet.service
6、Kube-proxy服務
/etc/kubernetes/proxy
啟動腳本:/lib/systemd/system/kube-proxy.service
五、服務啟動
1、master節點
# systemctl start etcd
# systemctl start kube-apiserver*
# systemctl start kube-controller-manager*
# systemctl start kube-scheduler*
2、slave節點
# systemctl start docker*
# systemctl start kubelet*
# systemctl start kube-proxy*
六、註意事項
在kubernetes系統中,對容器的要求是,需要一直在前臺執行。
Kubernetes簡要介紹