中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Kubernetes管理pod資源對象

這篇文章主要為大家分享Kubernetes管理pod資源對象的方法。文中還介紹了Kubernetes中的Namespace,希望大家通過這篇文章能有所收獲。

創(chuàng)新互聯(lián)公司主營東臺網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App制作,東臺h5小程序設(shè)計搭建,東臺網(wǎng)站營銷推廣歡迎東臺等地區(qū)企業(yè)咨詢

一,k8s的資源對象

Deployment、Service、Pod是k8s最核心的3個資源對象

Deployment:最常見的無狀態(tài)應(yīng)用的控制器,支持應(yīng)用的擴(kuò)縮容、滾動升級等操作。

Service:為彈性變動且存在生命周期的Pod對象提供了一個固定的訪問接口,用于服務(wù)發(fā)現(xiàn)和服務(wù)訪問。

Pod:是運(yùn)行容器以及調(diào)度的最小單位。同一個pod可以同時運(yùn)行多個容器,這些容器共享net、UTS、IPC,除此之外還有USER、PID、MOUNT。

ReplicationController:用于確保每個Pod副本在任意時刻都能滿足目標(biāo)數(shù)量,簡單來說,它用于每個容器或容器組總是運(yùn)行并且可以訪問的:老一代無狀態(tài)的Pod應(yīng)用控制器。

RwplicatSet:新一代的無狀態(tài)的Pod應(yīng)用控制器,它與RC的不同之處在于支持的標(biāo)簽選擇器不同,RC只支持等值選擇器(鍵值對),RS還額外支持基于集合的選擇器。

StatefulSet:用于管理有狀態(tài)的持久化應(yīng)用,如database服務(wù)程序,它與Deployment不同之處在于,它會為每一個pod創(chuàng)建一個獨(dú)有的持久性標(biāo)識符,并確保每個pod之間的順序性。

DaemonSet:用于確保每一個節(jié)點(diǎn)都運(yùn)行了某個pod的一個副本,新增的節(jié)點(diǎn)一樣會被添加到此類pod,在節(jié)點(diǎn)移除時,此pod會被回收。

Job:用于管理運(yùn)行完成后即可終止的應(yīng)用,例如批量處理做作業(yè)任務(wù);

1.Pod的生命周期被定義為以下幾個階段。

  • Pending:Pod已經(jīng)被創(chuàng)建,但是一個或者多個容器還未創(chuàng)建,這包括Pod調(diào)度階段,以及容器鏡像的下載過程。
  • Running:Pod已經(jīng)被調(diào)度到Node,所有容器已經(jīng)創(chuàng)建,并且至少一個容器在運(yùn)行或者正在重啟。
  • Succeeded:Pod中所有容器正常退出。
  • Failed:Pod中所有容器退出,至少有一個容器是一次退出的。

2.特點(diǎn)

Pod是能夠被創(chuàng)建、調(diào)度和管理的最小單元;
每個Pod都有一個獨(dú)立的IP;
一個Pod由一個或多個容器構(gòu)成,并共享命名空間和共享存儲等;Pod所有容器在同一個Node上;
容器生命周期管理;
對資源使用進(jìn)行限制,resources(requests、limits);
對容器進(jìn)行探測:livenessProbe;
集群內(nèi)的Pod之間都可以任意訪問,這一般是通過一個二層網(wǎng)絡(luò)來實(shí)現(xiàn)的。

3.Pod與容器

在Docker中,容器是最小的處理單元,增刪改查的對象是容器,容器是一種虛擬化技術(shù),容器之間是隔離的,隔離是基于Linux Namespace實(shí)現(xiàn)的。
而在K8S中,Pod包含一個或者多個相關(guān)的容器,Pod可以認(rèn)為是容器的一種延伸擴(kuò)展,一個Pod也是一個隔離體,而Pod內(nèi)部包含的一組容器又是共享的(包括PID、Network、IPC、UTS)。除此之外,Pod中的容器可以訪問共同的數(shù)據(jù)卷來實(shí)現(xiàn)文件系統(tǒng)的共享。

