3.2.1 K8S核心概念及名詞講解(kubernetes 前言篇)

目錄

1、Docker 容器的優勢

2、使用 Docker 時有哪些限制

3、爲什麼需要kubernetes

4、kubernetes的用途

5、kubernetes核心概念

    5.1、kubernetes對象都有兩個關鍵字段

    5.2、kubernetes集羣的兩種角色

        5.2.1、Master

        5.2.2、Node

5.3、Pod

        5.3.1、Pod的特殊組成結構

        5.3.2、Pod的兩種類型

5.4、Label(標籤)

5.5、Replication Controller(RC)

5.6、Deployment

5.7、StatefulSet(狀態集)

5.8、Service(服務)

5.9、Volume(存儲卷)

5.10、Namespace

5.11、Annotation(註解)

5.12、Kubelet

5.13、kubectl

6、kubernetes術語

6.1、k8s核心概念


視頻中老師打開的文檔路徑:E:\meWork\study\project\subject-3\subject-3-k8s\專題三-Kubernetes_學習文檔-N.docx

1、Docker 容器的優勢

模塊化、層和鏡像版本控制、回滾、快速部署

2、使用 Docker 時有哪些限制

Docker 本身非常適合管理單個容器。但隨着您開始使用越來越多的容器和容器化應用程序,並把它們劃分成數百個部分,很可能會導致管理和編排變得非常困難。最終,您需要後退一步,對容器實施分組,以便跨所有容器提供網絡、安全、遙測等服務。於是,Kubernetes 應運而生。

3、爲什麼需要kubernetes

Kubernetes:又稱爲k8s,或簡稱爲kube
k8s:首字母爲k,首字母與尾字母之間有8個字符、尾字母爲s,所以簡稱k8s

        由於真實的生產型應用會涉及多個容器。這些容器必須跨多個服務器主機進行部署。
提供了一個便捷有效的平臺,在物理機和虛擬機集羣上調度、運行容器,可以將許多相同任務交給容器來執行。
            Kubernetes還提供了與聯網、存儲、安全性、遙測,等其他服務集成整合,來提供全面的容器基礎架構。

4、kubernetes的用途

        1、跨多臺主機進行容器編排
        2、更加充分地利用硬件,最大程度獲取運行企業應用所需的資源
        3、有效管控應用部署和更新,並實現自動化操作
        4、掛載和增加存儲,用於運行有狀態的應用
        5、快速、按需擴展容器化應用及其資源
        6、對服務進行聲明式管理,保證所部署的應用始終按照部署的方式運行
        7、利用自動佈局、自動重啓、自動複製、自動擴展功能,對應用實施狀況檢查、自我修復

    但是Kubernetes需要依賴其他項目來全面提供這些經過編排的服務,這些功能、項目如下:
              功能   :    項目
        1、註冊表:Atomic註冊表、Docker註冊表
        2、聯網:OpenSwitch和智能邊緣路由
        3、遙測:heapster、kibana、hawkular、elastic
        4、安全性:LDAP、SELinux、RBAC、OAUTH等項目,以及多租戶層來實現
        5、自動化:參照Ansible手冊進行安裝、集羣生命週期管理
        6、服務:自帶預建版的應用模式的內容目錄來提供 

5、kubernetes核心概念

        Kubernetes由各種資源對象來描述整個集羣的運行狀態。
        可以看作資源對象的有:Node、Pod、Replication Controller、Service
        這些對象都需要通過調用Kubernetes api來進行創建、修改、刪除,並保存在etcd庫。

    5.1、kubernetes對象都有兩個關鍵字段

        每個kubernetes對象都有兩個關鍵字段:
            Object Spec:描述對象所期望達到的狀態
            Object Status:描述該對象的實際狀態

    5.2、kubernetes集羣的兩種角色

        5.2.1、Master

            master是集羣的控制節點,通常會佔據一個獨立的服務器(如果要達到高可用部署:建議用3臺服務器)。
            master是整個集羣的“首腦”,如果它宕機或不可用,那麼對集羣內容器應用的管理都將失效。
            master也可以作爲工作負載節點,但在企業中儘量將master只作爲一個控制節點

master節點上運行的一組關鍵進程
    kube-apiserver(Kubernetes API Server):提供HTTP Rest接口的關鍵服務進程,是集羣控制的入口進程
                                                                        是Kubernetes裏所有資源的增、刪、改、查等操作的唯一入口
    kube-controller-manager(Kubernetes Controller Manager):Kubernetes裏所有資源對象的“大總管”
    kube-scheduler(Kubernetes Scheduler):負責資源調度的進程(Pod調度),相當於公交公司的“調度室”

另外,在master節點上需要啓動一個etcd服務,來保存kubernetes裏的所有資源對象。

        5.2.2、Node

