<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Kubernetes簡介 ## 來源 中文官網:https://kubernetes.io/zh 中文社區:https://www.kubernetes.org.cn/ ## 介紹 K8S主要講的就是Kubernetes,首先Kubernetes首字母為K,末尾為s,中間一共有8個字母,所以簡稱K8s ## 前置知識 - Linux操作系統 - Docker ## 課程簡介 - K8s概念和架構 - 從零搭建K8s集群 - 基于客戶端工具kubeadm搭建(簡單,最多半小時) - 基于二進制包方式(能看到內部的架構) - K8s核心概念 - Pod:K8s管理的最小單位級,是所有業務類型的基礎 - Controller:控制器,有狀態,無狀態,一次任務,定時任務,守護進程 - Service Ingress:對外暴露端口 - RBAC:安全機制,權限模型 - Helm:下載機制 - 持久化存儲 - 搭建集群監控平臺系統 - 從零搭建高可用K8s集群 - 在集群環境部署項目 ## K8S概念和特性 ### 部署發展歷程 我們的項目部署也在經歷下面的這樣一個歷程 > 傳統部署 -> 虛擬化部署時代 -> 容器部署時代 ![image-20201122104102715](https://img.kancloud.cn/92/15/9215996cdb2d636efc1dc3f6a438b05a_950x365.png) - **傳統部署時代**:早期,組織在物理服務器上運行應用程序。無法為物理服務器中的應用程序定義資源邊界,這會導致資源分配問題。例如,如果在物理服務器上運行多個應用程序,則可能會出現-一個應用程序占用大部分資源的情況,結果可能導致其他應用程序的性能下降。--種解決方案是在不同的物理服務器上運行每個應用程序,但是由于資源利用不足而無法擴展,并且組織維護許多物理服務器的成本很高。 - **虛擬化部署時代**:作為解決方案,引入了虛擬化功能,它允許您在單個物理服務器的CPU.上運行多個虛擬機(VM)。虛擬化功能允許應用程序在VM之間隔離,并提供安全級別,因為一一個應用程序的信息不能被另一應用程序自由地訪問。因為虛擬化可以輕松地添加或更新應用程序、降低硬件成本等等,所以虛擬化可以更好地利用物理服務器中的資源,并可以實現更好的可伸縮性。每個VM是一臺完整的計算機,在虛擬化硬件之上運行所有組件,包括其自己的操作系統。 - **容器部署時代**:容器類似于VM,但是它們具有輕量級的隔離屬性,可以在應用程序之間共享操作系統 (OS),因此,容器被認為是輕量級的。容器與VM類似,具有自己的文件系統、CPU、內存、進程空間等。由于它們與基礎架構分離,因此可以跨云和OS分發進行移植。 容器因具有許多優勢而變得流行起來。下面列出了容器的一些好處: - 敏捷應用程序的創建和部署:與使用VM鏡像相比,提高了容器鏡像創建的簡便性和效率。 - 持續開發、集成和部署:通過簡單的回滾(由于鏡像不可變性),提供可靠且頻繁的容器鏡像構建和部署。 - 關注開發與運維的分離:在構建/時而不是在部署時創建應用程序容器鏡像,將應用程序與基礎架構分離。 - 可觀察性:不僅可以顯示操作系統級別的信息和指標,還可以顯示應用程序的運行狀況和其他指標信號。 - 跨開發、測試和生產的環境一致性:在便攜式計算機上與在云中相同地運行。 - 云和操作系統分發的可移植性:可在Ubuntu、RHEL、RHEL、CoreOS、本地、Google Kubernetes Engine和其它任何其它地方運行。 - 以應用程序為中心的管理:提高抽象級別,從在虛擬硬件上運行OS到使用邏輯資源在OS上運行應用程序。 - 松散耦合、分布式、彈性、解放的微服務:應用程序被分解成較小的獨立部分,并且可以動態部署和管理-而不是在一臺大型單機上器體運行。 - 資源隔離:可預測的應用程序性能。 ### K8S概述 kubernetes,簡稱K8s,是用8 代替8 個字符“ubernete”而成的縮寫。是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes 的目標是讓部署容器化的應用簡單并且高效(powerful),Kubernetes 提供了應用部署,規劃,更新,維護的一種機制。 傳統的應用部署方式是通過插件或腳本來安裝應用。這樣做的缺點是應用的運行、配置、管理、所有生存周期將與當前操作系統綁定,這樣做并不利于應用的升級更新/回滾等操作,當然也可以通過創建虛擬機的方式來實現某些功能,但是虛擬機非常重,并不利于可移植性。 新的方式是通過部署容器方式實現,每個容器之間互相隔離,每個容器有自己的文件系統,容器之間進程不會相互影響,能區分計算資源。相對于虛擬機,容器能快速部署,由于容器與底層設施、機器文件系統解耦的。 > 總結: > > - K8s是谷歌在2014年發布的容器化集群管理系統 > - 使用k8s進行容器化應用部署 > - 使用k8s利于應用擴展 > - k8s目標實施讓部署容器化應用更加簡潔和高效 ### K8S概述 Kubernetes 是一個輕便的和可擴展的開源平臺,用于管理容器化應用和服務。通過Kubernetes 能夠進行應用的自動化部署和擴縮容。在Kubernetes 中,會將組成應用的容器組合成一個邏輯單元以更易管理和發現。 Kubernetes 積累了作為Google 生產環境運行工作負載15 年的經驗,并吸收了來自于社區的最佳想法和實踐。 ### K8S功能 #### 自動裝箱 基于容器對應用運行環境的資源配置要求自動部署應用容器 #### 自我修復(自愈能力) 當容器失敗時,會對容器進行重啟 當所部署的Node節點有問題時,會對容器進行重新部署和重新調度 當容器未通過監控檢查時,會關閉此容器直到容器正常運行時,才會對外提供服務 ![image-20200928101336750](https://img.kancloud.cn/d1/a3/d1a3fd9da4a14963143a4d05f1223309_849x464.png) 如果某個服務器上的應用不響應了,Kubernetes會自動在其它的地方創建一個 ![image-20201122112241092](https://img.kancloud.cn/58/02/58024960cbb917362f0689bac6e20126_810x259.png) #### 水平擴展 通過簡單的命令、用戶UI 界面或基于CPU 等資源使用情況,對應用容器進行規模擴大或規模剪裁 > 當我們有大量的請求來臨時,我們可以增加副本數量,從而達到水平擴展的效果 當黃色應用過度忙碌,會來擴展一個應用 ![image-20201122112301750](https://img.kancloud.cn/ae/a3/aea3ed0c903d8692794fc9f8d7d89e7b_819x254.png) #### 服務發現 用戶不需使用額外的服務發現機制,就能夠基于Kubernetes 自身能力實現服務發現和負載均衡 > 對外提供統一的入口,讓它來做節點的調度和負載均衡, 相當于微服務里面的網關? ![image-20200928101711968](https://img.kancloud.cn/a8/0a/a80a03fa254b0b0cf5ed5c9a145fc793_723x557.png) #### 滾動更新 可以根據應用的變化,對應用容器運行的應用,進行一次性或批量式更新 > 添加應用的時候,不是加進去就馬上可以進行使用,而是需要判斷這個添加進去的應用是否能夠正常使用 #### 版本回退 可以根據應用部署情況,對應用容器運行的應用,進行歷史版本即時回退 > 類似于Git中的回滾 #### 密鑰和配置管理 在不需要重新構建鏡像的情況下,可以部署和更新密鑰和應用配置,類似熱部署。 #### 存儲編排 自動實現存儲系統掛載及應用,特別對有狀態應用實現數據持久化非常重要 存儲系統可以來自于本地目錄、網絡存儲(NFS、Gluster、Ceph 等)、公共云存儲服務 #### 批處理 提供一次性任務,定時任務;滿足批量數據處理和分析的場景 ## K8S架構組件 ### 完整架構圖 ![image-20200928103059652](https://img.kancloud.cn/89/5b/895b839bf3d97ddd0ee9bcdfd83c390d_1150x769.png) ![image-20200928110124821](https://img.kancloud.cn/b6/c6/b6c6c43c6a9419e0ef3c0dc7de584d44_1177x670.png) ### 架構細節 K8S架構主要包含兩部分:Master(主控節點)和 node(工作節點) master節點架構圖 ![image-20201122113057343](https://img.kancloud.cn/60/d2/60d20054468ee61fcace49379f4f6a16_500x362.png) Node節點架構圖 ![image-20201122155629990](https://img.kancloud.cn/24/ec/24ec2700bdaa0c72e1c8173aa75eb6ed_852x571.png) k8s 集群控制節點,對集群進行調度管理,接受集群外用戶去集群操作請求; - **master**:主控節點 - API Server:集群統一入口,以restful風格進行操作,同時交給etcd存儲 - 提供認證、授權、訪問控制、API注冊和發現等機制 - scheduler:節點的調度,選擇node節點應用部署 - controller-manager:處理集群中常規后臺任務,一個資源對應一個控制器 - etcd:存儲系統,用于保存集群中的相關數據 - **Work node**:工作節點 - Kubelet:master派到node節點代表,管理本機容器 - 一個集群中每個節點上運行的代理,它保證容器都運行在Pod中 - 負責維護容器的生命周期,同時也負責Volume(CSI) 和 網絡(CNI)的管理 - kube-proxy:提供網絡代理,負載均衡等操作 - 容器運行環境【**Container Runtime**】 - 容器運行環境是負責運行容器的軟件 - Kubernetes支持多個容器運行環境:Docker、containerd、cri-o、rktlet以及任何實現Kubernetes CRI (容器運行環境接口) 的軟件。 - fluentd:是一個守護進程,它有助于提升 集群層面日志 ## K8S核心概念 ### Pod - Pod是K8s中最小的單元 - 一組容器的集合 - 共享網絡【一個Pod中的所有容器共享同一網絡】 - 生命周期是短暫的(服務器重啟后,就找不到了) ### Volume - 聲明在Pod容器中可訪問的文件目錄 - 可以被掛載到Pod中一個或多個容器指定路徑下 - 支持多種后端存儲抽象【本地存儲、分布式存儲、云存儲】 ### Controller - 確保預期的pod副本數量【ReplicaSet】 - 無狀態應用部署【Deployment】 - 無狀態就是指,不需要依賴于網絡或者ip - 有狀態應用部署【StatefulSet】 - 有狀態需要特定的條件 - 確保所有的node運行同一個pod 【DaemonSet】 - 一次性任務和定時任務【Job和CronJob】 ### Deployment - 定義一組Pod副本數目,版本等 - 通過控制器【Controller】維持Pod數目【自動回復失敗的Pod】 - 通過控制器以指定的策略控制版本【滾動升級、回滾等】 ![image-20201122161601349](https://img.kancloud.cn/f2/90/f290fb1489b139d555d2f2267f536044_284x147.png) ### Service - 定義一組pod的訪問規則 - Pod的負載均衡,提供一個或多個Pod的穩定訪問地址 - 支持多種方式【ClusterIP、NodePort、LoadBalancer】 ![image-20201122161132055](https://img.kancloud.cn/aa/5c/aa5cfcaf790706296b82ddb79ffd1ab6_239x252.png) 可以用來組合pod,同時對外提供服務 ### Label label:標簽,用于對象資源查詢,篩選 ![image-20201122161713638](https://img.kancloud.cn/67/31/6731c0f87d17e62a70f56bb6de9e7f4c_477x229.png) ### Namespace 命名空間,邏輯隔離 - 一個集群內部的邏輯隔離機制【鑒權、資源】 - 每個資源都屬于一個namespace - 同一個namespace所有資源不能重復 - 不同namespace可以資源名重復 ### API 我們通過Kubernetes的API來操作整個集群 同時我們可以通過 kubectl 、ui、curl 最終發送 http + json/yaml 方式的請求給API Server,然后控制整個K8S集群,K8S中所有的資源對象都可以采用 yaml 或 json 格式的文件定義或描述 如下:使用yaml部署一個nginx的pod ![image-20201122162612448](https://img.kancloud.cn/41/f1/41f1b2f3d7029b41d8813c5d72334ed3_675x353.png) ## 完整流程 ![image-20201122163512535](https://img.kancloud.cn/0c/7d/0c7dd1ee42a9117b06c3424fd1a78537_870x192.png) - 通過Kubectl提交一個創建RC(Replication Controller)的請求,該請求通過APlserver寫入etcd - 此時Controller Manager通過API Server的監聽資源變化的接口監聽到此RC事件 - 分析之后,發現當前集群中還沒有它所對應的Pod實例 - 于是根據RC里的Pod模板定義一個生成Pod對象,通過APIServer寫入etcd - 此事件被Scheduler發現,它立即執行執行一個復雜的調度流程,為這個新的Pod選定一個落戶的Node,然后通過API Server講這一結果寫入etcd中 - 目標Node上運行的Kubelet進程通過APiserver監測到這個"新生的Pod.并按照它的定義,啟動該Pod并任勞任怨地負責它的下半生,直到Pod的生命結束 - 隨后,我們通過Kubectl提交一個新的映射到該Pod的Service的創建請求 - ControllerManager通過Label標簽查詢到關聯的Pod實例,然后生成Service的Endpoints信息,并通過APIServer寫入到etod中, - 接下來,所有Node上運行的Proxy進程通過APIServer查詢并監聽Service對象與其對應的Endponts信息,建立一個軟件方式的負載均衡器來實現Service訪問到后端Pod的流量轉發功能
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看