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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

kubernetes常用对象

發(fā)布時間:2024/1/23 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kubernetes常用对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. Master

集群的控制節(jié)點,負責(zé)整個集群的管理和控制,kubernetes的所有的命令基本都是發(fā)給Master,由它來負責(zé)具體的執(zhí)行過程。

1.1. Master的組件

  • kube-apiserver:資源增刪改查的入口
  • kube-controller-manager:資源對象的大總管
  • kube-scheduler:負責(zé)資源調(diào)度(Pod調(diào)度)
  • etcd Server:kubernetes的所有的資源對象的數(shù)據(jù)保存在etcd中。

2. Node

Node是集群的工作負載節(jié)點,默認情況kubelet會向Master注冊自己,一旦Node被納入集群管理范圍,kubelet會定時向Master匯報自身的情報,包括操作系統(tǒng),Docker版本,機器資源情況等。

如果Node超過指定時間不上報信息,會被Master判斷為“失聯(lián)”,標記為Not Ready,隨后Master會觸發(fā)Pod轉(zhuǎn)移。

2.1. Node的組件

  • kubelet:Pod的管家,與Master通信
  • kube-proxy:實現(xiàn)kubernetes Service的通信與負載均衡機制的重要組件
  • Docker:容器的創(chuàng)建和管理

2.2. Node相關(guān)命令

kubectl get nodes

kuebctl describe node {node_name}

2.3. describe命令的Node信息

  • Node基本信息:名稱、標簽、創(chuàng)建時間等
  • Node當前的狀態(tài),Node啟動后會進行自檢工作,磁盤是否滿,內(nèi)存是否不足,若都正常則切換為Ready狀態(tài)。
  • Node的主機地址與主機名
  • Node上的資源總量:CPU,內(nèi)存,最大可調(diào)度Pod數(shù)量等
  • Node可分配資源量:當前Node可用于分配的資源量
  • 主機系統(tǒng)信息:主機唯一標識符UUID,Linux kernel版本號,操作系統(tǒng),kubernetes版本,kubelet與kube-proxy版本
  • 當前正在運行的Pod列表及概要信息
  • 已分配的資源使用概要,例如資源申請的最低、最大允許使用量占系統(tǒng)總量的百分比
  • Node相關(guān)的Event信息。

3. Pod

Pod是Kubernetes中操作的基本單元。每個Pod中有個根容器(Pause容器),Pause容器的狀態(tài)代表整個容器組的狀態(tài),其他業(yè)務(wù)容器共享Pause的IP,即Pod IP,共享Pause掛載的Volume,這樣簡化了同個Pod中不同容器之間的網(wǎng)絡(luò)問題和文件共享問題。

