kubernetes基礎知識

個人博客站—運維鹿: http://www.kervin24.top
CSDN博客—做個超努力的小奚: https://blog.csdn.net/qq_52914969?type=blog

一、kubernetes介紹

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

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

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

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

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

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

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

1657245546539

1.1、kubernetes組件

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

master:集群的控制平面,負責集群的決策

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

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

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

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


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

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

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

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

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

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

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

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

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

5、Kubelet接收到指令之后,會通知docker,然后由docker來啟動一個nginx的pod,pod是kubernetes的最小操作單元,容器必須跑在pod中

6、一個nginx服務就運行了,如果需要訪問nginx,就需要通過kube-proxy來對pod產生訪問的代理。這樣,外界用戶就可以訪問集群中的nginx服務

1.2、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的運行環境

二、 集群環境搭建

2.1、集群類型

Kubernertes集群大體分為兩類:一主多從多主多從

  • 一主多從:一臺master節點和多臺node節點,搭建簡單,但是有單機故障風險,適合用于測試環境

  • 多主多從:多臺master節點和多臺node節點,搭建麻煩,安全性高,適合用于生產環境

image-20250802201550110

2.2、安裝方式

Kubernetes有多種部署方式,目前主流的方式有kubeadm、minikube、二進制包

  • minikube:一個用于快速搭建單節點kubernetes的工具

  • kubeadm:應該用于快速搭建kubernetes集群的工具

  • 二進制包:從官網下載每個組件的二進制包,依次去安裝

2.3、環境搭建

三、資源管理

3.1、資源管理介紹

在kubernetes中,所有的內容都抽象為資源,用戶需要通過操作資源來管理kubernetes

  • kubernetes的本質是一個集群系統,用戶可以在集群中部署各種服務,所謂的部署服務,其實就是在kubernetes集群中運行一個個容器,并將指定的程序跑在容器中。

  • kubernetes的最小管理單元是pod而不是容器,所以只能將容器放在Pod中,而kubernetes一般也不會直接管理Pod,而是通過Pod控制器來管理Pod的。

  • Pod可以提供服務之后,就要考慮如何訪問Pod中的服務,Kubernetes提供了Service資源實現這個功能

  • 當然,如果Pod中程序的數據需要持久化,kubernetes還提供了各種存儲系統

3.2、資源管理方式

  • 命令式對象管理:直接使用命令去操作Kubernetes資源

kubectl run nginx-pod --image=nginx:1.17.1 --port=80
  • 命令式對象配置:通過命令配置和配置文件去操作kubernetes資源

kubetcl create/patch -f nginx-pod.yaml
  • 聲明式對象配置:通過apply命令和配置文件去操作kubernetes資源

kubectl apply -f nginx-pod.yaml
類型操作對象適用環境優點缺點
命令式對象管理對象測試簡單只能操作活動對象,無法審計、跟蹤
命令式對象配置文件開發可以審計、跟蹤項目大時,配置文件多,操作麻煩
聲明式對象配置目錄開發支持目錄操作意外情況下難以調試

3.2.1、命令式對象管理

kubectl命令

kubect是kubernetes集群的命令行工具,通過它能夠對集群本身進行管理,并能夠在集群上進行容器化應用的安裝部署,kubectl命令的語法如下:

kubectl [command] [type] [name] [flags]

  • command:指定要對資源執行的操作,例如:create、get、delete

  • type:指定資源類型,比如:deployment、pod、service

  • name:指定資源的名稱,名稱大小寫敏感

  • flags:指定額外的可選參數

?#查看所有podkubectl get pod?#查看某個podkubectl get pod pod_name?#查看某個pod,以yaml格式展示結構kubectl get pod pod_name -o yaml

資源類型

kubernetes中所有的內容都抽象為資源,可以通過--help查看詳細的命令

kubectl --help

下面以一個namespace的創建和刪除簡單演示下命令的使用:

?#創建一個namespace[root@master01 ~]# kubectl  create namespace devnamespace/dev created?#獲取namespace[root@master01 ~]# kubectl  get nsNAME ? ? ? ? ? ? ? ? ? STATUS ? AGEdefault ? ? ? ? ? ? ?  Active ? 3y20ddev ? ? ? ? ? ? ? ? ?  Active ? 49skube-node-lease ? ? ?  Active ? 3y20dkube-public ? ? ? ? ?  Active ? 3y20dkube-system ? ? ? ? ?  Active ? 3y20dkubernetes-dashboard ? Active ? 3y20d?#在此namespace下創建并運行一個nginx的pod ? [root@master01 ~]# kubectl run nginx-pod --image=nginx:latest -n devpod/nginx-pod created??#查看新創建的pod[root@master01 ~]# kubectl get pod -n devNAME ? ? ?  READY ? STATUS ?  RESTARTS ? AGEnginx-pod ? 1/1 ? ? Running ? 0 ? ? ? ?  23s[root@master01 ~]# kubectl  describe pod -n dev??#刪除指定的pod[root@master01 ~]# kubectl  delete pod nginx-pod -n devpod "nginx-pod" deleted?#刪除指定的namespace[root@master01 ~]# kubectl  delete ns devnamespace "dev" deleted

