1 第一章 kubernetes介紹


1 第一章 kubernetes介紹

1.1 應用部署方式演變

在部署應用程序的方式上,主要經歷了三個時代:

  • 傳統部署:互聯網早期,會直接將應用程序部署在物理機上

    優點:簡單,不需要其它技術的參與

    缺點:不能為應用程序定義資源使用邊界,很難合理地分配計算資源,而且程序之間容易產生影響

  • 虛擬化部署:可以在一台物理機上運行多個虛擬機,每個虛擬機都是獨立的一個環境

    優點:程序環境不會相互產生影響,提供了一定程度的安全性

    缺點:增加了操作系統,浪費了部分資源

  • 容器化部署:與虛擬化類似,但是共享了操作系統

    優點:

    可以保證每個容器擁有自己的文件系統、CPU、內存、進程空間等

    運行應用程序所需要的資源都被容器包裝,並和底層基礎架構解耦

    容器化的應用程序可以跨雲服務商、跨Linux操作系統發行版進行部署

image-20200505183738289

容器化部署方式給帶來很多的便利,但是也會出現一些問題,比如說:

  • 一個容器故障停機了,怎么樣讓另外一個容器立刻啟動去替補停機的容器

  • 當並發訪問量變大的時候,怎么樣做到橫向擴展容器數量

這些容器管理的問題統稱為容器編排問題,為了解決這些容器編排問題,就產生了一些容器編排的軟件:

  • Swarm:Docker自己的容器編排工具

  • Mesos:Apache的一個資源統一管控的工具,需要和Marathon結合使用

  • Kubernetes:Google開源的的容器編排工具

image-20200524150339551

1.2 kubernetes簡介

image-20200406232838722

 

kubernetes,是一個全新的基於容器技術的分布式架構領先方案,是谷歌嚴格保密十幾年的秘密武器----Borg系統的一個開源版本,於2014年9月發布第一個版本,2015年7月發布第一個正式版本。

kubernetes的本質是一組服務器集群,它可以在集群的每個節點上運行特定的程序,來對節點中的容器進行管理。目的是實現資源管理的自動化,主要提供了如下的主要功能:

  • 自我修復:一旦某一個容器崩潰,能夠在1秒中左右迅速啟動新的容器

  • 彈性伸縮:可以根據需要,自動對集群中正在運行的容器數量進行調整

  • 服務發現:服務可以通過自動發現的形式找到它所依賴的服務

  • 負載均衡:如果一個服務起動了多個容器,能夠自動實現請求的負載均衡

  • 版本回退:如果發現新發布的程序版本有問題,可以立即回退到原來的版本

  • 存儲編排:可以根據容器自身的需求自動創建存儲卷

image-20200526203726071

1.3 kubernetes組件

一個kubernetes集群主要是由控制節點(master)工作節點(node)構成,每個節點上都會安裝不同的組件。

master:集群的控制平面,負責集群的決策 ( 管理 )

ApiServer : 資源操作的唯一入口,接收用戶輸入的命令,提供認證、授權、API注冊和發現等機制

Scheduler : 負責集群資源調度,按照預定的調度策略將Pod調度到相應的node節點上

ControllerManager : 負責維護集群的狀態,比如程序部署安排、故障檢測、自動擴展、滾動更新等

Etcd :負責存儲集群中各種資源對象的信息

node:集群的數據平面,負責為容器提供運行環境 ( 干活 )

Kubelet : 負責維護容器的生命周期,即通過控制docker,來創建、更新、銷毀容器

KubeProxy : 負責提供集群內部的服務發現和負載均衡

Docker : 負責節點上容器的各種操作

image-20200406184656917

下面,以部署一個nginx服務來說明kubernetes系統各個組件調用關系:

  1. 首先要明確,一旦kubernetes環境啟動之后,master和node都會將自身的信息存儲到etcd數據庫中

  2. 一個nginx服務的安裝請求會首先被發送到master節點的apiServer組件

  3. apiServer組件會調用scheduler組件來決定到底應該把這個服務安裝到哪個node節點上

    在此時,它會從etcd中讀取各個node節點的信息,然后按照一定的算法進行選擇,並將結果告知apiServer

  4. apiServer調用controller-manager去調度Node節點安裝nginx服務

  5. kubelet接收到指令后,會通知docker,然后由docker來啟動一個nginx的pod

    pod是kubernetes的最小操作單元,容器必須跑在pod中至此,

  6. 一個nginx服務就運行了,如果需要訪問nginx,就需要通過kube-proxy來對pod產生訪問的代理

這樣,外界用戶就可以訪問集群中的nginx服務了

1.4 kubernetes概念

Master:集群控制節點,每個集群需要至少一個master節點負責集群的管控

Node:工作負載節點,由master分配容器到這些node工作節點上,然后node節點上的docker負責容器的運行

Pod:kubernetes的最小控制單元,容器都是運行在pod中的,一個pod中可以有1個或者多個容器

Controller:控制器,通過它來實現對pod的管理,比如啟動pod、停止pod、伸縮pod的數量等等

Service:pod對外服務的統一入口,下面可以維護者同一類的多個pod

Label:標簽,用於對pod進行分類,同一類pod會擁有相同的標簽

NameSpace:命名空間,用來隔離pod的運行環境

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM