云原生部署_k8s入門

K8S官網文檔:https://kubernetes.io/zh/docs/home/

Kubernetes是什么

Kubernetes 是用于自動部署、擴縮管理容器化應用程序的開源系統。 Kubernetes 源自 ,Google 15 年生產環境的運維經驗同時凝聚了社區的最佳創意和實踐。簡稱K8s.

Kubernetes:作為開源的容器編排引擎,用來對容器化應用進行自動化部署、 擴縮和管理。

K8s核心架構

????????K8S 是屬于Master-Worker架構,即有 Master 節點負責核心的調度、管理和運維,Worker 節點則執行用戶的程序。但是在 K8S 中,主節點一般被稱為Master Node ,而從節點則被稱為WorkerNode 或者 Node。

????????所有 Master Node 和 Worker Node 組成了K8S 集群,同一個集群可能存在多個 Master Node 和 Worker Node。(不是單個主節點)。

? ? ? ? 為了實現對應的能力,不同類型的節點具有不同的組件。

Master Node組件

  • kube-apiserver。K8S 的請求入口服務。API Server 負責接收 K8S 所有請求(來自 UI 界面或者 CLI 命令行工具),然后,API Server 根據用戶的具體請求,去通知其他組件干活。
  • Scheduler。K8S 所有 Worker Node 的調度器。當用戶要部署服務時,Scheduler 會選擇最合適的 Worker Node(服務器)來部署。
  • Controller Manager。K8S 所有 Worker Node 的監控器。Controller Manager 有很多具體的 Controller,Node Controller、Service Controller、Volume Controller 等。Controller 負責監控和調整在 Worker Node上部署的服務的狀態,比如用戶要求 A 服務部署 2 個副本,那么當其中一個服務掛了的時候,Controller 會馬上調整,讓 Scheduler 再選擇一個 Worker Node 重新部署服務。
  • etcd。K8S 的存儲服務。etcd 存儲了 K8S 的關鍵配置和用戶配置。K8S 中僅 API Server 才具備讀寫權限,其他組件必須通過 API Server 的接口才能讀寫數據。

Worker Node組件

  • Kubelet。Worker Node 的監視器,以及與 Master Node 的通訊器。Kubelet 是 Master Node 安插在Worker Node 上的“眼線”,它會定期向 Master Node 匯報自己 Node 上運行的服務的狀態,并接受來自Master Node 的指示采取調整措施。負責控制所有容器的啟動停止,保證節點工作正常。
  • Kube-Proxy。K8S 的網絡代理。Kube-Proxy 負責 Node 在 K8S 的網絡通訊、以及對外部網絡流量的負載均衡。
  • Container Runtime。Worker Node 的運行環境。即安裝了容器化所需的軟件環境確保容器化程序能夠跑起來,比如 Docker Engine運行環境。

K8s網絡模型

K8s內部存在4中不同的網絡通信:

  1. 同一個Pod內容器之間的通信
  2. 不同Pod之間通信
  3. Pod和Service之間通信
  4. 集群外部流量和Service之間

K8S為Pod和Service資源對象分別使用了各自的專有網絡,Pod網絡由K8S的網絡插件配置實現,而Service網絡則由K8S集群指定。?

K8s實戰/kubectl命令使用

kubectl是apiserver的客戶端工具,工作在命令行下,能夠連接apiserver實現各種增刪改查等操作。kubectl官方使用文檔:https://kubernetes.io/zh/docs/reference/kubectl/overview/

NameSpace(命名空間)

  • 將同一集群中的資源劃分為相互隔離的組。
  • 同一命名空間內的資命名稱要唯一.
  • 命名空間是用來隔離資源的,不隔離網絡。

創建namespace

1. 命令方式

kubectl create namespace tuling

2. yaml方式

新建一個名為 my-namespace.yaml 的 YAML 文件

apiVersion: v1

kind: Namespace

metadata:

????????name: tulingmall

運行:kubectl apply -f my-namespace.yaml

