日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kubernetes入门(03)kubernetes的基本概念

發布時間:2025/3/8 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kubernetes入门(03)kubernetes的基本概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Pod

在Kubernetes集群中,Pod是創建、部署和調度的基本單位。一個Pod代表著集群中運行的一個進程,它內部封裝了一個或多個應用的容器。在同一個Pod內部,多個容器共享存儲、網絡IP,以及管理容器如何運行的策略選項。Docker是Kubernetes中最常用的容器運行時。

在Kubrenetes集群中,Pod有兩種使用方式,如下所示:

一個Pod中運行一個容器

這種模式是最常見的用法,可以把Pod想象成是單個容器的封裝,Kubernetes直接管理的是Pod,而不是Pod內部的容器。

一個Pod中同時運行多個容器

一個Pod中也可以同時運行幾個容器,這些容器之間需要緊密協作,并共享資源。這些在同一個Pod中的容器可以互相協作,邏輯上代表一個Service對象。每個Pod都是應用的一個實例,如果我們想要運行多個實例,就應該運行多個Pod。

同一個Pod中的容器,會自動的分配到同一個Node上。每個Pod都會被分配一個唯一的IP地址,該Pod中的所有容器共享網絡空間,包括IP地址和端口。Pod內部的容器可以使用localhost互相通信。Pod中的容器與外界通信時,必須分配共享網絡資源(例如,使用宿主機的端口映射)。

我們可以為一個Pod指定多個共享的Volume,它內部的所有容器都可以訪問共享的Volume。Volume也可以用來持久化Pod中的存儲資源,以防容器重啟后文件丟失。

我們可以使用Kubernetes中抽象的Controller來創建和管理多個Pod,提供副本管理、滾動升級和集群級別的自愈能力。當Pod被創建后,都會被Kuberentes調度到集群的Node上,直到Pod的進程終止而被移除掉。

Pod是在K8s集群中運行部署應用或服務的最小單元,支持多個容器在一個Pod中共享網絡地址和文件系統,可以通過進程間通信和文件共享這種簡單高效的方式組合完成服務。?

比如:運行一個操作系統發行版的軟件倉庫:使用一個Nginx容器用來發布軟件,另一個容器專門用來從源倉庫做同步,這兩個容器的鏡像不太可能是一個團隊開發的,但是他們一塊兒工作才能提供一個微服務;

這種情況下,不同的團隊各自開發構建自己的容器鏡像,在部署的時候組合成一個微服務對外提供服務。?

Pod是K8s集群中所有業務類型的基礎,可以看作運行在K8s集群中的小機器人,不同類型的業務就需要不同類型的小機器人去執行。

目前K8s中的業務主要可以分為長期伺服型(long-running)、批處理型(batch)、節點后臺支撐型(node-daemon)和有狀態應用型(stateful application);分別對應的小機器人控制器為Deployment、Job、DaemonSet和PetSet。?

pod = pause容器 + 業務容器, 業務容器共享pause容器的網絡棧和volume掛載卷。

上述例子中,pause容器,+兩個業務容器,業務容器共享pause容器的網絡棧和volume掛載卷。

二、Node

Node是Kubernetes集群的工作節點,它可以是物理機,也可以是虛擬機。

我們創建的Pod,都運行在Kubernetes集群中的每個Node節點上。而且,在每個Node上還會存在一個運行容器的daemon進程,比如Docker daemon進程,它負責管理Docker容器的運行。

Node在Kubernetes集群中也是一種資源,內部會創建該資源,定義Node示例如下所示:

?

三、namespace

在一個Kubernetes集群中,可以使用Namespace創建多個“虛擬集群”,這些Namespace之間可以完全隔離,也可以通過某種方式,使一個Namespace中的Service可以訪問到其他Namespace中的Service。

查看當前Kubernetes集群中的Namespace列表,執行如下命令:kubectl get namespaces

Namespace是對一組資源和對象的抽象集合,如可以用來將系統內部的對象劃分為不同的項目組或用戶組。

  • pods, services, replication controllers和deployments等屬于某一個namespace(默認是default)
  • node, persistentVolumes等則不屬于任何namespace??

