Kubernetes簡單學習
Kubernetes介紹
1、應用部署方式演變
在部署應用程式的方式上,主要經歷了三個時代
- 傳統部署:直接將應用程式部署在物理機上
優點:
簡單、不需要其他技術支援
缺點:
不能為應用程式定義資源使用邊界,會很難合理的分配計算機資源,並且程式之間會產生影響
- 虛擬化部署:可以在一臺物理機上執行多個虛擬機器,每個虛擬機器都是獨立的一個環境
優點:
程式環境不會相互影響,提供了一定程度的安全性
缺點:
增加了作業系統,浪費了部分資源
- 容器化部署:與虛擬化類似,但是共享了作業系統
優點: 可以保證每個容器擁有自己的檔案系統、CPU、記憶體、程序空間 執行應用程式所需要的資源都被容器包裝,並和底層基礎架構解耦 容器化的應用程式可以跨雲服務商,跨Linux作業系統發行版進行部署
容器化部署也有一些問題:
- 一個容器故障停機了,怎麼樣讓另一個容器立刻啟動去替補停機的容器
- 當併發訪問量大的時候,怎麼樣做到橫向拓展容器數量
這些容器管理問題統稱為容器編排問題,為了解決這些容器編排問題,產生了一些容器編排軟體:
- Swarm:Docker自己的容器編排工具
- Mesos:Apache的一個資源同意管控的工具,需要和Marathon結合使用
- Kubernetes:Google開源的容器編排工具
2、kubernetes簡介
kubernetes,是一個全新的基於容器技術的分散式架構領先方案,是谷歌嚴格保密十幾年的密碼武器----Borg系的一個開源版本,於2014年9月釋出第一個版本,2015年7月釋出第一個正式版本
kubernetes,簡稱K8s,是用8代替8個字元“ubernete”而成的縮寫。是一個開源的,用於管理雲平臺中多個主機上的容器話的應用,Kubernetes的目標是讓部署容器化的應用簡單並高效,Kubernetes提供了應用的部署,規劃,更新,維護的一種機制
kubernetes的本質是一組伺服器叢集,它可以在叢集的每個節點上執行特定的程式,來對節點中的容器進行管理,目的是實現資源的自動化,主要提供瞭如下的主要特性:
- 自我修復:一旦一個容器崩潰,能夠在一秒中左右迅速啟動新的容器
- 彈性伸縮:可以根據需要,自動對叢集中正在執行的容器數量進行調整
- 服務發現:服務可以通過自動發現的形式找到它所依賴的服務
- 負載均衡:如果一個服務啟動了多個容器,能夠自動實現請求的負載均衡
- 版本回退:如果新發布的程式版本有問題,可以立即回退到原來的版本
- 儲存編排:可以根據容器自身的需求自動建立儲存卷
3、kubernetes元件
一個kubernetes叢集主要是由控制節點(master)、工作節點(node)組成,每個節點上都會安裝不同的元件
master:叢集的控制平面,負責叢集的決策
1、API Server:
資源操作的唯一入口,接受使用者輸入的命令,提供認證、授權、API註冊和發現等機制
2、Scheduler:
負責叢集資源排程,按照預定的排程策略將Pod排程到相應的node節點上
3、ControllerManager:
負責維護叢集的狀態,比如程式部署安排、故障檢測、自動拓展、滾動更新
4、ETCD:
負責儲存句群中各種資源物件的資訊
node:叢集的資料平面,負責為容器提供執行環境
1、Kubelet:
負責維護容器的生命週期,即通過控制docker來建立、更新、銷燬容器
2、KubeProxy:
負責提供叢集內部的服務發現和負載均衡
3、Docker
負責節點上容器的各種操作
模擬部署一個nginx服務來說明kubernetes系統各個元件呼叫關係:
1、kubernetes啟動,先將master和node的資訊儲存到etcd中
2、一個nginx服務的安裝請求先發送到master節點的ApiServer元件
3、ApiServer元件會呼叫Scheduler元件來決定到底應該把這個服務安裝到哪個node節點上
Scheduler會在etcd中讀取各個node節點的資訊,然後按照演算法進行選擇,將結果告訴ApiServer
4、ApiServer呼叫ControllerManager去排程node節點安裝nginx服務
5、kubelet接收到指令後,通知docker,然後由docker啟動一個nginx的pod
pod是kubernetes的最小操作單元,容器必須跑在pod中
6、一個nginx服務就運行了,如果要訪問nginx,就需要通過kube-proxy來對pod產生訪問的代理
這樣外界就可以訪問叢集中中的nginx服務了
4、kubernetes概念
Master:叢集的控制節點,每個叢集要求至少有一個master節點
Node:工作負載節點,由master分配容器到這寫node節點上,然後node節點的docker負責容器執行
Pod:kubernetes的最小控制單元,容器都是執行在pod中的,一個pod可以有一個或多個容器
Controller:控制器,通過它來實現對pod的管理,例如啟動pod,停止、伸縮
Service:pod對外服務的統一入口,下面可以維護著同一類多個pod
Label:標籤,用於對pod進行分類,同一類pod會擁有相同的標籤
NameSpace:名稱空間,用來隔離pod的執行環境
叢集環境搭建
1、環境規劃
叢集型別:
- 一主多從:一臺master和多臺node,搭建簡單,但是由單機故障風險
- 多主多從:多個master和多臺node,搭建麻煩,安全性高
安裝方式:
主流的由kubeadm、minikube、二進位制包
- minikube:快速搭建單節點的kubernetes工具
- kubeadm:跨速搭建kubernetes叢集的工具
- 二進位制包:從官網下載每個元件的二進位制包,依次安裝,可以深入理解kubernetes
2、環境搭建
省略。。。