国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù)

這篇具有很好參考價(jià)值的文章主要介紹了Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

Pod

參考文檔:Pod | Kubernetes

Pod配置文件:simple-pod.yaml

對(duì)master進(jìn)行如下操作

Pod的狀態(tài)有:

參考文檔:(70條消息) Pod生命周期中的狀態(tài)解釋_pod狀態(tài)_鬧玩兒扣眼珠子的博客-CSDN博客

進(jìn)入Pod內(nèi)的nginx容器:

當(dāng)我們創(chuàng)建一個(gè)Pod,其中的步驟是什么?(啟動(dòng)Pob的流程)

大概步驟:

k8s的?控制器有哪些:

創(chuàng)建Pod過(guò)程中提出的問(wèn)題:?

Scheduler在做任務(wù)的時(shí)候,使用了那些調(diào)度算法呢?

根據(jù)Pod的調(diào)度策略和方法:(K8s有哪些調(diào)度算法?)

Pod與Pod之間如何進(jìn)行通信?

k8s啟動(dòng)Pod

1、啟動(dòng)nginx的Pod

2、控制器deployment的使用

我們?nèi)绻胪V筆od的運(yùn)行,我們刪除ReplicaSet 控制器是沒(méi)有用的(因?yàn)閯h除掉后deployment控制器會(huì)重新啟用ReplicaSet 控制器),我們必須刪除deployment控制器(命令:kubectl delete deployment)

?3、conctroller 控制器

參考文檔:DaemonSet | Kubernetes

DaemonSet?確保全部(或者某些)節(jié)點(diǎn)上運(yùn)行一個(gè) Pod 的副本。

下面的 daemonset.yaml 文件描述了一個(gè)運(yùn)行 fluentd-elasticsearch(日志收集) Docker 鏡像的 DaemonSet:

我們?yōu)槭裁匆O(shè)置容忍度呢,其實(shí)原因很簡(jiǎn)單,因?yàn)閗8s會(huì)對(duì)master進(jìn)行污點(diǎn)標(biāo)記,導(dǎo)致Pod無(wú)法在master運(yùn)行,但是我們的日志收集的目的是可以在所有節(jié)點(diǎn)上運(yùn)行的,因此設(shè)置容忍度可以使這個(gè)Pod在master上也能正常運(yùn)行

污點(diǎn)和容忍度:

參考文檔:污點(diǎn)和容忍度 | Kubernetes

配置一:?

配置二:?

先檢查key是否匹配,匹配是看operator是exists或者equal,這表示匹配,就會(huì)允許在有污點(diǎn)的node節(jié)點(diǎn)上啟動(dòng)這個(gè)Pod,effect可以理解為如果key不匹配,就不允許調(diào)度到這個(gè)污點(diǎn)節(jié)點(diǎn)。

4、Pod的資源控制

參考文檔:為容器和 Pod 分配內(nèi)存資源 | Kubernetes?

指定內(nèi)存請(qǐng)求和限制

創(chuàng)建一個(gè)命名空間,以便將本練習(xí)中創(chuàng)建的資源與集群的其余部分隔離。

你將創(chuàng)建一個(gè)擁有一個(gè)容器的 Pod。 容器將會(huì)請(qǐng)求 100 MiB 內(nèi)存,并且內(nèi)存會(huì)被限制在 200 MiB 以?xún)?nèi)。 這是 Pod 的配置文件:

開(kāi)始創(chuàng)建 Pod:

驗(yàn)證 Pod 中的容器是否已運(yùn)行:

查看 Pod 相關(guān)的詳細(xì)信息:

運(yùn)行?kubectl top?命令,獲取該 Pod 的指標(biāo)數(shù)據(jù)(前提是你已經(jīng)有在運(yùn)行中的?metrics-server)

刪除 Pod:

支持容器訪問(wèn)策略和容器帶寬限制:istio組件

5、一個(gè)Pod里面運(yùn)行多個(gè)容器:

Pod 的配置文件:

創(chuàng)建multi_c.yaml文件存儲(chǔ)Pod

開(kāi)始創(chuàng)建 Pod:

?驗(yàn)證 Pod 中的容器是否已運(yùn)行:

內(nèi)部訪問(wèn)我創(chuàng)建的nginx容器:

6、將創(chuàng)建的Pod發(fā)布出去:

參考文檔:?服務(wù)(Service) | Kubernetes

定義一個(gè)內(nèi)有nginx容器的Pod,并創(chuàng)建成功

開(kāi)始創(chuàng)建 Pod:

查看是否創(chuàng)建成功:

