K8s基本概念入門
序言
沒等到風來,綿綿小雨,所以寫個隨筆,聊聊k8s的基本概念。
k8s是一個編排容器的工具,其實也是管理應用的全生命周期的一個工具,從創建應用,應用的部署,應用提供服務,擴容縮容應用,應用更新,都非常的方便,而且可以做到故障自愈,例如一個服務器掛了,可以自動將這個服務器上的服務調度到另外一個主機上進行運行,無需進行人工幹涉。那麽,問題來了,要運維何用?
k8s可以更快的更新新版本,打包應用,更新的時候可以做到不用中斷服務,服務器故障不用停機,從開發環境到測試環境到生產環境的遷移極其方便,一個配置文件搞定,一次生成image,到處運行。。。
k8s的全生命周期管理
在k8s進行管理應用的時候,基本步驟是:創建集群,部署應用,發布應用,擴展應用,更新應用。
1、創建集群:為什麽要使用集群?
有一句古話叫做三個臭皮匠,賽過諸葛亮,這就是創建集群的原因。。。
使用集群,create cluster是為了掩蓋底層的無能,在各種環境中,底層的硬件各不相同,有的是各種低廉的服務器,有的各種雲環境,有的是各種vm,有的各種host machine,要想屏蔽底層的細節,增強可靠性和穩定性,從而需要創建集群。
創建集群的好處就是,統一對外提供接口,無須進行各種復雜的調用;提供更好的可靠性,服務器宕機那麽頻繁,物理磁盤那麽容易損壞,無須擔心,集群統一進行調配;提供更好的性能,組合集群中各個機器的計算存儲網絡資源,提供更好的TPS和PS;提供橫向擴容的能力,在進行橫向擴容的時候,性能基本上能呈線性增長。
集群看起來很牛,那麽創建起來很復雜麽?並不會,在k8s只要使用兩條指令就可以創建一個集群,一個是kubectl init進行初始化,創建一個master節點,第二條指令就是kubectl join xxx創建一個node節點,加入這個集群。
在這邊可以看到k8s在物理上進行劃分的時候,劃分了兩種類型的主機,一個master節點,主要用來調度,控制集群的資源等功能;而node節點,主要是用來運行容器的節點,也就是運行服務的節點。
其實集群都差不多,master用來控制,用來存儲各種元數據,node節點是一個工作節點,真正來幹活的;node節點定時與master進行通信,通過kubelet進程來匯報信息。
創建了集群,我要怎麽看信息?如下:
2、 部署應用
使用集群的主要目標是啥?用來提供服務,讓開發開發的應用程序能在集群上運行,從而需要讓開發能運行一個應用來進行測試。
一條指令就能運行一個服務,有了image之後就是這麽簡單。所以,在開發完成程序之後,需要將程序打包成image,然後放到registry中,然後就能夠運行應用了。
在部署完成應用之後,就可以看到應用的名稱,期望狀態是運行一個pod,當前有一個pod,活動的也是一個,還有啟動的時間,那麽什麽是pod呢?
在k8s裏面,集群調度的最小單元就是一個pod,一個pod可以是一個容器,也可以是多個容器,例如你運行一個程序,其中使用了nginx,使用mysql了,使用了jetty,那麽可以將這三個使用在同一個pod中,對他們提供統一的調配能力,一個pod只能運行在一個主機上,而一個主機上可以有多個pod。
那麽有人會問,為什麽要使用pod,為什麽不能直接使用容器呢?使用pod,相當與一個邏輯主機,還記得創建一個vm,在vm上運行幾個進程麽,其實道理是一樣的,pod的存在主要是讓幾個緊密連接的幾個容器之間共享資源,例如ip地址,共享存儲等信息。如果直接調度容器的話,那麽幾個容器可能運行在不同的主機上,這樣就增加了系統的復雜性。
3、發布應用
發布應用主要就是對外提供服務,可能會有人提出疑問,我都運行了服務,為什麽還不能提供服務,這是因為在集群當中,創建的ip地址等資源,只有在同一個集群中才能訪問,每個pod也有獨一的ip地址,當有多個pod提供相同的服務的時候,就需要有負載均衡的能力,從而這裏就涉及到一個概念就是service,專門用來提供服務的。
服務主要是用來提供外界訪問的接口,服務可以關聯一組pod,這些pod的ip地址各不相同,而service相當於一個復雜均衡的vip,用來指向各個pod,當pod的ip地址發生改變之後,也能做到自動進行負載均衡,在關聯的時候,service和pod之間主要通過label來關聯,也就是標簽(-l表示為label)。
從而外界就可以訪問此應用了,如下:
4、 擴容縮容
在業務上線之後,碰到了雙十一怎麽辦?擴容。。。萬劍歸宗,只要有一個pod,那麽就可以產生無數個pod。。。。
過了雙十一怎麽辦,縮容。。。
橫向擴展的能力。。每次擴容縮容的時候,這種會不會覺得很方便,一句話的事兒。。不用創建vm,不用去部署中間件,不用去各種修改配置,這就是自動化。。。
5、 更新
有新版本了,我要發布。。。那麽。。。
滾動更新。。。根據新的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
K8s基本概念入門