運維Linux和python
沒等到風來,綿綿小雨,所以寫個隨筆,聊聊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多個專案?等等一系列的問題。。。
掃描二維碼,歡迎關注轉發。
掃描二維碼,歡迎評論。。。不評論也無所謂,反正寫著玩。。。