4.資源請求與限制

創(chuàng)建Pod時,可以指定計算資源(目前支持的資源類型有CPU和內(nèi)存),即指定每個容器的資源請求(Request)和資源限制(Limit),資源請求是容器所需的最小資源需求,資源限制則是容器不能超過的資源上限。關(guān)系是: 0<=request<=limit<=infinity
Pod的資源請求就是Pod中所有容器資源請求之和。K8S在調(diào)度Pod時,會根據(jù)Node中的資源總量(通過cAdvisor接口獲得),以及該Node上已使用的計算資源,來判斷該Node是否滿足需求。
資源請求能夠保證Pod有足夠的資源來運(yùn)行,而資源限制則是防止某個Pod無限制地使用資源,導(dǎo)致其他Pod崩潰。特別是在公有云場景,往往會有惡意軟件通過搶占內(nèi)存來平臺。
具體配置請見http://blog.csdn.net/liyingke112/article/details/77452630

5.一pod多容器

Pod主要是在容器化環(huán)境中建立一個面向應(yīng)用的“邏輯主機(jī)”模型,它可以包含一個或多個相互間緊密聯(lián)系的容器。當(dāng)其中任一容器異常時,該P(yáng)od也隨之異常。

一pod多容器,讓多個同應(yīng)用的單一容器整合到一個類虛擬機(jī)中,使其所有容器共用一個vm的資源,提高耦合度,從而方便副本的復(fù)制,提高整體的可用性。

一pod多容器的優(yōu)勢:

同個Pod下的容器之間能更方便的共享數(shù)據(jù)和通信,使用相同的網(wǎng)絡(luò)命名空間、IP地址和端口區(qū)間,相互之間能通過localhost來發(fā)現(xiàn)和通信。

在同個Pod內(nèi)運(yùn)行的容器共享存儲空間(如果設(shè)置),存儲卷內(nèi)的數(shù)據(jù)不會在容器重啟后丟失,同時能被同Pod下別的容器讀取。

相比原生的容器接口,Pod通過提供更高層次的抽象,簡化了應(yīng)用的部署和管理,不同容器提供不同服務(wù)。Pod就像一個管理橫向部署的單元,主機(jī)托管、資源共享、協(xié)調(diào)復(fù)制和依賴管理都可以自動處理。

6.Pod-使用

核心原則是:將多個應(yīng)用分散到多個Pod中
原因:基于資源的合理應(yīng)用;擴(kuò)縮容,不同應(yīng)用應(yīng)該有不同的擴(kuò)縮容策略等。
如果容器之間不是必須運(yùn)行在一起的話,那么就放到不同的Pod里
如果容器之前是相互獨(dú)立的組件,那么就放到不同的Pod里
如果容器之前擴(kuò)縮容策略不一樣,那么就放到不同的Pod里
結(jié)論:單Pod單容器應(yīng)用,除非特殊原因

實(shí)驗(yàn)環(huán)境

主機(jī)IP地址服務(wù)
master192.168.1.21k8s
node01192.168.1.22k8s
node02192.168.1.23k8s

基于https://blog.51cto.com/14320361/2464655 的實(shí)驗(yàn)繼續(xù)進(jìn)行

二,Namespace:名稱空間

默認(rèn)的名稱空間:Default

Namespace(命名空間)是kubernetes系統(tǒng)中的另一個重要的概念,通過將系統(tǒng)內(nèi)部的對象“分配”到不同的Namespace中,形成邏輯上分組的不同項(xiàng)目、小組或用戶組,便于不同的分組在共享使用整個集群的資源的同時還能被分別管理。

Kubernetes集群在啟動后,會創(chuàng)建一個名為“default”的Namespace,如果不特別指明Namespace,則用戶創(chuàng)建的Pod、RC、Service都被系統(tǒng)創(chuàng)建到“default”的Namespace中。

1.查看名稱空間

[root@master ~]# kubectl get namespaces

Kubernetes管理pod資源對象

2.查看名稱空間詳細(xì)信息