刪除namespace

kubectl delete namespace tuling

kubectl delete -f my-namespace.yaml

Pod

Pod是可以在 Kubernetes 中創建和管理的、最小的可部署的計算單元。

Pod中可以有一個或多個容器,這些容器共享存儲、網絡、以及怎樣運行這些容器的聲明。

Deployment

Deployment負責創建和更新應用程序的實例,使Pod擁有多副本,自愈,擴縮容等能力。

創建Deployment后,Kubernetes Master 將應用程序實例調度到集群中的各個節點上。如果托管實例的節點關閉或被刪除,Deployment控制器會將該實例替換為群集中另一個節點上的實例。這提供了一種自我修復機制來解決機器故障維護問題。

?kubectl create deployment // 可以創建一個應用部署deployment與pod

1.?kubectl create deployment my-tomcat --image=tomcat:9.0.55

?#my-tomcat表示pod的名稱 --image表示鏡像的地址

2.?kubectl get deployment

#查看一下deployment的信息

3.?kubectl delete deployment my-tomcat

#刪除deployment

4.?kubectl logs my-tomcat-6d6b57c8c8-n5gm4

#查看Pod打印的日志

5.?#使用 exec 可以在Pod的容器中執行命令

kubectl exec my-tomcat-6d6b57c8c8-n5gm4 -- env? #使用 env 命令查看環境變量

kubectl exec my-tomcat-6d6b57c8c8-n5gm4 -- ls /? ?# 查看容器的根目錄下面內容

kubectl exec my-tomcat-6d6b57c8c8-n5gm4 -- sh? ? #進入Pod容器內部并執行bash命令,如果想退出容器可以使用exit命令

Service

????????Service是一個抽象層,它定義了一組Pod的邏輯集,并為這些Pod支持外部流量暴露、負載均衡和服務發現

????????盡管每個Pod 都有一個唯一的IP地址,但是如果沒有Service,這些IP不會暴露在集群外部。Service允許您的應用程序接收外部流量。Service也可以用在ServiceSpec標記type的方式暴露,type類型如下:

  • ClusterIP(默認):在集群的內部IP上公開Service。這種類型使得Service只能從集群內訪問。
  • NodePort:使用NAT在集群中每個選定Node的相同端口上公開Service。使用 <NodeIP>:<NodePort> 從集群外部訪問Service。是ClusterIP的超集。
  • LoadBalancer:在當前云中創建一個外部負載均衡器(如果支持的話),并為Service分配一個固定的外部IP。是NodePort的超集。
  • ExternalName:通過返回帶有該名稱的CNAME記錄,使用任意名稱(由spec中的externalName指定)公開Service。不使用代理。

Ingress

????????Ingress是一種 Kubernetes 資源類型,它允許在 Kubernetes 集群中暴露 HTTP HTTPS 服務。通過 Ingress,您可以將流量路由到不同的服務和端點,而無需使用不同的負載均衡器。

????????Ingress 通常使用 Ingress Controller 實現,它是一個運行在 Kubernetes 集群中的負載均衡器,它根據Ingress 規則配置路由規則并將流量轉發到相應的服務。

Ingress 和 Service區別

????????Ingress 和 Service都是 Kubernetes 中用于將流量路由到應用程序的機制,但它們在路由層面上有所不同:

  • Service 是 Kubernetes 中抽象的應用程序服務,它公開了一個 單一的IP地址和端口,可以用于在 Kubernetes集群內部的 Pod 之間進行流量路由
  • Ingress 是一個 Kubernetes 資源對象,它提供了對集群外部流量路由的規則。Ingress 通過一個公共IP地址和端口將流量路由到一個或多個Service。

存儲

Volume

????????Volume指的是存儲卷,包含可被Pod中容器訪問的數據目錄。容器中的文件在磁盤上是臨時存放的,當容器崩潰時文件會丟失,同時無法在多個Pod中共享文件,通過使用存儲卷可以解決這兩個問題。

PV & PVC