默認情況下,會有兩個系統自動創建好的Namespace:

  • default:Kubernetes集群中沒有Namespace的對象都會放到該默認Namespace中
  • kube-system:Kubernetes集群自動創建的Namespace

創建一個名稱為myns的Namespace,配置內容如下所示:

四、service

Service是應用服務的抽象,通過labels為應用提供負載均衡和服務發現,匹配labels的Pod IP和端口列表組成endpoints,由kube-proxy負責將服務IP負載均衡到這些endpoints上。

每個Service都會自動分配一個cluster IP(僅在集群內部可訪問的虛擬地址)和DNS名,其他容器可以通過該地址或DNS來訪問服務,而不需要了解后端容器的運行。

Service從邏輯上定義了一個Pod的集合以及如何訪問這些Pod的策略,有時也被稱作是微服務,它與Pod、ReplicaSet等Kubernetes對象之間的關系,描述如下圖所示:

上圖中,Client請求Service,Service通過Label Selector,將請求轉發到對應的一組Pod上。

同時,ReplicaSet會基于Label Selector來監控Service對應的Pod的數量是否滿足用戶設置的預期個數,最終保證Pod的數量和replica的值一致。

在Kubernetes集群中,每個Node都會運行一個kube-proxy,它主要負責為Service實現一種虛擬IP的代理,這種代理有兩種模式:

  • userspace模式

這種模式是在Kubernetes v1.0版本加入的,工作在4層(傳輸層:TCPUDP over IP),稱為userspace模式,如下圖所示:

  • iptables模式

這種模式是在Kubernetes v1.1版本新增的,它工作在七層(應用層:HTTP),稱為iptables,如下圖所示:

Service定義了4種服務類型,以滿足使用不同的方式去訪問一個Service,這4種類型包括:ClusterIP、NodePort、LoadBalancer、ExternalName。

    • ClusterIP是默認使用的類型,它表示在使用Kubernetes集群內部的IP地址,使用這種方式我們只能在該集群中訪問Service。
    • NodePort類型,會在Node節點上暴露一個靜態的IP地址和端口,使得外部通過NodeIP:NodePort的方式就能訪問到該Service。
    • LoadBalancer類型,通過使用Cloud提供商提供的負載均衡IP地址,將Service暴露出去。
    • ExternalName類型,會使用一個外部的域名來將Service暴露出去(Kubernetes v1.7及以上版本的kube-dns支持該種類型)。

我們可以定義一個Service,對應的配置內容,如下所示:

?以上定義的該服務是一個多端口服務,同時為該服務設置了一個負載均衡的IP(78.11.24.19),所有訪問該服務的應用,通過該負載均衡IP地址都可以訪問到該Service對應的Pod集合中的容器服務(應用服務)。

五、Label

Label是識別Kubernetes對象的標簽,以key/value的方式附加到對象上(key最長不能超過63字節,value可以為空,也可以是不超過253字節的字符串)。
Label不提供唯一性,并且實際上經常是很多對象(如Pods)都使用相同的label來標志具體的應用。
Label定義好后其他對象可以使用Label Selector來選擇一組相同label的對象(比如ReplicaSet和Service用label來選擇一組Pod)。
Label Selector支持以下幾種方式:
等式,如 app=nginx 和 env!=production
集合,如 env in (production, qa)
多個label(它們之間是AND關系),如 app=nginx,env=test

六、Annotations

Annotations是key/value形式附加于對象的注解。不同于Labels用于標志和選擇對象,Annotations則是用來記錄一些附加信息,用來輔助應用部署、安全策略以及調度策略等。
比如deployment使用annotations來記錄rolling update的狀態。

Node是Kubernetes集群的工作節點,它可以是物理機,也可以是虛擬機。我們創建的Pod,都運行在Kubernetes集群中的每個Node節點上。而且,在每個Node上還會存在一個運行容器的daemon進程,比如Docker daemon進程,它負責管理Docker容器的運行。
Node在Kubernetes集群中也是一種資源,內部會創建該資源,定義Node示例如下所示:

01{
02??"kind": "Node",
03??"apiVersion": "v1",
04??"metadata": {
05????"name": "10.240.79.157",
06????"labels": {
07??????"name": "my-first-k8s-node"
08????}
09??}
10}
與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的kubernetes入门(03)kubernetes的基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。