1. k8s概述
Kubernetes(簡稱K8S) 是Google開源的分布式的容器管理平台,方便我們在服務器集群中管理我們容器化應用。
教程主要介紹怎么使用阿里雲容器服務(kubernetes版本)。
2. k8s常用概念介紹
- 節點 (Master node and Worker node)
節點通常指的就是服務器,在k8s中有兩種節點:管理節點(Master Node)和工作節點(Worker Node)
管理節點(Master Node):負責管理整個k8s集群,一般由3個管理節點組成HA的架構。
工作節點(Worker Node):主要負責運行容器。
- 命名空間 (Namespace)
k8s命名空間主要用於隔離集群資源、隔離容器等,為集群提供了一種虛擬隔離的策略;默認存在3個名字空間,分別是默認命名空間 default、系統命名空間 kube-system 和 kube-public。
- Object
k8s 對象(Object)是一種持久化存儲並且用於表示集群狀態的實體。k8s 對象其實就是k8s自己的配置協議,總之我們可以通過定義一個object讓k8s根據object定義執行一些部署任務、監控任務等等。
- POD
Pod是 Kubernetes 部署應用或服務的最小的基本單位。一個Pod 封裝多個應用容器(也可以只有一個容器)、存儲資源、一個獨立的網絡 IP 以及管理控制容器運行方式的策略選項。
- 副本集 (Replica Set,RS)
是一種控制器,負責監控和維護集群中pod的副本(replicas)數,確保pod的副本數是我們期望的樣子。
- 部署 (Deployment)
表示對k8s集群的一次更新操作,是k8s集群中最常用的Object,主要用於部署應用。支持滾動升級。
- 服務 (service)
是對應用的抽象,也是k8s中的基本操作單元,一個服務背后由多個pod支持,服務通過負載均衡策略將請求轉發到容器中。
- Ingress
是一種網關服務,可以將k8s服務通過http協議暴露到外部。
- 無狀態應用 & 有狀態應用
- 無狀態應用指的是應用在容器中運行時候不會在容器中持久化存儲數據,應用容器可以隨意創建、銷毀;如果一個應用有多個容器實例,對於無狀態應用,請求轉發給任何一個容器實例都可以正確運行。例如:web應用
- 有狀態應用指的是應用在容器中運行時候需要穩定的持久化存儲、穩定的網絡標識、固定的pod啟動和停止次序。例如:mysql數據庫
3. k8s架構
通過上圖可以看出k8s整體架構主要由左邊的master節點和右邊的worker組成,master節點負責對整個集群進行管理,右邊的電腦表示worker節點負責運行我們部署的容器。
4. 基於k8s的常見web應用部署架構
5. 部署應用
下面是通過阿里雲容器服務后台以可視化的方式部署應用。
阿里雲部署應用連接。
https://help.aliyun.com/document_detail/87784.html?spm=a2c4g.11186623.6.631.6ca67d26RVHzA4
6. 容器之間共享文件存儲
在集群環境中,默認情況如果應用在容器A創建了一個文件,容器B無法讀取這個文件。
在k8s中提供了持久卷(Persistent Volumes)解決持久化存儲問題,持久卷將存儲細節和存儲數據訪問分離,對於用戶而言使用同統一的接口訪問不同存儲系統上的數據。
根據存儲方式不同,k8s支持多種持久卷(Persistent Volumes)類型,阿里雲也對k8s進行一些擴展支持,目前支持NAS、OSS、雲盤三種持久卷類型。
下面是關於阿里雲支持的持久卷類型的介紹:
- NAS - 阿里雲高性能分布式文件系統,支持共享存儲。
- OSS - 阿里雲對象存儲, 也是一個分布式文件系統,支持共享存儲。
- 雲盤 - 阿里雲雲盤,不支持共享存儲。
根據上面的介紹我們可以選擇NAS或者OSS實現共享文件數據,OSS主要用於圖片,視頻存儲場景可以支持文件直接對外提供訪問服務,在容器共享文件數據,我們一般選擇NAS, 下面是K8S使用NAS的教程:
https://help.aliyun.com/document_detail/88940.html?spm=a2c4g.11186623.6.680.18656b80CZtc9r
關於雲盤,不能多個容器共享,每個POD獨占自己的雲盤實例,適合用於為部署有狀態應用提供持久化存儲,例如部署mysql, 將mysql數據保存到雲盤中。
!!!提示:無論使用何種持久卷類型,最終都是以掛載的方式,關聯到容器中。 對用戶來講,最終看到的就是一個目錄。
7. k8s配置管理
如果希望一個鏡像(image)更具有通用性,與環境無關,那么應該將環境相關的配置參數從鏡像中分離出來。
舉個例子:
我們將一個web應用的代碼打包到一個鏡像中,如果web應用關於數據庫的連接地址、帳號、密碼也一同打包到鏡像中,那么如果我們希望這個鏡像換一個數據庫配置信息怎么辦? 只能重新打包鏡像。
k8s為我們提供了兩種配置管理的方式:configMap和secret。
他們都是鍵值對的形式,區別就是secret專門用於管理銘感信息配置,例如:密碼。
無論使用那種方式管理配置,最終配置信息都需要注入到容器中。
目前有兩種方式將配置信息注入到容器中:環境變量和掛載(mount)數據卷
- 通過環境變量方式注入容器,容器中的程序只要通過讀取環境變量值就可以獲取配置信息。
- 通過掛載數據卷的方式注入,一般都是掛載到某個目錄,只要讀取這個目錄中的數據就可以獲取配置信息。
下面是阿里雲使用配置的例子:
首先是創建配置項:
接下來是配置注入到容器中,先看通過環境變量注入:
在阿里雲后台新建應用或者編輯應用,都會出現下面的窗口
下面是通過掛載的方式注入配置信息:
同樣是在新建應用或者編輯應用窗口中,設置數據卷。
阿里雲后台操作詳細說明連接:
https://help.aliyun.com/document_detail/86769.html?spm=a2c4g.11186623.6.671.667f142e1EUHo4