[root@master ~]# kubectl describe ns default

Kubernetes管理pod資源對象

3.創(chuàng)建名稱空間

[root@master ~]# kubectl create ns bdqn

查看一下

[root@master ~]# kubectl get namespaces

Kubernetes管理pod資源對象

4.創(chuàng)建namespace的yaml文件

(1)查看格式

[root@master ~]# kubectl explain ns
//查看nasespace的yaml文件的格式

(2)創(chuàng)建namespace的yaml文件

[root@master ~]# vim test-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: test

(3)運(yùn)行namespace的yaml文件

[root@master ~]# kubectl apply -f test-ns.yaml 

(4)查看一下

[root@master ~]# kubectl get ns

Kubernetes管理pod資源對象

4.刪除名稱空間

[root@master ~]# kubectl delete ns test 
[root@master ~]# kubectl delete -f test-ns.yaml 

注意:namespace資源對象進(jìn)用于資源對象的隔離,并不能隔絕不同名稱空間的Pod之間的通信。那是網(wǎng)絡(luò)策略資源的功能。

5.查看指定名稱空間

可使用--namespace或-n選項(xiàng)

[root@master ~]# kubectl get pod -n kube-system 
[root@master ~]# kubectl get pod --namespace kube-system 

三,Pod

1.編寫一個pod的yaml文件

[root@master ~]# vim pod.yaml
kind: Pod
apiVersion: v1
metadata:
  name: test-pod
spec:
  containers:
  - name: test-app
    image: 192.168.1.21:5000/web:v1

pod的yaml文件不支持replicas字段

(1)運(yùn)行一下

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

(2)查看一下

[root@master ~]# kubectl get pod

Kubernetes管理pod資源對象

ps:這個pod因?yàn)槭亲约簞?chuàng)建的,所以刪除之后k8s并不會自動生成,相當(dāng)于docker中創(chuàng)建

2.指定pod的namespace名稱空間

(1)修改pod的yaml文件

[root@master ~]# vim pod.yaml
kind: Pod        #資源類型
apiVersion: v1   #api版本
metadata:
  name: test-pod    #指定控制器名稱
  namespace: bdqn   #指定namespace(名稱空間)
spec:
  containers:      #容器
  - name: test-app  #容器名稱
    image: 192.168.1.21:5000/web:v1  #鏡像
執(zhí)行一下
[root@master ~]# kubectl apply -f pod.yaml 

(2)查看一下

[root@master ~]#  kubectl get pod -n bdqn 
//根據(jù)namespace名稱查看

Kubernetes管理pod資源對象

3.pod中鏡像獲取策略

Always:鏡像標(biāo)簽為“l(fā)aster”或鏡像不存在時,總是從指定的倉庫中獲取鏡像。

IfNotPresent:僅當(dāng)本地鏡像不存在時才從目標(biāo)倉庫下載。

Never:禁止從倉庫中下載鏡像,即只使用本地鏡像。

注意:對于標(biāo)簽為“l(fā)aster”或者標(biāo)簽不存在,其默認(rèn)的鏡像下載策略為“Always”,而對于其他的標(biāo)簽鏡像,默認(rèn)策略為“IfNotPresent”。

4.觀察pod和service的不同并關(guān)聯(lián)

(1)pod的yaml文件(指定端口)

[root@master ~]# vim pod.yaml 
kind: Pod          #資源類型
apiVersion: v1      #api版本
metadata:
  name: test-pod       #指定控制器名稱
  namespace: bdqn   #指定namespace(名稱空間)
spec:
  containers:                          #容器
  - name: test-app                    #容器名稱
    image: 192.168.1.21:5000/web:v1   #鏡像
    imagePullPolicy: IfNotPresent   #獲取的策略
    ports:
    - protocol: TCP
      containerPort: 80  
<1>刪除之前的pod
[root@master ~]# kubectl delete pod -n bdqn test-pod 
<2>執(zhí)行一下
[root@master ~]# kubectl apply -f pod.yaml 
<3>查看一下
[root@master ~]# kubectl get pod -n bdqn 