除了Master,Kubernetes集羣中的其他機器被稱爲Node節點,在較早的版本中也被稱爲Minion。
Node節點是Kubernetes集羣的工作負載節點,每個Node都會被Master分配一下工作(Docker容器),當某個Node宕機時,其上的工作會被master自動轉移到其他節點上去。

Node節點上運行的一組關鍵進程
    kubelet:負責Pod對應的容器創建、啓動、停止等任務,與master節點密切協作,實現集羣管理的基本功能
    kube-proxy:實現Kubernetes Service的通信與負載均衡機制
    Docker Engine(Docker引擎):負責本機的容器創建和管理工作
默認情況下kubelet會向master註冊自己,一旦node被納入集羣管理範圍,kubelet進尺就會定時向master彙報自身的情況。
彙報的內容如:操作系統、Docker版本、機器的CPU、內存情況、當前有哪些Pod在運行
當某個node超過指定時間不上報信息時,會被master判斷爲“失聯”,node的狀態被標記爲不可用(Not Ready),隨後master會觸發“負載大轉移”的自動流程

5.3、Pod

Pod是Kubernetes最重要、最基本的概念,每個Pod都有一個特殊的Pause容器(根容器),每個Pod還包含一個或多個緊密相關的用戶業務容器(User container)

Pause容器:保證Pod的健康

用戶業務容器:真實的docker容器

        5.3.1、Pod的特殊組成結構

            1、在一組容器作爲一個單元時,需要一個與業務無關、不容易死亡的容器(Pause容器),用這個容器的狀態代表整組容器的狀態
            2、Pod裏的多個業務容器:共享Pause容器的IP、共享Pause容器掛接的Volume(數據卷)
                這樣就簡化了業務容器之間的通信、文件共享的問題

        在Kubernetes中,一個Pod裏的容器與另外主機上的Pod能夠直接通信,這是採用虛擬網絡層技術實現的(eg:Flannel、OpenSwitch等)

        5.3.2、Pod的兩種類型

            1、普通的Pod
                1、普通Pod一旦被創建,就會被放入到etcd中存儲;
                2、隨後會被Kubernetes Master調度到某個具體的Node上,並進行綁定(binding);
                3、隨後該Pod被對應的Node上的kubelet進程實例化成一組相關的Docker容器,並啓動起來;
                    在默認情況下,當Pod裏的某個容器停止時,Kubernetes會自動檢測到這個問題,並重啓這個Pod(重啓Pod裏的所有容器),如果Pod所在的Node宕機,則會將這個Node上的所有Pod重新調度到其他節點上
            2、靜態Pod(Static Pod)
                不存放在Kubernetes的etcd庫,存放在某個具體的Node上的具體文件中,並且只在該Node上啓動運行。

Pod、容器與Node的關係圖如下圖:

5.4、Label(標籤)

一些常用等label示例如下:

版本標籤:"release" : "stable"

                 "release" : "canary"

環境標籤:"environment" : "dev"

                 "environment" : "production"

dev就是development(開發)
pro就是production(生產)

架構標籤:"tier" : "frontend"

                 "tier" : "backend"

                 "tier" : "middleware"

分區標籤:"partition" : "customerA"

                 "partition" : "customerB"

質量管控標籤:"track" : "daily"

                        "track" : "weekly"

5.5、Replication Controller(RC)

    RC也是kubernetes系統中的核心概念之一
    RC是定義一個期望的場景,聲明某種Pod的副本數量在任意時刻都符合某個預期值。
    RC定義的3個部分:
        1、Pod期待的副本數(replicas);
        2、用於篩選目標Pod的Label Selector;
        3、當Pod的副本數量小於預期數量時,用於創建新Pod的Pod模板(template)

5.6、Deployment

    是kubernetes v1.2引入的概念,目的是爲了更好的解決Pod的編排問題。Deployment內部使用Replica Set實現。
    Deployment可以看作RC的一次升級,兩者的相似度超過90%。
    Deployment相對於RC的一個最大升級是我們隨時知道當前Pod“部署”的進度。實際上由於一個Pod的創建、調度、綁定節點及在目標Node上啓動對應的容器這一完整過程需要一定的時間,所以我們期待系統啓動N個Pod副本的目標狀態,實際上是一個連續變化的“部署過程”導致的最終狀態。
Deployment的使用場景:
    1、創建一個Deplyment對象來生成對應的Replica Set,並完成Pod副本的創建過程。
    2、檢查Deployment的狀態來看部署動作是否完成(Pod副本的數量是否達到預期的值)。
    3、更新Deployment以創建新的Pod(eg:鏡像升級)。
    4、如果當前Deployment不穩定,則回滾到一個早先的Deployment版本。
    5、暫停Deployment,以便於一次性修改多個PodTemplateSpec 的配置項,之後再恢復Deployment,進行新的發佈。
    6、擴展Deployment以應對高負載。
    7、查看Deployment的狀態,以此作爲發佈是否成功的指標。
    8、清理不再需要的舊版本ReplicaSets。

