K8s理解初識到應用到理解

祖大帥發表於2019-03-25

不寫點什麼就感覺自己沒學過一樣。
回憶一下Kubernetes中對應的學習過程

是什麼?

k8s是一個編排容器的工具,其實也是管理應用的全生命週期的一個工具,從建立應用,應用的部署,應用提供服務,擴容縮容應用,應用更新,都非常的方便,而且可以做到故障自愈,例如一個伺服器掛了,可以自動將這個伺服器上的服務排程到另外一個主機上進行執行,無需進行人工干涉。

幹什麼?

在Docker技術的基礎上,為容器化的應用提供部署執行、資源排程、服務發現和動態伸縮等一系列完整功能,提高了大規模容器叢集管理的便捷性。可以將Docker看成Kubernetes內部使用的低階別元件。Kubernetes不僅僅支援Docker,還支援Rocket,這是另一種容器技術。 使用Kubernetes可以:

  • 自動化容器的部署和複製
  • 隨時擴充套件或收縮容器規模
  • 將容器組織成組,並且提供容器間的負載均衡
  • 很容易地升級應用程式容器的新版本
  • 提供容器彈性,如果容器失效就替換它,等等...

怎麼用?

搭建k8s叢集環境步驟

使用階段常用命令(持續更新---)

根據檔案建立相應的resource

kubectl create -f 檔名
複製程式碼

replace更新替換資源

kubectl replace -f 檔名
複製程式碼

Delete刪除資源

kubectl delete -f 檔名
複製程式碼

檢視pod資訊(包括IP和node資訊)

kubectl get pods -o wide
複製程式碼

獲取service資訊

kubectl get svc -o wide
複製程式碼

檢視具體pod詳情,在排錯時尤為實用

kubectl describe pod POD-NAME  -n NAMESPACE
複製程式碼

檢視service詳情

kubectl describe svc SERVICE-NAME  -n NAMESPACE
複製程式碼

刪除資源的方式不生效,使用強制刪除

kubectl delete pods POD-NAME --grace-period=0 --force
複製程式碼

指定pod在指定的node上啟動(場景大概是,系統對外提供的訪問地址不能變,要固定住)

使node歸屬在一個zone上

kubectl label nodes NODE-NAME zone=north
複製程式碼

然後在啟動服務yml中增加nodeSelector

nodeSelector:
  zone:  north
複製程式碼

樣例

K8s理解初識到應用到理解

指定啟動的專案記憶體大小(優化JVM)

這裡是有個坑的,正式用K8s部署伺服器的時候,最開始一切正常但是,等幾個微服務都部署上去後,第二天早上發現所有的服務都重啟了好幾十次,每個服務都啟動了雙份或者多份,後來請運維人員查,才知道是伺服器記憶體不足導致的,然後就增加了專案啟動的記憶體優化,設定啟動記憶體。後續還出現過一次伺服器崩了的情況,是上傳大檔案把磁碟佔滿了,然後K8s直接掛掉了。(吸取教訓,以後長點心)

K8s理解初識到應用到理解

內部構造?

我簡單說一些基本概念,想深入瞭解移步 十分鐘帶你理解Kubernetes核心概念(形象的解釋各個元件之間關係的圖和更深入理解互動過程) 有幾張圖能很好看清互動關係

K8s理解初識到應用到理解

Pod

在k8s裡面,叢集排程的最小單元就是一個pod,一個pod可以是一個容器,也可以是多個容器,例如你執行一個程式,其中使用了nginx,使用mysql了,使用了jetty,那麼可以將這三個使用在同一個pod中,對他們提供統一的調配能力,一個pod只能執行在一個主機上,而一個主機上可以有多個pod。

Replication Controller

Recplication Controller用來管理pod的副本,保證叢集中存在置頂數量的pod副本,叢集中副本的數量大於置頂數量,則會殺掉置頂數量之外的多餘容器數量,反之則會啟動少於置頂數量個數的容器,保證數量不變,replication controller是實現彈性伸縮、動態擴容和滾動升級的核心。

K8s理解初識到應用到理解

Service

Service是定義一系列Pod以及訪問這些Pod的策略的一層抽象。Service通過Label找到Pod組。因為Service是抽象的,所以在圖表裡通常看不到它們的存在,這也就讓這一概念更難以理解。

Label

k8s中的容器api物件都是通過Label進行 ,label的實質是一系列的k/v鍵值對,label是replication controllerh和service執行的基礎,二者通過label進行判別node上執行的pod。

Node

物理或者虛擬機器器,作為Kubernetes worker,通常稱為Minion。每個節點都執行如下Kubernetes關鍵元件

  • kubelet:是主節點代理
  • kube-proxy:service使用其將連線路由到Pod
  • docker或者rocket:k8s使用的容器技術來建立容器

Scheduler

排程器把未排程的pod通過binding api繫結到節點上。排程器是可插拔的,並且我們期待支援多叢集的排程,未來甚至希望可以支援使用者自定義的排程器。

下面三個涉及網路部分

kube-proxy

每一個節點也執行一個簡單的網路代理和負載均衡

etcd

所有master的持續狀態都存在etcd的一個例項中。這可以很好地儲存配置資料。因為有watch(觀察者)的支援,各部件協調中的改變可以很快被察覺。

flannel

flannel作為coreos提供給k8s的元件,在執行過程中通過與etcd進行通訊獲取整個叢集網段資訊並進行子網的二次分配,使得每個minion節點都能擁有一個唯一的子網網段,進而確保在整個k8s叢集中執行的docker容器都能獲得唯一的ip地址。

推薦一個全盤搜尋的軟體everything超級輕便好用,媽媽再也不用擔心我找不到檔案在哪裡了(七天有效)

連結:pan.baidu.com/s/1w3GolQSh… 提取碼:2080

相關文章