創(chuàng)建Service服務(wù),暴露我們的nginx容器服務(wù)(發(fā)布服務(wù)(服務(wù)類(lèi)型))

開(kāi)始創(chuàng)建 Pod(service服務(wù)):?

Service發(fā)布成功了?

訪問(wèn)發(fā)布的Pod

我們只需要隨便訪問(wèn)k8s集群里的任何一臺(tái)node節(jié)點(diǎn)服務(wù)器,包括master

訪問(wèn)nginx容器的模擬圖:(外面的用戶(hù)訪問(wèn)Pod的數(shù)據(jù)流程:)


Pod

參考文檔:Pod | Kubernetes


Pod配置文件:simple-pod.yaml

apiVersion: v1     #k8s里的api版本  --》用來(lái)給我們的k8s傳參的
kind: Pod          #k8s里的資源對(duì)象類(lèi)型:pod deployment replicaSET daemonSET service等對(duì)象
metadata:          #定義的元數(shù)據(jù)、起描述資源對(duì)象的數(shù)據(jù)
  name: nginx       #pod的名字
spec:                #詳細(xì)的信息、指定的信息
  containers:        #容器
  - name: scnginx      #容器名  可以存在多個(gè)容器  
    image: nginx:1.14.2     #鏡像及其版本
    ports:                  #容器暴露的端口
    - containerPort: 80     #具體的端口
  #- name redis        #指定第二個(gè)容器為redis
  # image: nginx:1.14.2
  # ports:
  # - containerPort: 80

對(duì)master進(jìn)行如下操作

[root@master pod]# pwd
/root/pod
[root@master pod]# ls
nginx.yaml
[root@master pod]# cat nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: scnginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80
[root@master pod]# kubectl apply -f nginx.yaml
pod/scnginx created
[root@master pod]# kubectl get pod
NAME                         READY   STATUS              RESTARTS   AGE
k8s-nginx-6d779d947c-f72hf   1/1     Running             0          5h57m
k8s-nginx-6d779d947c-hnhf5   1/1     Running             0          5h57m
k8s-nginx-6d779d947c-xgjzg   1/1     Running             0          5h57m
scnginx                      0/1     ContainerCreating   0          14s
[root@master pod]# 

如上所示,我使用了nginx.yaml文件創(chuàng)建了一個(gè)關(guān)于nginx的pod,其中的pod的狀態(tài)

Pod的狀態(tài)有:

  1. Pending(等待中):Pod 已經(jīng)被創(chuàng)建,但還未被調(diào)度到任何節(jié)點(diǎn)上運(yùn)行。

  2. Running(運(yùn)行中):Pod 已經(jīng)被調(diào)度到節(jié)點(diǎn)上并且至少有一個(gè)容器正在運(yùn)行。

  3. Succeeded(已成功):Pod 中的所有容器已經(jīng)成功地完成任務(wù)并且終止。

  4. Failed(已失?。?/strong>:Pod 中的所有容器已經(jīng)執(zhí)行失敗,并且已終止。

  5. Unknown(未知):無(wú)法獲取 Pod 的狀態(tài)信息。

  6. ImagePullBackoff:鏡像拉取失敗(ImagePullBackoff )

  7. CrashLoopBackOff :運(yùn)行時(shí)程序崩潰( CrashLoopBackOff ),頻繁重啟

  8. 配置錯(cuò)誤,比如掛載的Volume不存在( RunContainerError),導(dǎo)致容器運(yùn)行錯(cuò)誤

  9. Pending磁盤(pán)掛載失敗( Pending ),比如容器掛載的puvc并沒(méi)有Pend特定的pv

  10. OOMKilled:你需要申請(qǐng)的CPU和內(nèi)存資源超過(guò)了宿主機(jī)的允許

  11. ContainerCreating:正在創(chuàng)建容器的過(guò)程中

參考文檔:(70條消息) Pod生命周期中的狀態(tài)解釋_pod狀態(tài)_鬧玩兒扣眼珠子的博客-CSDN博客

進(jìn)入Pod內(nèi)的nginx容器:

我們又如何進(jìn)入我們所創(chuàng)建的nginx容器呢?

[root@master pod]# kubectl get pod -o wide      #查看Pod的詳細(xì)信息
NAME                         READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
k8s-nginx-6d779d947c-f72hf   1/1     Running   0          6h10m   10.244.1.4   node1   <none>           <none>
k8s-nginx-6d779d947c-hnhf5   1/1     Running   0          6h10m   10.244.3.2   node3   <none>           <none>
k8s-nginx-6d779d947c-xgjzg   1/1     Running   0          6h10m   10.244.2.2   node2   <none>           <none>
scnginx                      1/1     Running   0          14m     10.244.2.3   node2   <none>           <none>
[root@master pod]# kubectl exec -it scnginx bash    #進(jìn)入scnginx容器內(nèi)
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@scnginx:/# 

建議使用: kubectl exec -it scnginx -- bash 

當(dāng)我們創(chuàng)建一個(gè)Pod,其中的步驟是什么?(啟動(dòng)Pob的流程)

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

1. 用戶(hù)通過(guò)“kubectl”部署一個(gè)新的應(yīng)用程序(如nginx.yaml文件)

2. API服務(wù)器(API Server)接收請(qǐng)求并將其存儲(chǔ)(Storage)數(shù)據(jù)庫(kù)(etcd)

3.觀察者/控制器 檢測(cè)資源變化并對(duì)其采取行動(dòng)

4.ReplicaSet監(jiān)視器/控制器 檢測(cè)到新的應(yīng)用程序,并創(chuàng)建新的pod來(lái)匹配所需的實(shí)例數(shù)

5. 調(diào)度器(Scheduler)新的pod分配給kubelet

6. Kubelet 檢測(cè) pod并通過(guò)容器運(yùn)行(例如Docker)部署它們。(在Node上運(yùn)行)

7. Kubeproxy管理pod的網(wǎng)絡(luò)流量——包括服務(wù)發(fā)現(xiàn)和負(fù)載平衡。(在Node上運(yùn)行)

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

大概步驟:

1、先是執(zhí)行命令kubectl apply -f nginx.yaml

2、成功創(chuàng)建部署控制器deployment,控制器會(huì)去檢測(cè)需要的資源

3、部署控制器deployment會(huì)再去幫助我們創(chuàng)建 副本控制器(ReplicaSet)

4、然后副本控制器會(huì)幫助我們?nèi)?strong>監(jiān)控Pod數(shù)量,一旦少了 副本控制器還會(huì)幫我們再啟一個(gè)Pod