Kubernetes管理pod資源對象

(2)pod的yaml文件(修改端口)

[root@master ~]# vim pod.yaml 
kind: Pod
apiVersion: v1
metadata:
  name: test-pod
  namespace: bdqn
spec:
  containers:
  - name: test-app
    image: 192.168.1.21:5000/web:v1
    imagePullPolicy: IfNotPresent
    ports:
    - protocol: TCP
      containerPort: 90   #改一下端口
<1>刪除之前的pod
[root@master ~]# kubectl delete pod -n bdqn test-pod 
<2>執(zhí)行一下
[root@master ~]# kubectl apply -f pod.yaml 
<3>查看一下
[root@master ~]# kubectl get pod -n bdqn -o wide

Kubernetes管理pod資源對象

<4>訪問一下

Kubernetes管理pod資源對象

會發(fā)現(xiàn)修改的90端口并不生效,他只是一個提示字段并不生效。

(3)pod的yaml文件(添加標(biāo)簽)

[root@master ~]# vim pod.yaml 
kind: Pod
apiVersion: v1
metadata:
  name: test-pod
  namespace: bdqn
  labels:                 #標(biāo)簽
    app: test-web          #標(biāo)簽名稱
spec:
  containers:
  - name: test-app
    image: 192.168.1.21:5000/web:v1
    imagePullPolicy: IfNotPresent
    ports:
    - protocol: TCP
      containerPort: 90   #改一下端口
--------------------------------------pod---------------------------------------------

(4)編寫一個service的yaml文件

[root@master ~]# vim test-svc.yaml 
apiVersion: v1      #api版本
kind: Service          #資源類型
metadata:
  name: test-svc       #指定控制器名稱
  namespace: bdqn   #指定namespace(名稱空間)
spec:
  selector:          #標(biāo)簽
    app: test-web    #標(biāo)簽名稱(須和pod的標(biāo)簽名稱一致)
  ports:              
  - port: 80          #宿主機(jī)端口
    targetPort: 80    #容器端口

會發(fā)現(xiàn)添加的80端口生效了,所以不能亂改。

<1>執(zhí)行一下
[root@master ~]# kubectl apply -f test-svc.yaml
<2>查看一下
[root@master ~]# kubectl get svc -n bdqn 

Kubernetes管理pod資源對象

[root@master ~]# kubectl describe svc -n bdqn test-svc 

Kubernetes管理pod資源對象

<4>訪問一下
[root@master ~]# curl 10.98.57.97 

Kubernetes管理pod資源對象

--------------------------------------service---------------------------------------------

四,容器的重啟策略

Pod的重啟策略(RestartPolicy)應(yīng)用與Pod內(nèi)所有容器,并且僅在Pod所處的Node上由kubelet進(jìn)行判斷和重啟操作。當(dāng)某個容器異常退出或者健康檢查失敗時,kubelet將根據(jù)RestartPolicy的設(shè)置來進(jìn)行相應(yīng)的操作。

Always:(默認(rèn)情況下使用)但凡Pod對象終止就將其重啟;
OnFailure:僅在Pod對象出現(xiàn)錯誤時才將其重啟;
Never:從不重啟;

五,pod的默認(rèn)健康檢查

每個容器啟動時都會執(zhí)行一個進(jìn)程,此進(jìn)程由 Dockerfile 的 CMD 或 ENTRYPOINT 指定。如果進(jìn)程退出時返回碼非零,則認(rèn)為容器發(fā)生故障,Kubernetes 就會根據(jù) restartPolicy 重啟容器。

(1)編寫健康檢查的yaml文件

下面我們模擬一個容器發(fā)生故障的場景,Pod 配置文件如下:

[root@master ~]# vim healcheck.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: healcheck
  name:  healcheck
spec:
  restartPolicy: OnFailure  #指定重啟策略
  containers:
  - name:  healcheck
    image: busybox:latest
    args:                   #生成pod時運(yùn)行的命令
    - /bin/sh
    - -c
    - sleep 20; exit 1 

