K8s理解初識到應用到理解

不寫點什麼就感受本身沒學過同樣。
回憶一下Kubernetes中對應的學習過程node

是什麼?

k8s是一個編排容器的工具,其實也是管理應用的全生命週期的一個工具,從建立應用,應用的部署,應用提供服務,擴容縮容應用,應用更新,都很是的方便,並且能夠作到故障自愈,例如一個服務器掛了,能夠自動將這個服務器上的服務調度到另一個主機上進行運行,無需進行人工干涉。mysql

幹什麼?

在Docker技術的基礎上,爲容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提升了大規模容器集羣管理的便捷性。能夠將Docker當作Kubernetes內部使用的低級別組件。Kubernetes不只僅支持Docker,還支持Rocket,這是另外一種容器技術。 使用Kubernetes能夠:nginx

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

怎麼用?

搭建k8s集羣環境步驟git

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

根據文件建立相應的resourcesql

kubectl create -f 文件名
複製代碼

replace更新替換資源docker

kubectl replace -f 文件名
複製代碼

Delete刪除資源api

kubectl delete -f 文件名
複製代碼

查看pod信息(包括IP和node信息)bash

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
複製代碼

樣例

指定啓動的項目內存大小(優化JVM)

這裏是有個坑的,正式用K8s部署服務器的時候,最開始一切正常可是,等幾個微服務都部署上去後,次日早上發現全部的服務都重啓了好幾十次,每一個服務都啓動了雙份或者多份,後來請運維人員查,才知道是服務器內存不足致使的,而後就增長了項目啓動的內存優化,設置啓動內存。後續還出現過一次服務器崩了的狀況,是上傳大文件把磁盤佔滿了,而後K8s直接掛掉了。(吸收教訓,之後長點心)

內部構造?

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

Pod

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

Replication Controller

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

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

相關文章
相關標籤/搜索