k8s入門教程

1. k8s概述

Kubernetes(簡稱K8S) 是Google開源的分佈式的容器管理平臺,方便咱們在服務器集羣中管理咱們容器化應用。html

 

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

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節點負責運行咱們部署的容器。mysql

4. 基於k8s的常見web應用部署架構


從上往下看,ingress做爲http請求入口接收客戶端請求,ingress根據路由規則將請求轉發給對應的服務,服務再根據負載均衡策略將請求轉發給對應的容器實例,底層基礎雲服務由全部容器實例共享。
web

5. 部署應用

下面是經過阿里雲容器服務後臺以可視化的方式部署應用。sql

阿里雲部署應用鏈接。數據庫

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

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

相關文章
相關標籤/搜索