Volume 提供了非常好的數據持久化方案,不過在可管理性上還有不足。要使用Volume, Pod 必須事先知道以下信息:

  • 當前的 Volume 類型并明確 Volume 已經創建好。
  • 必須知道 Volume 的具體地址信息。

????????但是 Pod 通常是由應用的開發人員維護,而 Volume 則通常是由存儲系統的管理員維護。開發人員要獲得上面的信息,要么詢問管理員,要么自己就是管理員。這樣就帶來一個管理上的問題:應用開發人員和系統管理員的職責耦合在一起了

????????Kubernetes 給出的解決方案是 Persistent Volume 和 Persistent Volume Claim。

  • PersistentVolume(PV)是外部存儲系統中的一塊存儲空間,由管理員創建和維護,將應用需要持久化的數據保存到指定位置。PV 具有持久性,生命周期獨立于 Pod。
  • Persistent Volume Claim (PVC)是對 PV 的申請 (Claim),申明需要使用的持久卷規格。PVC 通常由普通用戶創建和維護。需要為 Pod 分配存儲資源時,用戶可以創建一個PVC,指明存儲資源的容量大小和訪問模式 (比如只讀)等信息,Kubernetes 會查找并提供滿足條件的 PV。

????????有了PersistentVolumeClaim,用戶只需要告訴 Kubernetes 需要什么樣的存儲資源,而不必關心真正的空間從哪里分配、如何訪問等底層細節信息。這些 Storage Provider 的底層信息交給管理員來處理。

K8S工作流程

以k8s部署nginx為例,在master節點執行一條命令要master部署一個nginx應用

(kubectl create deployment nginx --image=nginx)

Master Node動作:

  1. 這條命令首先發到master節點的網關api server,這是matser的唯一入口
  2. api server將命令請求交給controller mannager進行控制(請求轉交:api server -> controller)
  3. controller mannager 進行應用部署解析,生成一次部署信息,并通過api server將信息存入etcd存儲存儲要部署的應用: controller->etcd
  4. scheduler調度器通過api server從etcd存儲中,拿到要部署的應用,開始調度看哪個節點有資源適合部署(讀取要部署的應用:etcd ->scheduler )
  5. scheduler把計算出來的調度信息通過api server再放到etcd中(保存調度信息:scheduler->etcd

Worker Node動作:

  1. 每一個node節點的監控組件kubelet,隨時和master保持聯系(給api-server發送請求不斷獲取最新數據),拿到master節點存儲在etcd中的部署信息(node獲取Master信息)
  2. 假設node2的kubelet拿到部署信息,顯示他自己節點要部署某某應用,kubelet就自己run一個應用在當前機器上,并隨時給master匯報當前應用的狀態信息(node執行相應動作
  3. node和master也是通過master的api-server組件聯系的
  4. 每一個Node機器上的kube-proxy能知道集群的所有網絡,只要node訪問別人或者別人訪問node,node上的kube-proxy網絡代理自動計算進行流量轉發(流量轉發

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

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

相關文章

實戰項目-----Python+OpenCV 實現對視頻的椒鹽噪聲注入與實時平滑還原”

實戰項目實現以下功能&#xff1a;功能 1&#xff1a;為視頻每一幀添加椒鹽噪聲作用&#xff1a;模擬真實環境中圖像傳輸或采集時可能出現的噪聲。實現方式&#xff1a;讀取視頻的每一幀。隨機選擇 10000 個像素點&#xff0c;將其設置為黑色&#xff08;0&#xff09;或白色&a…

Day42 PHP(mysql注入、跨庫讀取)

一、sql注入基本原理&#xff1a;沒有對用戶輸入的數據進行限制&#xff0c;導致數據庫語句可以做什么&#xff0c;用戶就可以做什么。取決于不同數據庫的不同查詢語言&#xff0c;所以為什么有mysql注入/orcale注入等等。步驟&#xff1a;【access】表名&#xff08;字典爆破來…

機器人控制器開發(部署——軟件打包備份更新)

文章總覽 為什么做備份更新 為機器人控制器設計一套打包備份更新機制&#xff0c;為控制器的批量生產和產品與項目落地做準備。 當某個模塊出現bug需要升級時&#xff0c;用戶可以快速獲取正確的bak包并導入到控制器中重啟生效。 如果沒有做好軟件的備份更新機制&#xff0c…

LaTeX TeX Live 安裝與 CTAN 國內鏡像配置(Windows / macOS / Linux 全流程)

這是一份面向國內環境的 LaTeX 從零到可編譯 指南&#xff1a;覆蓋 TeX Live / MacTeX 安裝、PATH 配置、CTAN 國內鏡像&#xff08;清華/北外/上交/中科大等&#xff09;一鍵切換與回滾、常見坑位&#xff08;權限、鏡像路徑、版本切換&#xff09;、以及 XeLaTeX/latexmk 的實…

WhoisXML API再次榮登2025年美國Inc. 5000快速成長企業榜單

WhoisXML API非常自豪地宣布&#xff0c;我們再次榮登美國權威榜單——2025年Inc.5000全美成長最快的私營企業之一。今年&#xff0c;公司在地區排名中位列第119名&#xff0c;在全美總體排名中位列第4,271名。Inc. 5000榜單要求參評企業必須保持獨立運營&#xff0c;并在2021至…

Elasticsearch面試精講 Day 9:復合查詢與過濾器優化

【Elasticsearch面試精講 Day 9】復合查詢與過濾器優化 在Elasticsearch的搜索體系中&#xff0c;復合查詢&#xff08;Compound Queries&#xff09;與過濾器&#xff08;Filters&#xff09;優化是構建高效、精準搜索邏輯的核心能力。作為“Elasticsearch面試精講”系列的第…

Android使用ReactiveNetwork監聽網絡連通性

引入庫 implementation com.github.pwittchen:reactivenetwork-rx2:3.0.8監聽網絡連接變更ReactiveNetwork.observeNetworkConnectivity(context).subscribeOn(Schedulers.io())// ... // anything else what you can do with RxJava.observeOn(Schedulers.computation()).subs…

基于阿里云部署 RustDesk 自托管服務器

基于阿里云部署 RustDesk 自托管服務器一、背景與需求場景二、什么是 RustDesk&#xff1f;為什么選擇自托管&#xff1f;2.1 RustDesk 是什么&#xff1f;2.2 為什么選擇自托管&#xff1f;三、環境準備與架構說明四、操作步驟4.1 在阿里云上安裝 RustDesk 服務端4.1.1 下載并…

細說分布式ID

針對高并發寫&#xff0c;分布式ID是其業務基礎&#xff0c;本文從一個面試題細細展開。面試官&#xff1a;1.對于Mysql的InnoDB引擎下&#xff0c;自增ID和UUID作為主鍵各自有什么優劣&#xff0c;對于一張表的主鍵你建議使用哪種ID&#xff1f;2.除了UUID是否還了解其他類型的…

2025年大數據專業證書報考指南:專科學歷必看的8大選擇?

對于大專學歷的同學來說&#xff0c;2025年進入大數據行業是一個充滿機遇的選擇。大數據領域發展迅速&#xff0c;各類證書能夠幫助求職者提升專業能力、增強就業競爭力。其中最推薦的是CDA數據分析師&#xff0c;這個證書適應了未來數字化經濟和AI發展趨勢&#xff0c;難度不高…

Python爬蟲實戰:研究Axis Artist模塊,構建電商數據采集和分析系統

1. 引言 1.1 研究背景與意義 在大數據時代,互聯網上蘊藏著海量有價值的信息,這些信息涵蓋了社會、經濟、科技等各個領域。高效地從互聯網獲取數據并進行深度分析,對于企業決策、學術研究、市場分析等都具有重要意義。Python 作為一種功能強大的編程語言,憑借其豐富的庫支…

突破大語言模型推理瓶頸:深度解析依賴關系與優化策略

突破大語言模型推理瓶頸&#xff1a;深度解析依賴關系與優化策略當ChatGPT需要5秒才能生成一個回答&#xff0c;當企業級大模型每秒只能處理3個用戶請求——這些性能瓶頸的背后&#xff0c;隱藏著大語言模型推理計算中復雜的依賴關系網。在大語言模型推理過程中&#xff0c;依賴…

整理了幾道前端面試題

1. 若是有兩個數組ar1和ar2&#xff0c;求它們的并集和交集&#xff0c;要怎么做&#xff1f; const ar1 [1, 2, 3, 4]; const ar2 [3, 4, 5, 6];一、求并集 (Union) 目標&#xff1a; 把兩個數組合并成一個新數組&#xff0c;新數組包含所有出現過的元素&#xff0c;但每個…

Mac M4環境下基于VMware Fusion虛擬機安裝Ubuntu24.04 LTS ARM版

Mac M4環境下基于VMware Fusion虛擬機安裝Ubuntu24.04 LTS ARM版 1 下載Ubuntu鏡像 在Ubuntu官網下載Ubuntu24.04 LTS的arm版鏡像&#xff0c;這里選擇ubuntu-24.04-live-server-arm64.iso&#xff0c;支持arm的似乎沒有合適的desktop版本&#xff0c;Server版本默認是不帶圖…

開源與定制化對比:哪種在線教育系統源碼更適合教育培訓APP開發?

如今&#xff0c;“在線教育系統源碼”已經成為許多教育培訓機構、創業者甚至傳統學校的高頻關鍵詞。無論是打造一款在線教育APP&#xff0c;還是開發企業內部培訓平臺&#xff0c;源碼選擇都決定了后續的開發效率、產品體驗與商業化潛力。 在實際開發中&#xff0c;常見的源碼…

中間件的日志分析

將日志文件access.log復制到kali中進行分析使用命令查看文件中各IP的訪問次數&#xff0c;依次分析其行為awk { print $1 } access.log | sort | uniq -c |sort -nr172.16.3.189cat access.log | grep 172.16.3.198行為模式分析使用固定弱密碼進行身份驗證 幾乎所有請求都使用用…

【Big Data】云原生與AI時代的存儲基石 Apache Ozone 的技術演進路徑

目錄 一、Apache Ozone是什么&#xff1f; 二、Ozone的誕生背景 三、Ozone的架構設計 1. 分層架構設計 2. Ozone Manager (OM) 3. Storage Container Manager (SCM) 4. DataNode 5. Raft協議應用 四、Ozone解決的關鍵問題 1. 元數據管理瓶頸 2. 小文件性能問題 3. …

抖音直播禮物彈幕抓取工具:技術實現與功能解析

基于Python的直播間數據采集技術實踐一、項目概述基于Python開發的直播間數據采集方案&#xff0c;采用最新簽名算法(dysign)實現穩定連接&#xff0c;實時獲取直播間各類互動數據&#xff0c;為直播數據分析和互動應用開發提供技術支持。二、核心功能實時消息監控用戶進入提醒…

添加地址頁面,可以添加復制粘貼,自動識別地址的功能uniapp實現方式

主要用uni.getClipboardData(OBJECT)&#xff0c;更多信息可以到uniapp官網查看以下實現方式 1利用api, 2針對判斷優化方案&#xff0c;在線APIhandleConfirm2(){let that this;promisRequest({url: https://wangzc.wang/smAddress,data: {"address": that.…

ESP32 驅動 PWM 舵機為什么必須共地?——從原理到實踐全解析

在使用 ESP32 控制 PWM 舵機 的過程中,新手經常遇到一個常見問題:舵機不動、亂動、甚至燒壞芯片。 其中最典型的原因,就是沒有正確共地。 很多初學者會疑惑:“外接電池只是給舵機供電,為什么還要把電池的地線接到 ESP32 的 GND 上呢?” 本文將從 信號邏輯、閉合回路、…