5、Kubelet 檢測(cè)到需要被創(chuàng)建的Pod,會(huì)分配資源(如Docker創(chuàng)建)將Pod創(chuàng)建(在Node上)

6、Kubeproxy最后會(huì)管理Pod需要的內(nèi)存、流量,保障Pod穩(wěn)定運(yùn)行(在Node上)

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

k8s的?控制器有哪些:

Kubernetes 中有多個(gè)控制器(Controller),用于確保系統(tǒng)中的資源狀態(tài)與期望狀態(tài)保持一致。以下是 Kubernetes 中常見(jiàn)的控制器:

  1. ReplicaSet 控制器:用于管理 Pod 的副本數(shù),確保指定數(shù)量的 Pod 副本處于運(yùn)行狀態(tài)。

  2. Deployment 控制器:基于 ReplicaSet 控制器,提供了滾動(dòng)更新和回滾功能用于管理應(yīng)用程序的發(fā)布和更新。

  3. StatefulSet 控制器:用于管理有狀態(tài)應(yīng)用的部署,確保有序的創(chuàng)建、更新和刪除 Pod。

  4. DaemonSet 控制器:確保在集群的每個(gè)節(jié)點(diǎn)上都運(yùn)行一個(gè) Pod 的副本,常用于運(yùn)行守護(hù)進(jìn)程或日志收集器等任務(wù)。

  5. Job 控制器:用于一次性任務(wù)的執(zhí)行,確保任務(wù)成功完成后自動(dòng)終止,如批處理任務(wù)或定時(shí)任務(wù)。

  6. CronJob 控制器:基于 Job 控制器,用于按計(jì)劃定期執(zhí)行任務(wù),如定時(shí)清理任務(wù)或數(shù)據(jù)備份任務(wù)。

  7. Namespace 控制器:用于創(chuàng)建和管理命名空間,將集群內(nèi)的資源隔離和分類(lèi)

創(chuàng)建Pod過(guò)程中提出的問(wèn)題:?

1、kubelet是定期主動(dòng)訪問(wèn)api server知道有哪些pod需要啟動(dòng),還是Scheduler主動(dòng)去通知kubelet去訪問(wèn)api server的呢?

2、etcd數(shù)據(jù)庫(kù)發(fā)生了變化,那些控制器是如何知道的呢?是其他程序通知的,還是定時(shí)檢查的呢?

