K8s基本概念入門

序言node

    沒等到風來,綿綿小雨,因此寫個隨筆,聊聊k8s的基本概念。python

 

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

 

    k8s能夠更快的更新新版本,打包應用,更新的時候能夠作到不用中斷服務,服務器故障不用停機,從開發環境到測試環境到生產環境的遷移極其方便,一個配置文件搞定,一次生成image,處處運行。。。nginx

 

 

k8s的全生命週期管理sql

    在k8s進行管理應用的時候,基本步驟是:建立集羣,部署應用,發佈應用,擴展應用,更新應用。服務器

 

    一、建立集羣:爲何要使用集羣?網絡

    有一句古話叫作三個臭皮匠,勝過諸葛亮,這就是建立集羣的緣由。。。負載均衡

 

    使用集羣,create cluster是爲了掩蓋底層的無能,在各類環境中,底層的硬件各不相同,有的是各類低廉的服務器,有的各類雲環境,有的是各類vm,有的各類host machine,要想屏蔽底層的細節,加強可靠性和穩定性,從而須要建立集羣。運維

 

    建立集羣的好處就是,統一對外提供接口,無須進行各類複雜的調用;提供更好的可靠性,服務器宕機那麼頻繁,物理磁盤那麼容易損壞,無須擔憂,集羣統一進行調配;提供更好的性能,組合集羣中各個機器的計算存儲網絡資源,提供更好的TPS和PS;提供橫向擴容的能力,在進行橫向擴容的時候,性能基本上能呈線性增加。工具

 

640?wx_fmt=png

 

    集羣看起來很牛,那麼建立起來很複雜麼?並不會,在k8s只要使用兩條指令就能夠建立一個集羣,一個是kubectl init進行初始化,建立一個master節點,第二條指令就是kubectl join xxx建立一個node節點,加入這個集羣。

 

    在這邊能夠看到k8s在物理上進行劃分的時候,劃分了兩種類型的主機,一個master節點,主要用來調度,控制集羣的資源等功能;而node節點,主要是用來運行容器的節點,也就是運行服務的節點。

 

    其實集羣都差很少,master用來控制,用來存儲各類元數據,node節點是一個工做節點,真正來幹活的;node節點定時與master進行通訊,經過kubelet進程來彙報信息。

 

    建立了集羣,我要怎麼看信息?以下:

 

640?wx_fmt=png

 

    二、 部署應用

    使用集羣的主要目標是啥?用來提供服務,讓開發開發的應用程序能在集羣上運行,從而須要讓開發能運行一個應用來進行測試。

 

640?wx_fmt=png

    一條指令就能運行一個服務,有了image以後就是這麼簡單。因此,在開發完成程序以後,須要將程序打包成image,而後放到registry中,而後就可以運行應用了。

 

    在部署完成應用以後,就能夠看到應用的名稱,指望狀態是運行一個pod,當前有一個pod,活動的也是一個,還有啓動的時間,那麼什麼是pod呢?

 

640?wx_fmt=png

 

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

 

640?wx_fmt=png

 

    那麼有人會問,爲何要使用pod,爲何不能直接使用容器呢?使用pod,至關與一個邏輯主機,還記得建立一個vm,在vm上運行幾個進程麼,其實道理是同樣的,pod的存在主要是讓幾個緊密鏈接的幾個容器之間共享資源,例如ip地址,共享存儲等信息。若是直接調度容器的話,那麼幾個容器可能運行在不一樣的主機上,這樣就增長了系統的複雜性。

 

640?wx_fmt=png

    

    三、發佈應用

    發佈應用主要就是對外提供服務,可能會有人提出疑問,我都運行了服務,爲何還不能提供服務,這是由於在集羣當中,建立的ip地址等資源,只有在同一個集羣中才能訪問,每一個pod也有獨一的ip地址,當有多個pod提供相同的服務的時候,就須要有負載均衡的能力,從而這裏就涉及到一個概念就是service,專門用來提供服務的。

 

640?wx_fmt=png

640?wx_fmt=png

    服務主要是用來提供外界訪問的接口,服務能夠關聯一組pod,這些pod的ip地址各不相同,而service至關於一個複雜均衡的vip,用來指向各個pod,當pod的ip地址發生改變以後,也能作到自動進行負載均衡,在關聯的時候,service和pod之間主要經過label來關聯,也就是標籤(-l表示爲label)。

 

640?wx_fmt=png

    從而外界就能夠訪問此應用了,以下:

 

640?wx_fmt=png

    四、 擴容縮容

    在業務上線以後,碰到了雙十一怎麼辦?擴容。。。萬劍歸宗,只要有一個pod,那麼就能夠產生無數個pod。。。。

 

640?wx_fmt=png

    過了雙十一怎麼辦,縮容。。。

 

640?wx_fmt=png

    橫向擴展的能力。。每次擴容縮容的時候,這種會不會以爲很方便,一句話的事兒。。不用建立vm,不用去部署中間件,不用去各類修改配置,這就是自動化。。。

 

    五、 更新

    有新版本了,我要發佈。。。那麼。。。

 

640?wx_fmt=png

    滾動更新。。。根據新的image建立一個pod,分配各類資源,而後自動負載均衡,刪除老的pod,而後繼續更新。。。。不會中斷服務。。。

    更新錯了怎麼辦,不慫,不會影響生產業務,回滾就行了。。。幾秒鐘的事兒。。。

 

後話

    k8s的基本入門,其實算是一種用戶視角,只是用來演示如何使用k8s,怎麼提升了生產力而已。

 

    在給客戶演示的時候,爲啥要選擇k8s?主要就是如何提升了發佈的效率,更新版本的效率,更方便更快捷的上線新版本。

 

    可是在運維關注的視角下,這些遠遠不夠。。。master?存儲了哪些元數據,存儲在etcd中?如何來進行監控?在不少不少系統狀況下,怎麼來部署k8s,是一個項目一個k8s仍是一個k8s多個項目?等等一系列的問題。。。

 

--------------------- 本文來自 運維Linux和python 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/79621510?utm_source=copy 

相關文章
相關標籤/搜索