1. 程式人生 > 其它 >k8s ( kubernetes )

k8s ( kubernetes )

一、 Kubernetes 概述

1、K8S 是什麼?

K8S 的全稱為 Kubernetes ( K12345678S ) ,縮寫為 K8S。

作用:

用於自動部署、擴充套件和管理“容器化(containerized)應用程式”的開源系統。

可以理解成 K8S 是負責自動化運維管理多個容器化程式(比如 Docker)的群集,是一個生態極其豐富的容器編排框架工具。

由來:

K8S 由 google 的 Borg 系統(博格系統,google 內部使用的大規模容器編排工具)作為原型,後經GO語言延用Borg的思路重寫並捐獻給CNCF基金會開源。

含義:

詞根源於希臘語的 舵手、飛行員

官網:https://kubernetes.io

GitHub∶https://qithub.com/kubernetes/kubernetes

2、為什麼要用 K8S ?

試想下傳統的後端部署辦法:把程式包(包括可執行二進位制檔案、配置檔案等)放到伺服器上,接著執行啟動指令碼把程式跑起來,同時啟動守護指令碼定期檢查程式執行狀態、必要的話重新拉起程式。

設想一下,如果服務的請求量上來,已部署的服務響應不過來怎麼辦?傳統的做法往往是,如果請求量、記憶體、CPU 超過閾值做了告警,運維人員馬上再加幾臺伺服器,部署好服務之後,接入負載均衡來分擔已有服務的壓力。

這樣問題就出現了:從監控告警到部署服務,中間需要人力介入!那麼,有沒有辦法自動完成伺服器的部署、更新、解除安裝和擴容、縮容呢?

K8S 的目標是讓部署容器化應用簡單高效。

(1)K8S 解決了裸跑 Docker 的若干痛點:

  • 單機使用,無法有效叢集,
  • 隨著容器數量的上升,管理成本攀升
  • 沒有有效的容災、自愈機制
  • 沒有榆社編排模板,無法實現快速、大規模容器排程
  • 沒有統一的配置管理中心工具
  • 沒有容器生命週期的管理工具
  • 沒有圖形化運維管理工具

K8S 提供了容器編排,資源排程,彈性伸縮,部署管理,服務發現等一系列功能。

(2)K8S 的特性:

●彈性伸縮

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

●自我修復

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

●服務發現和負載均衡

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

●自動釋出(預設滾動釋出模式)和回滾

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

三種釋出模式:

藍綠髮布:兩套環境交替升級,舊版本保留一定時間便於回滾。

灰度釋出:根據比例將老版本升級,例如80%使用者訪問是老版本,20%使用者訪問是新版本。

滾動釋出(金絲雀釋出):按批次停止老版本例項,啟動新版本例項

●集中化配置管理和金鑰管理

管理機密資料和應用程式配置,而不需要把敏感資料暴露在映象裡,提高敏感資料安全性。並可以將一些常用的配置儲存在K8S中,方便應用程式使用。

●儲存編排,支援外掛儲存並對外掛儲存資源進行編排

掛載外部儲存系統,無論是來自本地儲存,公有云(如AWS),還是網路儲存(如NFS、Glusterfs、Ceph)都作為叢集資源的一部分使用,極大提高儲存使用靈活性。

●任務批處理執行

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

3、Kubernetes 叢集架構與元件

K8S是屬於主從裝置模型(Master-Slave 架構),即有Master節點負責叢集的排程、管理和運維,slave節點是叢集中的運算工作負載節點。在 K8S 中,主節點一般被稱為 Master 節點,而從節點則被稱為 Worker Node 節點,每個 Node 都會被 Master 分配一些工作負載。

Master 元件可以在群集中的任何計算機上執行,但建議 Master 節點佔據一個獨立的伺服器。因為 Master 是整個叢集的大腦,如果 Master 所在節點宕機或不可用,那麼所有的控制命令都將失效。除了 Master,在 K8S叢集中的其他機器被稱為 Worker Node 節點,當某個 Node 宕機時,其上的工作負載會被 Master 自動轉移到其他節點上去。

二、核心元件

1、Master 元件

用於暴露 Kubernetes API,任何資源請求或呼叫操作都是通過 kube-apiserver 提供的介面進行。以 HTTP Restful API 提供介面服務,所有物件資源的增刪改查和監聽操作都交給 APIServer 處理後再提交給 Etcd 儲存。

可以理解成 API Server 是 K8S的請求入口服務。API Server 負責接收 K8S所有請求(來自 UI 介面或者 CLI(命令列工具),然後根據使用者的具體請求,去通知其他元件幹活。可以說 API Server 是 K8S 叢集架構的大腦。