3、這么多的控制的,那么哪些控制器先啟動(dòng),哪些控制器后啟動(dòng)呢,他們的啟動(dòng)順序是怎樣的呢?(deployment、replicaSet、Scheduler)

其他控制器(daemonSet:會(huì)在每臺(tái)node節(jié)點(diǎn)上啟動(dòng)一個(gè)Pod,不會(huì)啟動(dòng)多了,flannel上就有)

(job:批量處理的控制器)

(cronjob:計(jì)劃任務(wù)的控制器)

Scheduler在做任務(wù)的時(shí)候,使用了那些調(diào)度算法呢?

為什么master上沒(méi)有啟動(dòng)業(yè)務(wù)app pod?

因?yàn)檫@是Scheduler調(diào)度器會(huì)根據(jù)調(diào)度策略,避免了在master上建立Pod

污點(diǎn):taint(會(huì)導(dǎo)致這個(gè)node節(jié)點(diǎn)機(jī)器不接受這個(gè)被污點(diǎn)標(biāo)記的Pod)

根據(jù)Pod的調(diào)度策略和方法:(K8s有哪些調(diào)度算法?)

1、deployment全自動(dòng)調(diào)度會(huì)根據(jù)node的綜合算力(cpu、內(nèi)存、帶寬、已經(jīng)運(yùn)行的Pod等)

2、node selector定向調(diào)度

3、nodeaffinity:它會(huì)盡量把不同的Pod的放到一臺(tái)node節(jié)點(diǎn)機(jī)器上 --》affinity(親和度)

4、podaffinity:它會(huì)盡量把相同的Pod的放到一起去(yaml文件中才會(huì)存在)

5、taints和tolerations污點(diǎn)和容忍

Pod與Pod之間如何進(jìn)行通信?

其實(shí)我看可以看做docker宿主機(jī)和內(nèi)部容器間的通信流程

我們使用的技術(shù)是overlay(基礎(chǔ)是vxlan)(flannel)、ipip和BGP(cailco)

k8s啟動(dòng)Pod

1、啟動(dòng)nginx的Pod

kubectl create deployment k8s-nginx --image=nginx -r 3

2、控制器deployment的使用

查看deployment的使用

[root@master pod]# kubectl get deployment
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
k8s-nginx   3/3     3            3           8h
[root@master pod]# 
我們?nèi)绻胪V筆od的運(yùn)行,我們刪除ReplicaSet 控制器是沒(méi)有用的(因?yàn)閯h除掉后deployment控制器會(huì)重新啟用ReplicaSet 控制器),我們必須刪除deployment控制器(命令:kubectl delete deployment)

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

?3、conctroller 控制器

參考文檔:DaemonSet | Kubernetes

DaemonSet?確保全部(或者某些)節(jié)點(diǎn)上運(yùn)行一個(gè) Pod 的副本。

當(dāng)有節(jié)點(diǎn)加入集群時(shí), 也會(huì)為他們新增一個(gè) Pod 。 當(dāng)有節(jié)點(diǎn)從集群移除時(shí),這些 Pod 也會(huì)被回收。刪除 DaemonSet 將會(huì)刪除它創(chuàng)建的所有 Pod。

DaemonSet 的一些典型用法:

  • 在每個(gè)節(jié)點(diǎn)上運(yùn)行集群守護(hù)進(jìn)程
  • 在每個(gè)節(jié)點(diǎn)上運(yùn)行日志收集守護(hù)進(jìn)程
  • 在每個(gè)節(jié)點(diǎn)上運(yùn)行監(jiān)控守護(hù)進(jìn)程
下面的 daemonset.yaml 文件描述了一個(gè)運(yùn)行 fluentd-elasticsearch(日志收集) Docker 鏡像的 DaemonSet:
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      tolerations:
      # 這些容忍度設(shè)置是為了讓該守護(hù)進(jìn)程集在控制平面節(jié)點(diǎn)上運(yùn)行
      # 如果你不希望自己的控制平面master節(jié)點(diǎn)運(yùn)行 Pod,可以刪除它們
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
我們?yōu)槭裁匆O(shè)置容忍度呢,其實(shí)原因很簡(jiǎn)單,因?yàn)?strong>k8s會(huì)對(duì)master進(jìn)行污點(diǎn)標(biāo)記,導(dǎo)致Pod無(wú)法在master運(yùn)行,但是我們的日志收集的目的是可以在所有節(jié)點(diǎn)上運(yùn)行的,因此設(shè)置容忍度可以使這個(gè)Pod在master上也能正常運(yùn)行

污點(diǎn)和容忍度:

參考文檔:污點(diǎn)和容忍度 | Kubernetes