5.7、StatefulSet(狀態集)

    Pod的管理對象都是無狀態的服務。(RC、Deployment、DaemonSet、Job)
    MySQL集羣、MongoDB集羣、Kafka集羣、Zookeepere集羣,有如下4個共同點
        1、每個節點都有固定的身份ID,集羣中的成員通過這個ID相互發現、通信
        2、集羣的規模是比較固定的,集羣規模不能隨意變動
        3、集羣裏的每個節點都是有狀態的,通常會持久化數據到永久存儲中
        4、如果磁盤損壞,則集羣裏的某個節點無法正常運行,集羣功能受損

        StatefulSet是集羣中Pod掛接的某種共享存儲,爲了在其他節點上恢復某個失敗的節點時使用
    Kubernetes從v1.4版本開始引入PetSet這個新的資源對象,在v1.5版本更名爲StatefulSet。
    StatefulSet可以看作Deployment/RC的一個特殊變種,它有如下3個特性
        1、StatefulSet裏的每個Pod都有穩定、唯一的網絡標識,用來與集羣內其他成員發現、通信
            假設StatefulSet的名字叫kafka,那麼第一個Pod叫kafka-0,第二個Pod叫kafka-1......以此類推
        2、StatefulSet控制Pod副本的啓動、停止順序
            操作第n個Pod時,前n-1個Pod已經是運行且準備好的狀態
        3、StatefulSet裏的Pod採用穩定的持久化存儲卷
            通過PV/PVC來實現,刪除Pod時,默認不會刪除與StatefulSet相關的存儲卷(爲了保證數據的安全)
    在每個StatefulSet的定義中要聲明它屬於哪個Headless Service
    Headless Service與普通Service的關鍵區別在於,它沒有Cluster IP
    StatefulSet在Headless Service的基礎上又爲StatefulSet控制的每個Pod實例創建了一個DNS域名,這個域名的格式爲:
$(podname).$(headless service name)
eg:一個3節點的Kafka的StatefulSet集羣,對應的Headless Service的名字爲kafka,StatefulSet的名字爲kafka,則StatefulSet裏面的3個Pod的DNS名稱分別爲kafka-0.kafka、kafka-1.kafka、kafka-2.kafka,這些DNS名稱可以直接在集羣的配置文件中固定下來

5.8、Service(服務)

    Service也是Kubernetes裏最核心的資源對象之一。
    Service其實就是我們說的微服務架構中的一個“微服務
    Pod、RC、Service的邏輯關係如下圖:

5.9、Volume(存儲卷)

    與docker的Volume比較類似,但不等價。
    Volume是Pod中能夠被多個容器訪問的共享目錄。
    Kubernetes支持多種類型的Volume,eg:Gluster、Ceph

5.10、Namespace

    Namespace(命名空間):用於實現多租戶的資源隔離
                            通過將集羣內部的資源對象“分配”到不同的Namespace中,形成邏輯上的分組,便於不同分組在共享使用集羣資源的同時,還能被分別管理。

5.11、Annotation(註解)

    與Label類似,也使用key/value鍵值對的形式進行定義。
    只是Annotation可以用戶任意命名。
    用Annotation記錄的信息如下:
        1、build信息、release信息、Docker鏡像信息等
            eg:時間戳、release id號、PR號、鏡像hash值、docker registry地址
        2、日誌庫、監控庫、分析庫、等資源庫的地址信息
        3、程序調試工具信息

            eg:工具、版本號
        4、團隊等聯繫信息
            eg:電話號碼、負責人名稱、網址

5.12、Kubelet

    運行在節點上的服務,可讀取容器清單(container manifest),確保指定的容器啓動並運行。

5.13、kubectl

    Kubernetes 的命令行配置工具

在Kubernetes系統中還有許多輔助配置的資源對象,eg:LimitRange、Resurce。另外,一些系統內部使用的對象Binding、Event等請參考Kubernetes的API文檔。

6、kubernetes術語

官方把 kubernetes 術語分爲 12 個分類:系統結構、社區、核心對象、擴展、基礎、網絡、操作、安全、存儲、工具、用戶類型、工作負載

想要了解更多 kubernetes 術語,請參照官方術語表,地址:https://kubernetes.io/docs/reference/glossary/?fundamental=true

常用的術語有(這裏列了23個):Pods、Labels、Namespace、Replication Controller、Node、ReplicaSets、Services、
Volumes、PV/PVC/StorageClass、Deployment、Secret、StatefulSet、DaemonSet、ervice Account、CronJob、
Job、Security Context 和 PSP、Resource Quotas、Network Policy、Ingress、ThirdPartyResources、ConfigMap、
PodPreset。
Replication Controller的一次升級是ReplicaSets,ReplicaSets的一次升級是Deployment

6.1、k8s核心概念

 

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