kubernetes 使用背景
在部署應(yīng)用程序的方式上,主要經(jīng)歷了三個時代:
-
傳統(tǒng)部署:互聯(lián)網(wǎng)早期,會直接將應(yīng)用程序部署在物理機上
優(yōu)點:簡單崎溃,不需要其它技術(shù)的參與
缺點:不能為應(yīng)用程序定義資源使用邊界腰根,很難合理地分配計算資源,而且程序之間容易產(chǎn)生影響
-
虛擬化部署:可以在一臺物理機上運行多個虛擬機孩等,每個虛擬機都是獨立的一個環(huán)境
優(yōu)點:程序環(huán)境不會相互產(chǎn)生影響涉馅,提供了一定程度的安全性
缺點:增加了操作系統(tǒng)旭蠕,浪費了部分資源
-
容器化部署:與虛擬化類似倘是,但是共享了操作系統(tǒng)
優(yōu)點:
可以保證每個容器擁有自己的文件系統(tǒng)亭枷、CPU、內(nèi)存搀崭、進程空間等
運行應(yīng)用程序所需要的資源都被容器包裝叨粘,并和底層基礎(chǔ)架構(gòu)解耦
容器化的應(yīng)用程序可以跨云服務(wù)商、跨Linux操作系統(tǒng)發(fā)行版進行部署
容器化部署方式給帶來很多的便利瘤睹,但是也會出現(xiàn)一些問題宣鄙,比如說: 一個容器故障停機了,怎么樣讓另外一個容器立刻啟動去替補停機的容器
當并發(fā)訪問量變大的時候默蚌,怎么樣做到橫向擴展容器數(shù)量
kubernetes功能簡介
kubernetes的本質(zhì)是一組服務(wù)器集群冻晤,它可以在集群的每個節(jié)點上運行特定的程序,來對節(jié)點中的容器進行管理绸吸。目的是實現(xiàn)資源管理的自動化鼻弧,主要提供了如下的主要功能:
- 自我修復(fù):一旦某一個容器崩潰,能夠在1秒中左右迅速啟動新的容器
- 彈性伸縮:可以根據(jù)需要锦茁,自動對集群中正在運行的容器數(shù)量進行調(diào)整
- 服務(wù)發(fā)現(xiàn):服務(wù)可以通過自動發(fā)現(xiàn)的形式找到它所依賴的服務(wù)
- 負載均衡:如果一個服務(wù)起動了多個容器攘轩,能夠自動實現(xiàn)請求的負載均衡
- 版本回退:如果發(fā)現(xiàn)新發(fā)布的程序版本有問題,可以立即回退到原來的版本
- 存儲編排:可以根據(jù)容器自身的需求自動創(chuàng)建存儲卷
kubernetes組件
Master:集群控制節(jié)點码俩,每個集群需要至少一個master節(jié)點負責(zé)集群的管控
Node:工作負載節(jié)點度帮,由master分配容器到這些node工作節(jié)點上,然后node節(jié)點上的docker負責(zé)容器的運行
Pod:kubernetes的最小控制單元稿存,容器都是運行在pod中的笨篷,一個pod中可以有1個或者多個容器
Controller:控制器,通過它來實現(xiàn)對pod的管理瓣履,比如啟動pod率翅、停止pod、伸縮pod的數(shù)量等等
Service:pod對外服務(wù)的統(tǒng)一入口袖迎,下面可以維護者同一類的多個pod
Label:標簽冕臭,用于對pod進行分類,同一類pod會擁有相同的標簽
NameSpace:命名空間燕锥,用來隔離pod的運行環(huán)境
kubernetes集群環(huán)境搭建
目前生產(chǎn)部署Kubernetes 集群主要有三種方式:
kubeadm
Kubeadm 是一個K8s 部署工具辜贵,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群归形。如果是用來學(xué)習(xí)托慨,建議使用這個方式,快速了解连霉,不需要花費太多時間在安裝上
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
二進制包
從github 下載發(fā)行版的二進制包榴芳,手動部署每個組件,組成Kubernetes 集群跺撼,部署較為復(fù)雜窟感,需要對kubernetes有一定了解,不建議新手按照此方式
第三方應(yīng)用
目前市場上有許多開源及軟件公司已經(jīng)開發(fā)出相對簡潔的安裝方式歉井,操作更加簡單柿祈、可視化,這里推薦GitHub開源項目 KuboardSpray 安裝哩至,地址:使用 KuboardSpray 安裝kubernetes_v1.23.1 | Kuboard
由于鏈接地址對于安裝過程有著詳細說明躏嚎,且保持實時更新,這里對于安裝過程不再贅述菩貌,可以自行結(jié)合自身需要卢佣,選擇一種即可。
Kubernetes 資源管理方式
-
命令式對象管理:直接使用命令去操作kubernetes資源
kubectl run nginx-pod --image=nginx:latest --port=80
-
命令式對象配置:通過命令配置和配置文件去操作kubernetes資源
kubectl create/patch -f nginx-pod.yaml
-
聲明式對象配置:通過apply命令和配置文件去操作kubernetes資源
kubectl apply -f nginx-pod.yaml
類型 | 操作對象 | 適用環(huán)境 | 優(yōu)點 | 缺點 |
---|---|---|---|---|
命令式對象管理 | 對象 | 測試 | 簡單 | 只能操作活動對象箭阶,無法審計虚茶、跟蹤 |
命令式對象配置 | 文件 | 開發(fā) | 可以審計、跟蹤 | 項目大時仇参,配置文件多嘹叫,操作麻煩 |
聲明式對象配置 | 目錄 | 開發(fā) | 支持目錄操作 | 意外情況下難以調(diào)試 |