節(jié)點(diǎn)親和性?是?Pod?的一種屬性,它使 Pod 被吸引到一類(lèi)特定的節(jié)點(diǎn)?(這可能出于一種偏好,也可能是硬性要求)。?污點(diǎn)(Taint)?則相反——它使節(jié)點(diǎn)能夠排 Pod。

容忍度(Toleration)?是應(yīng)用于 Pod 上的。容忍度允許調(diào)度器調(diào)度帶有對(duì)應(yīng)污點(diǎn)的 Pod。 容忍度允許調(diào)度但并不保證調(diào)度:作為其功能的一部分, 調(diào)度器也會(huì)評(píng)估其他參數(shù)。

污點(diǎn)和容忍度(Toleration)相互配合,可以用來(lái)避免 Pod 被分配到不合適的節(jié)點(diǎn)上。 每個(gè)節(jié)點(diǎn)上都可以應(yīng)用一個(gè)或多個(gè)污點(diǎn),這表示對(duì)于那些不能容忍這些污點(diǎn)的 Pod, 是不會(huì)被該節(jié)點(diǎn)接受的。

污點(diǎn):給node和master節(jié)點(diǎn)打污點(diǎn)

容忍度:pod去容忍污點(diǎn)節(jié)點(diǎn)

你可以使用命令?kubectl taint?給node節(jié)點(diǎn)增加一個(gè)污點(diǎn)。比如

kubectl taint nodes node1 key1=value1:NoSchedule

給節(jié)點(diǎn)?node1?增加一個(gè)污點(diǎn),它的鍵名是?key1,鍵值是?value1,效果是?NoSchedule。 這表示只有擁有和這個(gè)污點(diǎn)相匹配的容忍度的 Pod 才能夠被分配到?node1?這個(gè)節(jié)點(diǎn)。

若要移除上述命令所添加的污點(diǎn),你可以執(zhí)行:

kubectl taint nodes node1 key1=value1:NoSchedule-

你可以在 Pod 規(guī)約中為 Pod 設(shè)置容忍度。 下面兩個(gè)容忍度均與上面例子中使用?kubectl taint?命令創(chuàng)建的污點(diǎn)相匹配, 因此如果一個(gè) Pod 擁有其中的任何一個(gè)容忍度,都能夠被調(diào)度到?node1

配置一:?
tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"

#equal 就需要寫(xiě)key和value
配置二:?
tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoSchedule"

#exists 就不需要寫(xiě)value
先檢查key是否匹配,匹配是看operator是exists或者equal,這表示匹配,就會(huì)允許在有污點(diǎn)的node節(jié)點(diǎn)上啟動(dòng)這個(gè)Pod,effect可以理解為如果key不匹配,就不允許調(diào)度到這個(gè)污點(diǎn)節(jié)點(diǎn)。

這里是一個(gè)使用了容忍度的 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  tolerations:
  - key: "example-key"
    operator: "Exists"
    effect: "NoSchedule"

?operator?的默認(rèn)值是?Equal。

一個(gè)容忍度和一個(gè)污點(diǎn)相“匹配”是指它們有一樣的鍵名和效果,并且:

  • 如果?operator?是?Exists(此時(shí)容忍度不能指定?value),或者
  • 如果?operator?是?Equal,則它們的?value?應(yīng)該相等。

詳細(xì)請(qǐng)看官方文檔:污點(diǎn)和容忍度 | Kubernetes

4、Pod的資源控制

參考文檔:為容器和 Pod 分配內(nèi)存資源 | Kubernetes?

指定內(nèi)存請(qǐng)求和限制

創(chuàng)建一個(gè)命名空間,以便將本練習(xí)中創(chuàng)建的資源與集群的其余部分隔離。
kubectl create namespace mem-example

要為容器指定內(nèi)存請(qǐng)求,請(qǐng)?jiān)谌萜髻Y源清單中包含?resources: requests?字段。 同理,要指定內(nèi)存限制,請(qǐng)包含?resources: limits

你將創(chuàng)建一個(gè)擁有一個(gè)容器的 Pod。 容器將會(huì)請(qǐng)求 100 MiB 內(nèi)存,并且內(nèi)存會(huì)被限制在 200 MiB 以?xún)?nèi)。 這是 Pod 的配置文件:
apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-ctr
    image: polinux/stress
    resources:
      requests:
        memory: "100Mi"              #該 Pod 中容器的內(nèi)存請(qǐng)求為 100 MiB,內(nèi)存限制為 200 MiB。
      limits:
        memory: "200Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

#配置文件的 args 部分提供了容器啟動(dòng)時(shí)的參數(shù)。 "--vm-bytes", "150M" 參數(shù)告知容器嘗試分配 150 MiB 內(nèi)存。
開(kāi)始創(chuàng)建 Pod:
kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit.yaml --namespace=mem-example

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

驗(yàn)證 Pod 中的容器是否已運(yùn)行:
kubectl get pod memory-demo --namespace=mem-example

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

查看 Pod 相關(guān)的詳細(xì)信息:
kubectl get pod memory-demo --output=yaml --namespace=mem-example

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

運(yùn)行?kubectl top?命令,獲取該 Pod 的指標(biāo)數(shù)據(jù)(前提是你已經(jīng)有在運(yùn)行中的?metrics-server

添加?metrics-server:(73條消息) k8s集群安裝metrics-server_k8s安裝metrics_MssGuo的博客-CSDN博客

kubectl top pod memory-demo --namespace=mem-example

輸出結(jié)果顯示:Pod 正在使用的內(nèi)存大約為 162,900,000 字節(jié),約為 150 MiB。 這大于 Pod 請(qǐng)求的 100 MiB,但在 Pod 限制的 200 MiB之內(nèi)。

NAME                        CPU(cores)   MEMORY(bytes)
memory-demo                 <something>  162856960
刪除 Pod:
kubectl delete pod memory-demo --namespace=mem-example

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

支持容器訪問(wèn)策略和容器帶寬限制:istio組件

5、一個(gè)Pod里面運(yùn)行多個(gè)容器:

Pod 的配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-ctr
    image: polinux/stress
    resources:
      requests:
        memory: "100Mi"             
      limits:
        memory: "200Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
  - name: webleader2
    image: docker.io/nginx
    resources:
      requests:
        cpu: 100m
        memory: "100Mi"             
      limits:
        memory: "200Mi"
    ports:
      - containerPort: 80

創(chuàng)建multi_c.yaml文件存儲(chǔ)Pod

[root@master pod]# vim multi_c.yaml 

開(kāi)始創(chuàng)建 Pod:

[root@master pod]# kubectl apply -f multi_c.yaml 
pod/memory-demo created

?驗(yàn)證 Pod 中的容器是否已運(yùn)行:

[root@master pod]# kubectl get pod -n mem-example   #表示有兩個(gè)容器在這個(gè)命名空間運(yùn)行
NAME          READY   STATUS    RESTARTS   AGE
memory-demo   2/2     Running   0          56s

內(nèi)部訪問(wèn)我創(chuàng)建的nginx容器:

[root@master pod]# curl 10.244.3.4
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a >nginx.org</a>.<br/>
Commercial support is available at
<a >nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master pod]# 

6、將創(chuàng)建的Pod發(fā)布出去:

參考文檔:?服務(wù)(Service) | Kubernetes

定義一個(gè)內(nèi)有nginx容器的Pod,并創(chuàng)建成功

[root@master pod]# cat my_nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 3
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        ports:
        - containerPort: 80
[root@master pod]# 

開(kāi)始創(chuàng)建 Pod:

[root@master pod]# kubectl apply -f my_nginx.yaml 

查看是否創(chuàng)建成功:

[root@master pod]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATES
k8s-nginx-6d779d947c-f72hf   1/1     Running   0          16h   10.244.1.4   node1   <none>           <none>
k8s-nginx-6d779d947c-hnhf5   1/1     Running   0          16h   10.244.3.2   node3   <none>           <none>
k8s-nginx-6d779d947c-xgjzg   1/1     Running   0          16h   10.244.2.2   node2   <none>           <none>
my-nginx-cf54cdbf7-8sbns     1/1     Running   0          13m   10.244.1.5   node1   <none>           <none>
my-nginx-cf54cdbf7-ptjw7     1/1     Running   0          8s    10.244.3.5   node3   <none>           <none>
my-nginx-cf54cdbf7-wf48x     1/1     Running   0          13m   10.244.2.4   node2   <none>           <none>
scnginx                      1/1     Running   0          10h   10.244.2.3   node2   <none>           <none>
[root@master pod]# 

創(chuàng)建Service服務(wù),暴露我們的nginx容器服務(wù)(發(fā)布服務(wù)(服務(wù)類(lèi)型))

[root@master pod]# cat  my_service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  type: NodePort
  ports: 
    # 默認(rèn)情況下,為了方便起見(jiàn),`targetPort` 被設(shè)置為與 `port` 字段相同的值。
  - port: 8080
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    run: my-nginx
    