3.2.2、命令式對象配置

命令式對象配置就是使用命令配合配置文件一起來操作kubernetes資源

1)創建一個nginxpod.yaml,內容如下:

?apiVersion: v1kind: Namespacemetadata:name: dev ---??apiVersion: v1kind: Podmetadata:name: nginxpodnamespace: devspec:containers:- name: nginx-containersimage: nginx:1.17.1

2)執行create命令,創建資源:

?[root@master01 ~]# kubectl create -f nginxpod.yaml namespace/dev createdpod/nginxpod created

此時發現創建了兩個資源對象,分別是namespace和pod

3)執行get命令,查看資源

?[root@master01 ~]# kubectl  get -f nginxpod.yaml NAME ? ? ? ? ?  STATUS ? AGEnamespace/dev ? Active ? 2m31s?NAME ? ? ? ? ? READY ? STATUS ? ? ? ? ? ?  RESTARTS ? AGEpod/nginxpod ? 0/1 ? ? ContainerCreating ? 0 ? ? ? ?  2m30s

4)執行delete命令,刪除資源對象

?[root@master01 ~]# kubectl  delete -f nginxpod.yaml namespace "dev" deletedpod "nginxpod" deleted

此時發現兩個資源對象被刪除了

?[root@master01 ~]# kubectl  get -f nginxpod.yaml Error from server (NotFound): namespaces "dev" not foundError from server (NotFound): namespaces "dev" not found

總結:命令式對象配置的方式操作資源,可以簡單的認為:命令+yaml配置文件(里面是命令需要的各種參數)

3.2.3、聲明式對象配置

聲明式對象配置 跟命令式對象配置很相似,但是它只有一個命令apply

?#首先執行一次kubectl apply -f yaml文件,發現創建了資源[root@master01 ~]# kubectl  apply  -f nginxpod.yaml namespace/dev createdpod/nginxpod created?#再次執行一次kubectl apply -f yaml文件,發現說資源沒有變動[root@master01 ~]# kubectl  apply  -f nginxpod.yaml namespace/dev unchangedpod/nginxpod unchanged

總結:

其實聲明式對象配置就是使用apply描述一個資源最終的狀態(在yaml中定義狀態)

使用apply操作資源:

如果資源不存在,就創建,相當于kubectl create

如果資源已存在,就更新,相當于kubectl patch

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

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

相關文章

winntsetup安裝驅動和光驅安裝F6功能一樣----NT5.2.3790源代碼分析

D:\drv>dir驅動器 D 中的卷是 新加卷卷的序列號是 443D-D64BD:\drv 的目錄2025-08-03 23:57 <DIR> . 2025-08-03 23:57 <DIR> .. 2008-05-27 10:01 119,068 yk51x86.cat 2008-05-20 10:01 969,380 yk51x86.inf…

Web 開發 11

今天完成了workshop2&#xff0c;進度有點慢&#xff0c;但是記錄一下極為愚蠢的一輪輪問答和思考~&#xff01;&#xff08;還是有點成就感的&#xff09;ps&#xff1a;【】內為我的提問1 導入語句&#xff08;ES6 模塊導入語法&#xff09;【import CatHappiness from "…

寫作路上的迷茫與突破

曾經&#xff0c;我也是那個在寫作面前躊躇不前的人。每次提筆&#xff0c;滿心都是“我寫不好”“我沒什么可寫的”“我達不到別人的高度”……這些念頭像藤蔓一樣&#xff0c;緊緊纏繞著我&#xff0c;讓我寸步難行。我看著群里的小伙伴們一個個妙筆生花&#xff0c;自己卻只…

23 Active Directory攻擊與防護策略解析

引言 Active Directory&#xff08;AD&#xff09;是企業IT環境中用戶認證、訪問控制和身份管理的核心。因其掌握整個網絡的"鑰匙"&#xff0c;AD常成為攻擊者的首要目標。 從憑證轉儲到隱蔽偵察&#xff0c;攻擊者通過多種手段控制AD。無論您是網絡安全分析師、紅…

【內容規范】關于標題中【】標記的使用說明

【內容規范】關于標題中【】標記的使用說明 在信息爆炸的時代&#xff0c;如何讓內容更易識別、更具條理性&#xff0c;成為內容創作者和平臺運營者共同關注的問題。標題中【】標記的使用&#xff0c;正是在這種需求下形成的一種實用規范。 這種規范的核心作用在于建立統一的內…

centos 9 安裝docker教程

拉取相關依賴 dnf -y install dnf-plugins-core設置阿里云鏡像庫 dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安裝docker dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plu…

關閉Jetbrains Mono字體連寫、連字功能

所謂的關閉Jetbrains Mono字體連寫&#xff0c;其實就是更換為Jetbrains Mono NL字體二者的區別就是符號間距的大小不同&#xff0c;也就是有無連字功能。 下圖以Visutal Studio為例&#xff1a;

漫花軟件集合分享

漫花軟件集合分享的各種apk 1、磁盤漫畫【推薦】 2、你搜 3、皮皮喵 4、潑辣漫畫 5、趣漫畫 6、異次元&圖源 7、漫 8、再漫畫X 9、章魚漫畫 10、芝士漫畫&圖源 通過網盤分享的文件&#xff1a;漫畫軟件 鏈接: https://pan.baidu.com/s/1dlGl50MNzzVOdTP38_…

DB-GPT 0.7.3 版本更新:支持Qwen3 Embedding和Reranker模型、支持知識庫自定義檢索策略等

V0.7.3版本主要新增、增強了以下核心特性 &#x1f340; 支持Qwen3 Embedding和Reranker模型 &#x1f340; 支持知識庫自定義檢索策略&#xff1a;語義檢索、全文檢索、樹形檢索、混合檢索等 &#x1f340; 新增GaussDB數據源支持 &#x1f340; 支持GLM-4.1V多模態模型 …

Django常見模型字段

AutoField:數據庫中的自動增長類型&#xff0c;相當于ID自動增長的IntegerField類型字段&#xff0c;對應mysql的Int類型 BooleanField:真/假的布爾類型字段&#xff0c;對應mysql的Tinyint類型 CharField:字符類型字段&#xff0c;對應mysql的varChar類型 DateField:日期字段&…

前端列表封面圖如何自不同圖片比例不變形

設置圖片寬度100%時&#xff0c;若不設置高度&#xff0c;可能導致高度不足導致空白區域。如何實現圖片高度自適應填充&#xff0c;避免空白區域&#xff1f;解決方式&#xff1a;加上height&#xff1a;100%&#xff1b;object-fit:cover&#xff1b;就可以始終剪切鋪滿&#…

記錄一次Spring Cloud Gateway配置的跨域處理:解決 ‘Access-Control-Allow-Origin‘ 頭包含多個值的問題

在微服務架構中&#xff0c;前端與后端分離已經成為一種常見模式。這種模式下&#xff0c;前后端通常會部署在不同的域名或端口上&#xff0c;這就導致了跨域資源共享&#xff08;CORS&#xff09;問題。最近&#xff0c;在我們的項目中&#xff0c;我們遇到了這樣一個問題&…

掃雷游戲完整代碼

掃雷游戲完整代碼test.cgame.cgame.h

vue打包后如何在本地運行?

1.打包前的配置打開vue.config.js配置如圖所示內容//打包配置文件 module.exports {assetsDir: static,parallel: false,publicPath: ./, };這段代碼是Vue.js項目的打包配置文件&#xff0c;主要功能包括&#xff1a; - assetsDir: static - 設置靜態資源文件夾名為static - p…

Python特性工廠函數詳解:優雅管理屬性驗證

在Python中&#xff0c;特性(property)是一種強大的工具&#xff0c;它允許我們在訪問屬性時執行自定義邏輯。本文將深入分析一個名為quantity的特性工廠函數&#xff0c;它用于確保屬性值必須為正數。 特性工廠函數的概念 特性工廠函數是一種創建并返回property對象的函數&…

Ubuntu系統VScode實現opencv(c++)鼠標操作與響應

在之前的創作中心-CSDN滾動條調整圖片亮度-CSDN博客創作中心-CSDN中,我們已經了解了滾動條實現亮度以及對比度調節,為了實現對圖像中感興趣區域&#xff08;ROI, Region of Interest&#xff09;的交互式選取&#xff0c;本文利用 OpenCV 提供的鼠標事件回調機制&#xff0c;設…

True or False? 基于 BERT 學生數學問題誤解檢測

True or False? 基于 BERT 學生數學問題誤解檢測 代碼詳見&#xff1a;https://github.com/xiaozhou-alt/Student_Math_Misconception 文章目錄True or False? 基于 BERT 學生數學問題誤解檢測一、項目介紹二、文件夾結構三、數據集介紹四、BERT 模型介紹五、項目實現1. 數據…

小程序基于vue+nodejs的私人定做訂制訂單發布與對應商品出售平臺

文章目錄項目介紹主要技術與實現手段具體實現截圖關于我本系統開發思路研究思路、方法和步驟java類核心代碼部分展示系統測試本系統技術可行性分析源碼獲取詳細視頻演示或者查看其他版本&#xff1a;文章底部獲取博主聯系方式&#xff01;項目介紹主要技術與實現手段 uni-app框…

為什么要有動態內存分配?

文章目錄1.為什么要有動態內存分配2.malloc和free2.1 malloc2.2 free3.calloc和realloc3.1 calloc3.2 realloc4.常見的動態內存的錯誤4.1 對NULL指針的解引用操作4.2 對動態開辟空間的越界訪問4.3 對?動態開辟內存使?free釋放4.4 使?free釋放?塊動態開辟內存的?部分4.5 對…

docker hub 拉取鏡像失敗報Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting

自己記錄一把&#xff0c;給兄弟們避坑 1.上問題報錯代碼 [rootlocalhost ~]# docker pull hello-world Using default tag: latestError response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connectio…