一文把Docker、Kubernetes搞懂:什么是Docker?什么是Kubernetes?Docker和Kubernetes有什么關系和區別?通俗解釋Docker、Kubernetes

一、Docker解決的問題

1、統一標準

● 應用構建
○ Java、C++、JavaScript——編程各異
○ 打成軟件包
○ .exe(類似Windows,最終也只是生產exe執行)
○ 使用docker build … 打包成 鏡像——這就類似于exe

● 應用分享
○ 所有軟件的鏡像放到一個指定地方 docker hub
○ 類似——安卓,應用市場

● 應用運行
○ 統一標準的 鏡像
○ docker run 就好(以前的方法是java -ja…、C++編譯再整很多東西等等都不一樣)

● …

2、容器化時代

區別于虛擬化技術:

  • 容器化其實是Linux做的,docker對此進行簡單封裝。docker不帶操作系統,既然有了操作系統,只需做一些差異化的工作,所以每一個應用只是差異化環境
    在這里插入圖片描述
  • 為了隔離應用,使用了虛擬化。但是鏡像系統都很大占用。移植起來,需要應用帶上整個虛擬機和環境,一起移植到其他設備——非常重量級
    在這里插入圖片描述

3、資源隔離

● cpu、memory資源隔離與限制
● 訪問設備隔離與限制
● 網絡隔離與限制
● 用戶、用戶組隔離限制
● …

4、架構

在這里插入圖片描述
● Docker_Host:
○ 安裝Docker的主機
● Docker Daemon:
○ 運行在Docker主機上的Docker后臺進程
● Client:
○ 操作Docker主機的客戶端(命令行、UI等)
● Registry:
○ 鏡像倉庫
○ Docker Hub
● Images:
○ 鏡像,帶環境打包好的程序,可以直接啟動運行
● Containers:
○ 容器,由鏡像啟動起來正在運行中的程序

交互邏輯:

裝好Docker,然后去 軟件市場 尋找鏡像,下載并運行,查看容器狀態日志等排錯

二、Kubernetes基本

1. 首先解決Kubernetes的出現解決了什么問題?

在這里插入圖片描述

  • 傳統的部署模式中,應用部署在一個操作系統中。如果一個應用內存泄露了,就會把其他應用擠下線,非常不安全
  • 虛擬化的部署中,一個應用炸了只能影響到虛擬機內
  • 容器化的部署中,在原有的操作系統中有了容器化的運行環境,然后應用就會以容器化的形式運行起來。也能做到資源隔離且輕便

容器化也會帶來一個問題:當服務模塊眾多,每個小項目的微服務都已以容器化的形式部署,并且放到很多臺服務器。以前用docker run跑一兩個應用,人肉可以運維和操作 ,但是如果幾千個容器的話,就難以管理 。因此大規模容器編排系統應運而生(編:同一個應用的容器劃分成一組;排:比如A應用在這個服務器不夠了,就在別的服務器拿來擴充幾個

2. kubernetes特性

kubernetes具有以下特性:
● 服務發現和負載均衡:

  • 服務發現:發現宕機有問題的容器,不降任務給他
  • 負載均衡:Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大, Kubernetes 可以負載均衡并分配網絡流量,從而使部署穩定。

● 存儲編排
Kubernetes 允許你自動掛載你選擇的存儲系統,例如本地存儲、公共云提供商等。應用需要內存則找k8s要,k8s開辟一塊存儲空間。應用刪了后存儲也沒了
● 自動部署和回滾
你可以使用 Kubernetes 描述已部署容器的所需狀態,它可以以受控的速率將實際狀態 更改為期望狀態。例如,你可以自動化 Kubernetes 來為你的部署創建新容器, 刪除現有容器并將它們的所有資源用于新容器。——回滾到上一次部署的版本
● 自動完成裝箱計算
Kubernetes 允許你指定每個容器所需 CPU 和內存(RAM)。 當容器指定了資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。——指定了這么多內存,超過了就會被殺掉
● 自我修復
Kubernetes 重新啟動失敗的容器、替換容器、殺死不響應用戶定義的 運行狀況檢查的容器,并且在準備好服務之前不將其通告給客戶端。——一個機器掛了,可以將其中的容器部署到其他機器
● 密鑰與配置管理
Kubernetes 允許你存儲和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。 你可以在不重建容器鏡像的情況下部署和更新密鑰和應用程序配置,也無需在堆棧配置中暴露密鑰。

Kubernetes 為你提供了一個可彈性運行分布式系統的框架。 Kubernetes 會滿足你的擴展要求、故障轉移、部署模式等。
例如,Kubernetes 可以輕松管理系統的 Canary 部署。

二、Kubernetes架構

1. 工作方式

Kubernetes Cluster = N Master Node + N Worker Node:N主節點+N工作節點; N>=1

2. 組件架構

工作起來的核心組件如下圖的右側所示:
在這里插入圖片描述

為便于理解,以硅谷集團部署飛機項目為例:

  1. 一個飛機項目下設的的三個節點即東廠、西廠、南廠 ——node
  2. 主節點master為硅谷總部——control plane
  3. 決定要干什么的決策者(任何人如廠里的都找不到決策者)——controller manager
  4. 整個集團運行的核心數據得用資料庫保存——etcd(類似redis的存儲庫,就像mysql)
  5. 負責將數據存進資料庫、干雜活則需要秘書干——API server
  6. 負責看哪些廠可以做這個項目,需要調度者。但是當調度者決定哪個廠搞了后,需要告訴秘書部,秘書部存檔進資料庫后再告訴某個廠——Scheduler
  7. 當決定后,秘書部需要告訴廠長——kubelet
  8. 當有領導視察的時候,不知道飛機項目在哪個廠,則需要問門衛(門衛消息互通,問一個即可)——kube-proxy
  9. 跟外部合作時,是外聯部——Cloud controller manager
    在這里插入圖片描述

3. 工作演示

  • 當廠長kubelet發現廠里有飛機項目做不下去了之后,就會發現并上報給秘書api-server,
  • 秘書api-server再通報給決策者controller-manager說西廠的飛機項目搞不定了,
  • 決策者說給別的廠搞把,于是告訴秘書,秘書再把決策存入數據庫etcd,秘書再將決策通知調度者scheduler。
  • 調度者隨后動態地計算其他廠哪些適合搞飛機項目,其方案也會存入數據庫etcd。
  • 東廠每天都會和秘書通電話,當知道決策之后就會開始在東廠開始飛機項目

在這里插入圖片描述

  • 當整個項目搞起來,別人要訪問則需要門衛大爺kube-proxy。
  • 門衛大爺則負責接受傳達消息。當其他項目如造船項目應用1需要參觀造車項目應用3的時候,則去找門衛大爺,門衛大爺再告訴他應用三是在哪里。
  • 故門衛大爺是打通整個網絡訪問的,誰想要訪問、去哪訪問
    在這里插入圖片描述
  • 需要說明的是,整個集團架構,master總部其實是一個傀儡,真正決定的是程序員kubectl——挾天子以令諸侯
    在這里插入圖片描述


---------------------
作者:別出BUG求求了
來源:CSDN
原文:https://blog.csdn.net/weixin_39589455/article/details/124459859
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/283820.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283820.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283820.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python-高階函數

#encodingUTF-8import sys # 高階函數高階函數實際上是參數可接受函數的函數即參數為函數的函數 # map()map()接收兩個參數,一個是函數,一個是序列,將此函數分別作用于該序列的每個元素,返回處理后的序列結果def c2(x): return x…

程序員雙手飛快敲鍵盤的時候是在敲代碼嗎?

當你看到一個程序員的兩只手在鍵盤上上下翻飛,行云流水的時候,多半不是在敲擊代碼大概率是在跟產品經理撕逼討論需求另一種可能就是在跟測試打口水仗10%幾率是在論壇碼字摸魚或者和人家開噴了。1%幾率是在跟MM聊天可以手速飛快而不需要停下思考的代碼&am…

erlang-17版本的編碼方式

最近在騰訊云租了個云主機:鏡像提供方:選擇服務市場 :多語言環境(Centos 7.0 64位 Python Perl Ruby Erlang ) 他們集成軟件安裝的是erlang-17版本,我之前用erlang-16版本一直沒遇到什么問題; 這…

幾分鐘上線一個網站 真是神器

1、ToolJet 簡介 ToolJet 是一個開源的低代碼框架,可以快速構建和部署內部工具,而無需工程團隊付出太多努力。您可以連接到您的數據源,例如數據庫(如 PostgreSQL、MongoDB、Elasticsearch 等)、API 端點(To…

翻譯:用戶變量(User-Defined Variable)(已提交到MariaDB官方手冊)

本文為mariadb官方手冊:User-Defined Variables的譯文。 原文:https://mariadb.com/kb/en/user-defined-variables/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/user-defined-variables/ 用戶變量是指由用戶創建&#xff0…

移植Python3到TQ2440(一)

平臺 硬件:TQ2440 64MB內存 256MB NandFlashbootloader:U-Boot 2015.04kernel:linux-4.9Python: Python-3.6.0工具鏈:arm-none-linux-gnueabi-gcc 4.8.3概述 現在樹莓派很火,在樹莓派上面用戶可以通過Python來控制板…

WinForm(六)組合布局屬性

WinForm是基于控件的,不像codemark的架構,可以非常靈活的用mark來布局,它只能用控件布局屬性和窗口控件來完成對UI的布局。容器控件有一組控件叫容器控件,對布局特別有作用,它們分別是:TableLayoutPanel&am…

Qt 網絡編程

QT 網絡編程 TCP 編程 模塊引入 QT network 頭文件 #include <QTcpServer> // TCP服務器端使用 #include <QTcpSocket> // TCP服務器和客戶端都使用 編程流程 服務端 1&#xff09;實例化 QTcpServer 對象 -----------------------------> socket 2&#x…

HDU 5037 Frog(2014年北京網絡賽 F 貪心)

開始就覺得有思路&#xff0c;結果越敲越麻煩。。。   題意很簡單&#xff0c;就是說一個青蛙從0點跳到m點&#xff0c;最多可以跳l的長度&#xff0c;原有石頭n個&#xff08;都僅表示一個點&#xff09;。但是可能跳不過去&#xff0c;所以你是上帝&#xff0c;可以隨便在哪…

Kafka高性能高吞吐的原因總結

1、磁盤順序讀寫 保證了消息的堆積 順序讀寫 磁盤會預讀,預讀即在讀取的起始地址連續讀取多個頁面&#xff0c;主要時間花費在了傳輸時間,而這個時間兩種讀寫可以認為是一樣的。 隨機讀寫 因為數據沒有在一起&#xff0c;將預讀浪費掉了&#xff0c;需要多次尋道和旋…

日利率

2019獨角獸企業重金招聘Python工程師標準>>> 利率計算 轉載于:https://my.oschina.net/u/3342652/blog/1649028

linux下使用tar命令

解壓語法&#xff1a;tar [主選項輔選項] 文件或者目錄 使用該命令時&#xff0c;主選項是必須要有的&#xff0c;它告訴tar要做什么事情&#xff0c;輔選項是輔助使用的&#xff0c;可以選用。主選項&#xff1a;c 創建新的檔案文件。如果用戶想備份一個目錄或是一些文件&…

Kafka 安裝詳解

注意&#xff1a;確保有JDK1.8版本及以上 官方文檔&#xff1a;https://kafka.apache.org/quickstart 清華鏡像下載&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/ 首先下載安裝包&#xff0c;在linux及Windows都可以使用。 1. Centos 安裝部署 1.1 下載 將下…

【Maui正式版】創建可跨平臺的Maui程序,以及有關依賴注入、MVVM雙向綁定的實現和演示...

前言&#xff1a;Maui終于在2022年8月9日推送出來了。今兒就迫不及待來把玩一下先。A、我本地已有VS2022&#xff0c;不過版本比較老&#xff0c;此處選擇更新。工具 -> 獲取功能和更新里面&#xff0c;可以獲取到新版本更新。B、最新版本是17.3.0&#xff0c;我本地只有17.…

學go語言能做什么工作?

Go語言主要用作服務器端開發&#xff0c;其定位是用來開發“大型軟件”的&#xff0c;適合于很多程序員一起開發大型軟件&#xff0c;并且開發周期長&#xff0c;支持云計算的網絡服務。Go語言能夠讓程序員快速開發&#xff0c;并且在軟件不斷的增長過程中&#xff0c;它能讓程…

WebSQL存儲

2019獨角獸企業重金招聘Python工程師標準>>> WebSQL這種存儲技術&#xff0c;相對于學過數據庫的人來說&#xff0c;還是比較容易理解和上手的&#xff0c;主要就是它的存儲風格和我們一般所學的SQL Server 和Oracle比較像&#xff0c;對于HTML5來說&#xff0c;當然…

軟件工程第一次作業補充

1.關注《構建之法》的作者鄒欣老師的博客&#xff1b;2.花二十分鐘寫一個能自動生成小學四則運算題目的“軟件”&#xff0c;要求除了整數以外&#xff0c;還要支持真分數的四則運算。將代碼上傳至coding.net,并將地址發布至自己的博客。代碼地址&#xff1a; https://coding.n…

抖音服務器帶寬有多大,才能供上億人同時刷?

最近看到一個有意思的提問&#xff1a;抖音服務器帶寬有多大&#xff0c;為什么能夠供那么多人同時刷&#xff1f;今天來給小伙伴們科普一下。 抖音&#xff0c;百度&#xff0c;阿里云&#xff0c;騰訊都是自建的數據中心&#xff0c;都是 T 級別出口帶寬&#xff08;總出口帶…

ASP.NET Core 5.0中的Host.CreateDefaultBuilder執行過程

通過Rider調試的方式看了下ASP.NET Core 5.0的Web API默認項目&#xff0c;重點關注Host.CreateDefaultBuilder(args)中的執行過程&#xff0c;主要包括主機配置、應用程序配置、日志配置和依賴注入配置這4個部分。由于水平和篇幅有限&#xff0c;先整體理解、建立框架&#xf…

404和302

為什么80%的碼農都做不了架構師&#xff1f;>>> 404 php中用header()函數是可以為返回頁面添加404的頭信息的&#xff0c;從而提示瀏覽器該網頁找不到了。 所以可以使用&#xff1a;header("HTTP/1.0 404 Not Found");或者&#xff1a;header("Stat…