<1>執(zhí)行一下

[root@master ~]# kubectl apply -f  healcheck.yaml

<2>查看一下

[root@master ~]# kubectl get pod -o wide

Kubernetes管理pod資源對象

[root@master ~]# kubectl get pod -w | grep healcheck

Kubernetes管理pod資源對象

在上面的例子中,容器進(jìn)程返回值非零,Kubernetes 則認(rèn)為容器發(fā)生故障,需要重啟。但有不少情況是發(fā)生了故障,但進(jìn)程并不會退出。

六,小實(shí)驗(yàn)

1)以自己的名稱創(chuàng)建一個k8s名稱空間,以下所有操作都在此名稱空間中。

(1)創(chuàng)建名稱空間

[root@master ~]# kubectl create ns xgp

(2)查看一下

[root@master ~]# kubectl get ns xgp 

Kubernetes管理pod資源對象

2)創(chuàng)建一個Pod資源對象,使用的是私有倉庫中私有鏡像,其鏡像的下載策略為:NEVER。 Pod的重啟策略為: Never.

[root@master ~]# vim pod.yaml
kind: Pod
apiVersion: v1
metadata:
  name: test-pod
  namespace: xgp
  labels:
    app: test-web
spec:
  restartPolicy: Never
  containers:
  - name: www
    image: 192.168.1.21:5000/web:v1
    imagePullPolicy: Never
    args:                   
    - /bin/sh
    - -c
    - sleep 90; exit 1
    ports:
    - protocol: TCP
      containerPort: 80

3)創(chuàng)建出容器之后,執(zhí)行非正常退出,查看Pod的最終狀態(tài)。

(1)執(zhí)行一下上面pod的yaml文件

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

(2)動態(tài)查看ns中test-pod的信息

[root@master ~]# kubectl get pod -n xgp  -w | grep test-pod

Kubernetes管理pod資源對象

刪除test-pod

[root@master ~]# kubectl delete pod -n xgp test-pod 

4) 創(chuàng)建一個Service資源對象,與上述Pod對象關(guān)聯(lián),驗(yàn)證他們的關(guān)聯(lián)性。

(1)修改pod的yaml文件

[root@master ~]# vim pod.yaml
kind: Pod
apiVersion: v1
metadata:
  name: test-pod
  namespace: xgp
  labels:
    app: test-web
spec:
  restartPolicy: Never
  containers:
  - name: www
    image: 192.168.1.21:5000/web:v1
    imagePullPolicy: Never
    ports:
    - protocol: TCP
      containerPort: 80

(1)編寫service的yaml文件

[root@master ~]# vim svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: test-svc
  namespace: xgp
spec:
  selector:
    app: test-web
  ports:
  - port: 80
    targetPort: 80

(2)執(zhí)行一下

[root@master ~]# kubectl apply -f svc.yaml 

(3)查看一下

[root@master ~]# kubectl get  pod -o wide -n xgp 

Kubernetes管理pod資源對象

(4)訪問一下

[root@master ~]# curl 10.244.1.21

Kubernetes管理pod資源對象

看完上述內(nèi)容,你們對pod資源對象有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。

分享題目:Kubernetes管理pod資源對象
網(wǎng)址分享:http://www.rwnh.cn/article6/ipcjog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司商城網(wǎng)站、品牌網(wǎng)站制作網(wǎng)站設(shè)計、小程序開發(fā)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
凤阳县| 周口市| 博客| 庆元县| 南丰县| 抚州市| 华蓥市| 双峰县| 柘城县| 平凉市| 搜索| 汤原县| 南川市| 石渠县| 永安市| 石泉县| 革吉县| 锦屏县| 牡丹江市| 确山县| 眉山市| 平定县| 大名县| 密山市| 偃师市| 湘阴县| 安丘市| 通江县| 登封市| 普兰县| 砀山县| 宁乡县| 九江县| 万载县| 徐州市| 信阳市| 阜阳市| 新巴尔虎左旗| 通江县| 柳州市| 鲁甸县|