kubernetes 初瞭解

一、什麼是 Kubernetes ?

  • Kubernetes是Google在2014年開源的一個容器集羣管理系統,Kubernetes簡稱K8S。
  • K8S用於容器化應用程序的部署,擴展和管理。
  • K8S提供了容器編排,資源調度,彈性伸縮,部署管理,服務發現等一系列功能。
  • Kubernetes目標是讓部署容器化應用簡單高效。
    在這裏插入圖片描述

二、Kubernetes 的特性

  • 彈性伸縮

使用命令、UI界面或者基於CPU使用情況自動快速擴容和縮容應用程序實例。保證應用業務高峯併發時的高可用性;業務低峯時回收資源。以最小成本運行服務。

  • 自我修復

在節點故障時重新啓動失敗的容器,替換和重新部署。保證預期的副本數量; 殺死健康檢查失敗的容器。並目在未準備好之前不會處理客戶端請求,確保線上服務不中斷。

  • 自動部署和回滾

K8S採用滾動更新策略更新應用,一次更新一個Pod, 而不是同時刪除所有Pod,如果更新過程中出現問題,將回滾更改,確保升級不影響業務。

  • 服務發現和負載均衡

K8S爲多個容器提供一個統一訪問入口(內部IP地址和一個DNS名稱),並且負載均衡關聯的所有容器,使得用戶無需考慮容器IP問題

  • 機密和配置管理

管理機密數據和應用程序配置,而不需要把敏感數據暴露在鏡像裏,提高敏感數據安全性。並可以將一些常用的配置存儲在K8S中,方便應用程序使用。

  • 存儲編排

掛載外部存儲系統,無論是來自本地存儲、公有云( 如AWS、阿里雲的OSS),還是網絡存儲( 如NFS、GlusterFS、 Ceph) 都作爲集羣資源的一部分使用,極大提高存儲使用靈活性。

  • 批處理

提供一次性任務,定時任務;滿足批量數據處理和分析的場景。

三、Kubernetes 特點

  • 可移植:支持公有云,私有云,混合雲,多重雲(multi-cloud)
  • 可擴展:模塊化,插件化,可掛載,可組合
  • 自動化:自動部署,自動重啓,自動複製,自動伸縮/擴展

四、kubernetes應用場景

1、DevOps開發運維一體化
2、微服務

五、Kubernetes集羣架構與組件

5.1、架構圖

在這裏插入圖片描述

5.2、Master節點的組件

  • master節點負責爲用戶和客戶端暴露API、追蹤集羣節點的健康狀態、調度工作負載、以及編排其他組件之間的通信等。
    (單個 master 節點即可完成其所有的功能,但是出於冗餘及負載均衡的目的,生產環境中通常需要多個 master!)

  • 組件介紹:

1、API Server

提供了資源操作的唯一入口,負責接收、校驗並響應所有的 REST請求,結果被持久的存儲於 etcd 中,並提供認證、授權、訪問控制、API註冊和發現等機制。

kubectl 是最常用的交互式命令行工具。

2、ETCD

etcd是Kubernetes提供默認的存儲系統,用於保存集羣的狀態數據,比如Pod、Service 等對象信息。

是基於Raft一致性算法開發的分佈式key-value存儲,可用於服務發現、監控機制、共享配置以及一致性保障(如數據庫leader選舉、分佈式鎖等)

3、controller-manager

通過kube-apiserver監控整個集羣的狀態,負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等。

是由一系列的控制器組成,這些控制器主要包括三組:

  • (1)必須啓動的控制器:

RelicaSet:確保預期的Pod副本數量
Deployment:無狀態應用部署(常見的web服務)
StatefulSet:有狀態應用部署(mysql、oracle)
DaemonSet:確保所有Node運行同一個Pod
Job:一次性任務
Cronjob:定時任務

  • (2)默認啓動的控制器:

NodeController
ServiceController
PVBinderController

  • (3)默認禁止的可選控制器:

BootstrapSignerController
TokenCleanerController

4、scheduler

負責分配調度Pod到集羣內的節點上,它監聽kube-apiserver,查詢還未分配Node節點的Pod,然後根據調度策略爲這些Pod分配node節點。

還支持用戶自定義調度器,可通過以下三種方式可以指定Pod只運行在特定的Node節點上。
1、nodeSelector:只調度到匹配指定label的Node上
2、nodeAffinity:功能更豐富的Node選擇器,比如支持集合操作
3、podAffinity:調度到滿足條件的Pod所在的Node上

5.3、Node節點組件

  • node 是 k8s 集羣中的工作節點,以 pod 的形式運行容器,Node 負責接收來自 master 節點 的工作指令並根據指令來創建或銷燬 pod(容器) 對象,以及調整網絡規劃以便合理的路由和轉發流量。
  • 組件介紹:

1、kubelet

每個Node節點上都運行一個kubelet守護進程,默認監聽10250端口,接收並執行master發來的指令,管理Pod及Pod中的容器。每個kubelet進程會在API Server上註冊節點自身信息,定期向master節點彙報節點的資源使用情況進行信息更新

管理已分配給節點的Pod,比如:安裝Pod所需的volume,下載Pod的Secrets,Pod中運行的 docker(或experimentally,rkt)容器,還會定期執行容器健康檢查。

2、container runtime 是容器運行時的環境,負責鏡像管理以及容器的真正執行。

目前,k8s 所支持的容器運行環境:Docker(最常見)、RKT (可作爲docker工具的替代方案)等等…

3、kube-proxy

在Node節點上實現Pod網絡代理,維護網絡規則。

通過userspace、iptables、ipvs這三種代理模式來爲服務配置四層負載均衡。

六、Kubernetes 集羣部署

6.1、官方提供的三種部署方式

  • minikube(初學者體驗)
    minikube是一個工具,可以在本地快速運行一個單點的kubernetes,僅用於嘗試kubernetes或日常開發的用戶使用。
  • kubeadm
    kubeadm也是一個工具,提供kubeadm init和kuneadm join,用於快速部署kubernetes。
  • 二進制包(工作使用)
    從官方下載發行版的二進制包,手動部署每個組件,組成kubernetes集羣。

6.2、單Master集羣架構圖

在這裏插入圖片描述

6.3、多Master集羣架構圖

在這裏插入圖片描述
多個master節點通過 LB 負載均衡實現 Kubernetes 集羣高可用性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章