天天看點

k8s入門

kubernetes(簡稱k8s) 是google開源的分布式的容器管理平台,友善我們在伺服器叢集中管理我們容器化應用。

教程主要介紹怎麼使用阿裡雲容器服務(kubernetes版本)。

節點 (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資料庫

k8s入門

通過上圖可以看出k8s整體架構主要由左邊的master節點和右邊的worker組成,master節點負責對整個叢集進行管理,右邊的電腦表示worker節點負責運作我們部署的容器。

k8s入門

從上往下看,ingress作為http請求入口接收用戶端請求,ingress根據路由規則将請求轉發給對應的服務,服務再根據負載均衡政策将請求轉發給對應的容器執行個體,底層基礎雲服務由所有容器執行個體共享。

下面是通過阿裡雲容器服務背景以可視化的方式部署應用。

阿裡雲部署應用連接配接。

https://help.aliyun.com/document_detail/87784.html?spm=a2c4g.11186623.6.631.6ca67d26rvhza4

在叢集環境中,預設情況如果應用在容器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資料儲存到雲盤中。

 !!!提示:無論使用何種持久卷類型,最終都是以挂載的方式,關聯到容器中。 對使用者來講,最終看到的就是一個目錄。

如果希望一個鏡像(image)更具有通用性,與環境無關,那麼應該将環境相關的配置參數從鏡像中分離出來。

舉個例子:

   我們将一個web應用的代碼打包到一個鏡像中,如果web應用關于資料庫的連接配接位址、帳号、密碼也一同打包到鏡像中,那麼如果我們希望這個鏡像換一個資料庫配置資訊怎麼辦? 隻能重新打包鏡像。

k8s為我們提供了兩種配置管理的方式:configmap和secret。

他們都是鍵值對的形式,差別就是secret專門用于管理銘感資訊配置,例如:密碼。

無論使用那種方式管理配置,最終配置資訊都需要注入到容器中。

目前有兩種方式将配置資訊注入到容器中:環境變量和挂載(mount)資料卷

通過環境變量方式注入容器,容器中的程式隻要通過讀取環境變量值就可以擷取配置資訊。

通過挂載資料卷的方式注入,一般都是挂載到某個目錄,隻要讀取這個目錄中的資料就可以擷取配置資訊。

下面是阿裡雲使用配置的例子:

首先是建立配置項:

k8s入門

接下來是配置注入到容器中,先看通過環境變量注入:

在阿裡雲背景建立應用或者編輯應用,都會出現下面的視窗

k8s入門

下面是通過挂載的方式注入配置資訊:

同樣是在建立應用或者編輯應用視窗中,設定資料卷。

k8s入門

阿裡雲背景操作詳細說明連接配接:

https://help.aliyun.com/document_detail/86769.html?spm=a2c4g.11186623.6.671.667f142e1euho4