1. 程式人生 > 其它 >Kubernetes簡單學習

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、環境搭建

省略。。。

資源管理