Kubernetes-重要概述

Kubernetes是什麼意思?K8S?

Kubernetes的名字來自希臘語,意思是“舵手” 或 “領航員”K8s是將8個字母“ubernete”替換爲“8”的縮寫。


使用Kubernetes能做什麼?

可以在物理或虛擬機的Kubernetes集羣上運行容器化應用,Kubernetes能提供一個以“容器爲中心的基礎架構”,滿足在生產環境中運行應用的一些常見需求,如:

  • 多個進程(作爲容器運行)協同工作。(Pod)

  • 存儲系統掛載

  • Distributing secrets

  • 應用健康檢測

  • 應用實例的複製

  • Pod自動伸縮/擴展

  • Naming and discovering

  • 負載均衡

  • 滾動更新

  • 資源監控

  • 日誌訪問

  • 調試應用程序

  • 提供認證和授權


爲什麼要使用容器?


    傳統的應用部署方式是通過插件或腳本來安裝應用。這樣做的缺點是應用的運行、配置、管理、所有生存週期將與當前操作系統綁定,這樣做並不利於應用的升級更新/回滾等操作,當然也可以通過創建虛機的方式來實現某些功能,但是虛擬機非常重,並不利於可移植性。

    新的方式是通過部署容器方式實現,每個容器之間互相隔離,每個容器有自己的文件系統 ,容器之間進程不會相互影響,能區分計算資源。相對於虛擬機,容器能快速部署,由於容器與底層設施、機器文件系統解耦的,所以它能在不同雲、不同版本操作系統間進行遷移。

    容器佔用資源少、部署快,每個應用可以被打包成一個容器鏡像,每個應用與容器間成一對一關係也使容器有更大優勢,使用容器可以在build或release 的階段,爲應用創建容器鏡像,因爲每個應用不需要與其餘的應用堆棧組合,也不依賴於生產環境基礎結構,這使得從研發到測試、生產能提供一致環境。類似地,容器比虛機輕量、更“透明”,這更便於監控和管理。



容器優勢總結:

  • 快速創建/部署應用:與VM虛擬機相比,容器鏡像的創建更加容易。

  • 持續開發、集成和部署:提供可靠且頻繁的容器鏡像構建/部署,並使用快速和簡單的回滾(由於鏡像不可變性)。

  • 開發和運行相分離:在build或者release階段創建容器鏡像,使得應用和基礎設施解耦。

  • 開發,測試和生產環境一致性:在本地或外網(生產環境)運行的一致性。

  • 雲平臺或其他操作系統:可以在 Ubuntu、RHEL、 CoreOS、on-prem、Google Container Engine或其它任何環境中運行。

  • Loosely coupled,分佈式,彈性,微服務化:應用程序分爲更小的、獨立的部件,可以動態部署和管理

  • 資源隔離

  • 資源利用:更高效



1、Cluster--->集羣
    cluster是計算、存儲和網絡的集合,kubernetes利用這些cluster的資源跑各種容器。

2、Master--->主
    master是cluster的核心,主要負責調度。master可以運行在物理機或者虛擬機上,爲了實現HA也可以運行多臺master。

3、Node--->節點
    node主要負責運行容器的應用,提供各種資源。node由master管理

4、Pod--->豌豆莢(23333~)
    pod是kubernetes最小工作單元。每個pod包含一個或多個容器。
    pod中的容器會作爲一個整體被master調度到一個node上運行。
爲什麼要引入Pod?
    一般來說一個容器只跑一個應用,在一個容器上只跑一個應用是遠遠不夠的,所以引入了pod。
    pod中可以包含多個容器,多個容器在一個namespace中,實現通信和資源的共享,這樣就很方便了。
    在有些業務中,榮期間必須是緊密合作的,需要共享數據等,而pod可以解決。

5、Controller--->控制器
    controller是用來管理pod的,kubernetes提供了多種的controller,來管理不同的場景。
    deployment、replicaset、statefuleset、job等
(1)deployment 通過deployment部署應用,管理多個Pod副本。

(2)replicaset 實現pod多副本管理,deployment部署應用時會自動創建replicaset,可以理解爲
deployment通過replicaset來管理pod副本。

(3)daemonset 用於一個node只運行一個pod場景,daemonset用來運行daemon

(4)statefuleset 是用來保證Pod在整個生命週期中名稱不變,當pod因爲故障時需要刪除或者重啓時,名稱發生了變化,但是statefuleset會保證這個副本會按照之前固定的順序啓動,更新等。

(5)job 用來雲行結束就刪除應用,而其他controller中的Pod都是長期持久運行的。


6、Service--->服務
    通過deployment部署pod,每個Pod有自己的Ip,services提供自己的Ip和端口爲Pod做負載均衡。
    運行pod通過controller,訪問pod通過service

7、Namespace--->命名空間(學過面向對象編程語言會有印象)

    Namespace類似於Linux系統中用戶的概念,通過將系統內部的對象分配到不同的Namespace中,形成邏輯上的分,便於不同的分組在共享集羣資源的同時還能被分別管理。同一Namespace下的Kubenetes對象的Name必須唯一。

    Namespace可以將一個物理的cluster上,劃分成多個虛擬的cluster,每個劃分成的虛擬cluster就是一個命名空間。
    每個cluster之間完全隔離,也就是說namespace之間是隔離的。

kubectl get namespace  //查看namespace
    default:所有未指定Namespace的對象都會被分配在default命名空間。
    kube-system:所有由Kubernetes系統創建的資源都處於這個命名空間。
    kube-public:此命名空間下的資源可以被所有人訪問(包括未認證用戶)。

圖片.png



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