[root@master pod]# 

開(kāi)始創(chuàng)建 Pod(service服務(wù)):?

[root@master pod]# kubectl apply -f my_service.yaml 
service/my-nginx created
[root@master pod]# 

Service發(fā)布成功了?

[root@master pod]# kubectl get service
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.0.0.1      <none>        443/TCP          19h
my-nginx     NodePort    10.6.55.120   <none>        8080:32465/TCP   63s
[root@master pod]# 

訪問(wèn)發(fā)布的Pod

我們只需要隨便訪問(wèn)k8s集群里的任何一臺(tái)node節(jié)點(diǎn)服務(wù)器,包括master
curl http://192.168.2.150:32465   #master的IP地址 + 端口

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

訪問(wèn)nginx容器的模擬圖:(外面的用戶(hù)訪問(wèn)Pod的數(shù)據(jù)流程:

Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù),kubernetes,容器,云原生

如上圖所示: 瀏覽器訪問(wèn) 192.168.2.150:32465? --》訪問(wèn)到?node1/2/3上 my-nginx 10.6.55.120:8080?--》最后訪問(wèn)到node節(jié)點(diǎn)里面的Pod內(nèi)的nginx容器? 10.244.1.5:80

其實(shí)中間還會(huì)存在一臺(tái)LB(負(fù)載均衡器)來(lái)分發(fā)流量給node1/2/3節(jié)點(diǎn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-534264.html

到了這里,關(guān)于Kubernetes 啟動(dòng)Pod的方法-Pod的調(diào)度算法-Pod間的通信-k8s的控制器-Pod資源控制-發(fā)布Service服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【k8s】pod調(diào)度——親和,反親和,污點(diǎn),容忍

    【k8s】pod調(diào)度——親和,反親和,污點(diǎn),容忍

    官方網(wǎng)址:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/ pod.spec.nodeAffinity ●preferredDuringSchedulingIgnoredDuringExecution:軟策略? p開(kāi)頭 ●requiredDuringSchedulingIgnoredDuringExecution:硬策略? r開(kāi)頭 pod.spec.affinity.podAffinity/podAntiAffinity ●preferredDuringSchedulingIgnoredDuringExecution:軟策

    2024年02月05日
    瀏覽(27)
  • K8S pod 均勻調(diào)度分配 —— 筑夢(mèng)之路

    ? 在 k8s 中 通過(guò)? kube-scheduler ?組件來(lái)實(shí)現(xiàn) pod 的調(diào)度,所謂調(diào)度,即把需要?jiǎng)?chuàng)建的 pod 放到 合適的 node 上,大概流程為,通過(guò)對(duì)應(yīng)的? 調(diào)度算法 ?和? 調(diào)度策略 ,為待調(diào)度的 pod 列表中的 pod 選擇一個(gè)最合適的 Node,然后目標(biāo)節(jié)點(diǎn)上的? kubelet ?通過(guò) watch 接口監(jiān)聽(tīng)到? kube-sch

    2024年02月16日
    瀏覽(26)
  • 學(xué)習(xí)筆記十四:K8S最小調(diào)度單元POD概述

    學(xué)習(xí)筆記十四:K8S最小調(diào)度單元POD概述

    K8s官方文檔:https://kubernetes.io/ K8s中文官方文檔: https://kubernetes.io/zh/ K8s Github地址:https://github.com/kubernetes/kubernetes Pod資源對(duì)應(yīng)的官方文檔:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/ Pod是Kubernetes中的最小調(diào)度單元,k8s是通過(guò)定義一個(gè)Pod的資源,然后在Pod里面運(yùn)行容器,容器

    2024年02月12日
    瀏覽(31)
  • 3.Kubernetes—pod通信網(wǎng)絡(luò)原理

    3.Kubernetes—pod通信網(wǎng)絡(luò)原理

    一個(gè) service,二個(gè)IP,三個(gè) port? 1、同一個(gè) Pod 中 容器通信 2、同一個(gè)節(jié)點(diǎn)多個(gè) Pod 之間通信 3、跨節(jié)點(diǎn)的pod通信 4、外部網(wǎng)絡(luò)和 pod 之間通信 NodePort nodeport是外部流量訪問(wèn)K8s的一種方式,即nodeIP:nodePort,是提供給外部流量訪問(wèn)K8s集群資源的一種方式??偟膩?lái)說(shuō),我們可以通過(guò)在

    2024年02月07日
    瀏覽(20)
  • 22-k8s中pod的調(diào)度-親和性affinity

    22-k8s中pod的調(diào)度-親和性affinity

    ? ? ? ? 在k8s當(dāng)中,“親和性”分為三種,節(jié)點(diǎn)親和性、pod親和性、pod反親和性; 親和性分類(lèi) 名稱(chēng) 解釋說(shuō)明 nodeAffinity 節(jié)點(diǎn)親和性 通過(guò)【節(jié)點(diǎn)】標(biāo)簽匹配,用于控制pod調(diào)度到哪些node節(jié)點(diǎn)上,以及不能調(diào)度到哪些node節(jié)點(diǎn)上;(主角node節(jié)點(diǎn)) podAffinity pod親和性 通過(guò)【節(jié)點(diǎn)+

    2024年02月20日
    瀏覽(25)
  • K8S之運(yùn)用污點(diǎn)、容忍度設(shè)置Pod的調(diào)度約束

    K8S之運(yùn)用污點(diǎn)、容忍度設(shè)置Pod的調(diào)度約束

    taints 是鍵值數(shù)據(jù), 用在節(jié)點(diǎn)上 ,定義污點(diǎn); tolerations 是鍵值數(shù)據(jù), 用在pod上 ,定義容忍度,能容忍哪些污點(diǎn)。 污點(diǎn) 是定義在k8s集群的節(jié)點(diǎn)上的鍵值屬性數(shù)據(jù),可以決定拒絕那些pod。 給了Node選則的主動(dòng)權(quán),給Node打個(gè)污點(diǎn), 不容忍 的Pod就調(diào)度不上來(lái)。 現(xiàn)象:剛部署好的

    2024年02月19日
    瀏覽(20)
  • 【Kubernetes】K8s 查看 Pod 的狀態(tài)

    NAME :Pod 的名稱(chēng)。 READY :代表 Pod 里面有幾個(gè)容器,前面是啟動(dòng)的,后面是總數(shù), 1 / 1 1/1 1/1 。 STATUS :就是當(dāng)前 Pod 狀態(tài),最常見(jiàn)的就是 Running 正在運(yùn)行,最期望的狀態(tài),只要不是 Running 的就說(shuō)明有問(wèn)題,就算是 Running 的就不一定沒(méi)有問(wèn)題。 狀態(tài) 說(shuō)明 Pending 掛起 在執(zhí)行創(chuàng)建

    2024年01月15日
    瀏覽(138)
  • kubernetes(k8s) pod(資源限制、基礎(chǔ)概念)

    kubernetes(k8s) pod(資源限制、基礎(chǔ)概念)

    目錄 ?一、資源限制 1、概念 1.2、Pod和容器的資源請(qǐng)求和限制 1.3、CPU資源單位 1.4、內(nèi)存資源單位 1.5、CPU和內(nèi)存的Requests和Limits的特點(diǎn) 1.6、案例 二、pod 的兩種使用方式 三、pod 資源共享 四、底層容器Pause 1、pause 共享資源 1.1、網(wǎng)絡(luò) 1.2、存儲(chǔ) 1.3、小結(jié) 2、Pause主要功能 3、Pod

    2024年02月05日
    瀏覽(102)
  • Kubernetes(k8s)核心資源解析:Pod詳解

    Kubernetes(k8s)核心資源解析:Pod詳解

    ??The Begin??點(diǎn)點(diǎn)關(guān)注,收藏不迷路?? Pod是Kubernetes中最小的調(diào)度單元,它可以包含一個(gè)或多個(gè)容器。Pod中的所有容器共享網(wǎng)絡(luò)和存儲(chǔ)卷,它們一起運(yùn)行在同一個(gè)節(jié)點(diǎn)上。Pod提供了一種抽象層,使得容器可以作為一個(gè)邏輯單元來(lái)管理。 Pod中的容器共享IP地址、端口空間和存儲(chǔ)

    2024年04月11日
    瀏覽(102)
  • K8S第四講 Kubernetes刪除pod阻塞問(wèn)題

    在Kubernetes中,當(dāng)您嘗試刪除一個(gè)Pod時(shí),可能會(huì)遇到Pod一直阻塞的情況。這通常是由于Pod正在運(yùn)行或被其他資源(例如ReplicaSet或Deployment)控制而導(dǎo)致的。以下是一些可能的解決方案: 1: 確認(rèn)Pod是否正在運(yùn)行:在執(zhí)行刪除Pod命令之前,請(qǐng)先檢查Pod的狀態(tài),確保它沒(méi)有在運(yùn)行中

    2024年02月05日
    瀏覽(118)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包