Kubernetes入門

簡介

是一個全新的基於容器技術的分佈式架構領先方案。是Google Borg的開源版本。Google Borg是谷歌內部使用的大規模集羣管理系統,它基於容器技術,實現資源管理自動化,以及跨多個數據中心的資源利用率的最大化

Kubernetes(簡稱k8s)簡化了負載均衡,部署實施的問題,不必再引入或者自己開發一個複雜的服務治理框架。
K8s是一個完備的分佈式系統支撐平臺,有完備的集羣管理能力,也提供了完善的管理工具,包含了開發,部署測試,運維監控在內的各個環節。k8s是一個一站式的完備的分佈式系統開發和支撐平臺。

Why Kubernetes?

  • “輕裝上陣”開發複雜系統
  • 全面擁抱微服務架構:微服務架構核心是將一個巨大的單體應用分解爲很多小的互相連接的微服務
  • 易於“搬遷”到公有云上
  • 超強的橫向擴容能力

Kubernetes基本概念&術語

Master

負責整個的管理和控制,運行着一下一組關鍵進程:

  • Kubernetes API Server (kube-apiserver): k8s所有資源的增刪改查唯一入口
  • Kubernetes Controller Manager (kube-controller-manager): 所有資源對象的自動化控制中心
  • Kubernetes Scheduler (kube-scheduler): Pod調度進程

Node

集羣中的工作負載節點,運行着以下一組關鍵進程:

  • kubelet: 負責Pod對應容器的創建、啓停,與Master密切協作
  • kube-proxy:實現通信與負載均衡的重要組件
  • Docker Engine:負責容器創建和管理

Pod

Pod運行在節點(Node)上,節點可以是物理機也可以是虛擬機,通常一個節點有幾百個Pod;每個Pod中運行着一個Pause容器,其他容器則是業務容器,這些業務容器共享Pause容器的網絡棧和Volume掛載卷,它們之間的通信和數據交換更爲高效。
Pod是k8s管理的最小運行單元。

Pod是k8s最重要最基本的概念。Pod由一個Pause容器(根容器)和一個或多個用戶業務容器組成。爲什麼會設計出一個全新的Pod概念?

  • 容器作爲一個單元的情況下,難以對“整體”簡單地進行判斷及有效進行行動。比如,一個容器死亡算整體死亡嗎?
  • Pod裏的多個業務容器共享Pause容器的IP,共享Pause容器掛在的Volume,簡化了關係密切的業務容器之間的通信問題和文件共享問題。

每個Pod分配了唯一的IP地址,稱爲PodIP,一個Pod裏的容器可以直接與另外一臺主機上的Pod容器直接通信。

Pod分爲普通Pod和Static Pod,後者不存放在k8s的etcd中,而存放在Node某個具體文件上,並且只在此Node上啓動運行。

默認情況下,當Pod裏的某個容器停止時,會自動檢測到這個問題並且重新啓動這個Pod,如果Pod所在的Node宕機,則會將這個Node上所有的Pod重新調度到其他Node上。

Replication Controller (RC)

聲明某種Pod的副本數量在任意時刻都符合某個預期值,所以RC的定義包括以下幾個部分:

  • Pod期待的副本數
  • 用於篩選目標Pod的Label Selector
  • 當Pod副本數小於預期時,用於創建新Pod的Pod模板(template)

RC的特性與作用:

  • 大多數情況下,通過定義一個RC實現Pod的創建過程及副本數量的自動控制
  • RC裏包括完整的Pod定義模板
  • RC通過Label Selector機制實現對Pod副本的自動控制
  • 可以實現Pod的擴容縮容,滾動升級等功能

Deployment

Deployment和Replica Set時RC的一次升級。
典型的使用場景:

  • 創建一個Deployment對象來生成對應的Replica Set並完成Pod副本創建過程
  • 檢查Deployment狀態查看部署是否完成
  • 更新Deployment以創建新的Pod
  • 回滾,擴展,查看狀態等

Horizontal Pod Autoscaler

HPA與RC, Deployment一樣,也是一個k8s資源對象。通過監視分析RC控制Pod的負載變化情況。來自動擴容的工具

Service

在k8s中,Service是分佈式集羣架構的核心,一個服務具有以下關鍵特徵:

  • 唯一指定的名字(例如mysql-server)
  • 擁有一個虛擬IP(Cluster IP, Service IP或VIP)和端口號
  • 能夠提供某種遠程服務能力
  • 被映射到提供這種服務能力的一組容器應用上

Kubernetes由“三種IP”:

  • Node IP: Node的IP地址(每個節點物理網卡的IP地址)
  • Pod IP: Pod的IP地址(Docker Engine根據docker0網橋的IP地址段進行分配的)
  • Cluster IP: Service的IP地址

如果外部應用或用戶需要使用集羣的服務,可以採用NodePort解決這個問題。 可在Service定義裏做出擴展,定義nodePort,這樣k8s會自動分配一個可用的端口。但是這個沒有解決外部訪問的所有問題,但是可以通過將type=NodePort改爲type=LoadBalancer,此時k8s會自動創建一個Load Balancer實力。

Volume(存儲卷)

Volume是Pod中能被多個容器訪問的共享目錄。k8s的Volume與Docker的Volume比較類似。
k8s由以下幾種Volume類型:

  1. emptyDir
  2. hostPath
  3. gcePersistentDisk
  4. awsElastiBlockStore
  5. 其他類型的Volume

Persistent Volume

PV可以理解成k8s中某個網絡存儲中對應的一塊存儲,與Volume類似,但是有以下區別:

  • PV只能是網絡存儲,不屬於任何Node
  • PV並不是定義在Pod上的,而是獨立於Pod之外定義
發佈了63 篇原創文章 · 獲贊 24 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章