圖片 - pod

  • Kubernetes集群中,同宿主機的或不同宿主機的Pod之間要求能夠TCP/IP直接通信,因此采用虛擬二層網(wǎng)絡(luò)技術(shù)來實現(xiàn),例如Flannel,Openvswitch(OVS)等,這樣在同個集群中,不同的宿主機的Pod IP為不同IP段的IP,集群中的所有Pod IP都是唯一的,不同Pod之間可以直接通信。
  • Pod有兩種類型:普通Pod和靜態(tài)Pod。靜態(tài)Pod即不通過K8S調(diào)度和創(chuàng)建,直接在某個具體的Node機器上通過具體的文件來啟動。普通Pod則是由K8S創(chuàng)建、調(diào)度,同時數(shù)據(jù)存放在ETCD中。
  • Pod IP和具體的容器端口(ContainnerPort)組成一個具體的通信地址,即Endpoint。一個Pod中可以存在多個容器,可以有多個端口,Pod IP一樣,即有多個Endpoint。
  • Pod Volume是定義在Pod之上,被各個容器掛載到自己的文件系統(tǒng)中,可以用分布式文件系統(tǒng)實現(xiàn)后端存儲功能。
  • Pod中的Event事件可以用來排查問題,可以通過kubectl describe pod xxx 來查看對應(yīng)的事件。
  • 每個Pod可以對其能使用的服務(wù)器上的計算資源設(shè)置限額,一般為CPU和Memory。K8S中一般將千分之一個的CPU配置作為最小單位,用m表示,是一個絕對值,即100m對于一個Core的機器還是48個Core的機器都是一樣的大小。Memory配額也是個絕對值,單位為內(nèi)存字節(jié)數(shù)。
  • 資源配額的兩個參數(shù)

  • Requests:該資源的最小申請量,系統(tǒng)必須滿足要求。

  • Limits:該資源最大允許使用量,當超過該量,K8S會kill并重啟Pod。
  • 圖片 - pod2

    4. Label

  • Label是一個鍵值對,可以附加在任何對象上,比如Node,Pod,Service,RC等。Label和資源對象是多對多的關(guān)系,即一個Label可以被添加到多個對象上,一個對象也可以定義多個Label。
  • Label的作用主要用來實現(xiàn)精細的、多維度的資源分組管理,以便進行資源分配,調(diào)度,配置,部署等工作。
  • Label通俗理解就是“標簽”,通過標簽來過濾篩選指定的對象,進行具體的操作。k8s通過Label Selector(標簽選擇器)來篩選指定Label的資源對象,類似SQL語句中的條件查詢(WHERE語句)。
  • Label Selector有基于等式和基于集合的兩種表達方式,可以多個條件進行組合使用。

  • 基于等式:name=redis-slave(匹配name=redis-slave的資源對象);env!=product(匹配所有不具有標簽env=product的資源對象)

  • 基于集合:name in (redis-slave,redis-master);name not in (php-frontend)(匹配所有不具有標簽name=php-frontend的資源對象)
  • 使用場景

  • kube-controller進程通過資源對象RC上定義的Label Selector來篩選要監(jiān)控的Pod副本數(shù),從而實現(xiàn)副本數(shù)始終保持預(yù)期數(shù)目。
  • kube-proxy進程通過Service的Label Selector來選擇對應(yīng)Pod,自動建立每個Service到對應(yīng)Pod的請求轉(zhuǎn)發(fā)路由表,從而實現(xiàn)Service的智能負載均衡機制。
  • kube-scheduler實現(xiàn)Pod定向調(diào)度:對Node定義特定的Label,并且在Pod定義文件中使用NodeSelector標簽調(diào)度策略。
  • 5. Replication Controller(RC)

    RC是k8s系統(tǒng)中的核心概念,定義了一個期望的場景。

    主要包括:

    • Pod期望的副本數(shù)(replicas)
    • 用于篩選目標Pod的Label Selector
    • 用于創(chuàng)建Pod的模板(template)

    RC特性說明:

  • Pod的縮放可以通過以下命令實現(xiàn):kubectl scale rc redis-slave --replicas=3
  • 刪除RC并不會刪除該RC創(chuàng)建的Pod,可以將副本數(shù)設(shè)置為0,即可刪除對應(yīng)Pod。或者通過kubectl stop /delete命令來一次性刪除RC和其創(chuàng)建的Pod。
  • 改變RC中Pod模板的鏡像版本可以實現(xiàn)滾動升級(Rolling Update)。具體操作見https://kubernetes.io/docs/tasks/run-application/rolling-update-replication-controller/
  • Kubernetes1.2以上版本將RC升級為Replica Set,它與當前RC的唯一區(qū)別在于Replica Set支持基于集合的Label Selector(Set-based selector),而舊版本RC只支持基于等式的Label Selector(equality-based selector)。
  • Kubernetes1.2以上版本通過Deployment來維護Replica Set而不是單獨使用Replica Set。即控制流為:Delpoyment→Replica Set→Pod。即新版本的Deployment+Replica Set替代了RC的作用。
  • 6. Deployment

    Deployment是kubernetes 1.2引入的概念,用來解決Pod的編排問題。Deployment可以理解為RC的升級版(RC+Reolicat Set)。特點在于可以隨時知道Pod的部署進度,即對Pod的創(chuàng)建、調(diào)度、綁定節(jié)點、啟動容器完整過程的進度展示。

    使用場景

  • 創(chuàng)建一個Deployment對象來生成對應(yīng)的Replica Set并完成Pod副本的創(chuàng)建過程。
  • 檢查Deployment的狀態(tài)來確認部署動作是否完成(Pod副本的數(shù)量是否達到預(yù)期值)。
  • 更新Deployment以創(chuàng)建新的Pod(例如鏡像升級的場景)。
  • 如果當前Deployment不穩(wěn)定,回退到上一個Deployment版本。
  • 掛起或恢復(fù)一個Deployment。
  • 可以通過kubectl describe deployment來查看Deployment控制的Pod的水平拓展過程。

    7. Horizontal Pod Autoscaler(HPA)

    Horizontal Pod Autoscaler(HPA)即Pod橫向自動擴容,與RC一樣也屬于k8s的資源對象。

    HPA原理:通過追蹤分析RC控制的所有目標Pod的負載變化情況,來確定是否針對性調(diào)整Pod的副本數(shù)。

    Pod負載度量指標:

    • CPUUtilizationPercentage:Pod所有副本自身的CPU利用率的平均值。即當前Pod的CPU使用量除以Pod Request的值。
    • 應(yīng)用自定義的度量指標,比如服務(wù)每秒內(nèi)響應(yīng)的請求數(shù)(TPS/QPS)。

    8. Service(服務(wù))

    8.1. Service概述

    圖片 - service

    Service定義了一個服務(wù)的訪問入口地址,前端應(yīng)用通過這個入口地址訪問其背后的一組由Pod副本組成的集群實例,Service與其后端的Pod副本集群之間是通過Label Selector來實現(xiàn)“無縫對接”。RC保證Service的Pod副本實例數(shù)目保持預(yù)期水平。

    8.2. kubernetes的服務(wù)發(fā)現(xiàn)機制

    主要通過kube-dns這個組件來進行DNS方式的服務(wù)發(fā)現(xiàn)。

    8.3. 外部系統(tǒng)訪問Service的問題

    IP類型說明
    Node IPNode節(jié)點的IP地址
    Pod IPPod的IP地址
    Cluster IPService的IP地址

    8.3.1. Node IP

    NodeIP是集群中每個節(jié)點的物理網(wǎng)卡IP地址,是真實存在的物理網(wǎng)絡(luò),kubernetes集群之外的節(jié)點訪問kubernetes內(nèi)的某個節(jié)點或TCP/IP服務(wù)的時候,需要通過NodeIP進行通信。

    8.3.2. Pod IP

    Pod IP是每個Pod的IP地址,是Docker Engine根據(jù)docker0網(wǎng)橋的IP段地址進行分配的,是一個虛擬二層網(wǎng)絡(luò),集群中一個Pod的容器訪問另一個Pod中的容器,是通過Pod IP進行通信的,而真實的TCP/IP流量是通過Node IP所在的網(wǎng)卡流出的。

    8.3.3. Cluster IP

  • Service的Cluster IP是一個虛擬IP,只作用于Service這個對象,由kubernetes管理和分配IP地址(來源于Cluster IP地址池)。
  • Cluster IP無法被ping通,因為沒有一個實體網(wǎng)絡(luò)對象來響應(yīng)。
  • Cluster IP結(jié)合Service Port組成的具體通信端口才具備TCP/IP通信基礎(chǔ),屬于kubernetes集群內(nèi),集群外訪問該IP和端口需要額外處理。
  • k8s集群內(nèi)Node IP 、Pod IP、Cluster IP之間的通信采取k8s自己的特殊的路由規(guī)則,與傳統(tǒng)IP路由不同。
  • 8.3.4. 外部訪問Kubernetes集群

    通過宿主機與容器端口映射的方式進行訪問,例如:Service定位文件如下:

    可以通過任意Node的IP 加端口訪問該服務(wù)。也可以通過Nginx或HAProxy來設(shè)置負載均衡。

    9. Volume(存儲卷)

    9.1. Volume的功能

  • Volume是Pod中能夠被多個容器訪問的共享目錄,可以讓容器的數(shù)據(jù)寫到宿主機上或者寫文件到網(wǎng)絡(luò)存儲中
  • 可以實現(xiàn)容器配置文件集中化定義與管理,通過ConfigMap資源對象來實現(xiàn)。
  • 9.2. Volume的特點

    k8s中的Volume與Docker的Volume相似,但不完全相同。

  • k8s上Volume定義在Pod上,然后被一個Pod中的多個容器掛載到具體的文件目錄下。
  • k8s的Volume與Pod生命周期相關(guān)而不是容器是生命周期,即容器掛掉,數(shù)據(jù)不會丟失但是Pod掛掉,數(shù)據(jù)則會丟失。
  • k8s中的Volume支持多種類型的Volume:Ceph、GlusterFS等分布式系統(tǒng)。
  • 9.3. Volume的使用方式

    先在Pod上聲明一個Volume,然后容器引用該Volume并Mount到容器的某個目錄。

    9.4. Volume類型

    9.4.1. emptyDir

    emptyDir Volume是在Pod分配到Node時創(chuàng)建的,初始內(nèi)容為空,無須指定宿主機上對應(yīng)的目錄文件,由K8S自動分配一個目錄,當Pod被刪除時,對應(yīng)的emptyDir數(shù)據(jù)也會永久刪除。

    作用

  • 臨時空間,例如程序的臨時文件,無須永久保留
  • 長時間任務(wù)的中間過程CheckPoint的臨時保存目錄
  • 一個容器需要從另一個容器中獲取數(shù)據(jù)的目錄(即多容器共享目錄)
  • 說明

    目前用戶無法設(shè)置emptyVolume的使用介質(zhì),如果kubelet的配置使用硬盤則emptyDir將創(chuàng)建在該硬盤上。

    9.4.2. hostPath

    hostPath是在Pod上掛載宿主機上的文件或目錄。

    作用

  • 容器應(yīng)用日志需要持久化時,可以使用宿主機的高速文件系統(tǒng)進行存儲
  • 需要訪問宿主機上Docker引擎內(nèi)部數(shù)據(jù)結(jié)構(gòu)的容器應(yīng)用時,可以通過定義hostPath為宿主機/var/lib/docker目錄,使容器內(nèi)部應(yīng)用可以直接訪問Docker的文件系統(tǒng)。
  • 注意點:

  • 在不同的Node上具有相同配置的Pod可能會因為宿主機上的目錄或文件不同導(dǎo)致對Volume上目錄或文件的訪問結(jié)果不一致。
  • 如果使用了資源配額管理,則kubernetes無法將hostPath在宿主機上使用的資源納入管理。
  • 9.4.3. gcePersistentDisk

    表示使用谷歌公有云提供的永久磁盤(Persistent Disk ,PD)存放Volume的數(shù)據(jù),它與EmptyDir不同,PD上的內(nèi)容會被永久保存。當Pod被刪除時,PD只是被卸載時,但不會被刪除。需要先創(chuàng)建一個永久磁盤,才能使用gcePersistentDisk。

    使用gcePersistentDisk的限制條件:

    • Node(運行kubelet的節(jié)點)需要是GCE虛擬機。
    • 虛擬機需要與PD存在于相同的GCE項目中和Zone中。

    10. Persistent Volume

    Volume定義在Pod上,屬于“計算資源”的一部分,而Persistent Volume和Persistent Volume Claim是網(wǎng)絡(luò)存儲,簡稱PV和PVC,可以理解為k8s集群中某個網(wǎng)絡(luò)存儲中對應(yīng)的一塊存儲。

    • PV是網(wǎng)絡(luò)存儲,不屬于任何Node,但可以在每個Node上訪問。
    • PV不是定義在Pod上,而是獨立于Pod之外定義。
    • PV常見類型:GCE Persistent Disks、NFS、RBD等。

    PV是有狀態(tài)的對象,狀態(tài)類型如下:

    • Available:空閑狀態(tài)
    • Bound:已經(jīng)綁定到某個PVC上
    • Released:對應(yīng)的PVC已經(jīng)刪除,但資源還沒有回收
    • Failed:PV自動回收失敗

    11. Namespace

    Namespace即命名空間,主要用于多租戶的資源隔離,通過將資源對象分配到不同的Namespace上,便于不同的分組在共享資源的同時可以被分別管理。

    k8s集群啟動后會默認創(chuàng)建一個“default”的Namespace。可以通過kubectl get namespaecs查看。

    可以通過kubectl config use-context?namespace配置當前k8s客戶端的環(huán)境,通過kubectl get pods獲取當前namespace的Pod。或者通過kubectl get pods --namespace=NAMESPACE來獲取指定namespace的Pod。

    Namespace yaml文件的定義

    12. Annotation(注解)

    Annotation與Label類似,也使用key/value的形式進行定義,Label定義元數(shù)據(jù)(Metadata),Annotation定義“附加”信息。

    通常Annotation記錄信息如下:

    • build信息,release信息,Docker鏡像信息等。
    • 日志庫、監(jiān)控庫等。

    參考《Kubernetes權(quán)威指南》

    總結(jié)

    以上是生活随笔為你收集整理的kubernetes常用对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。