四、Pod進(jìn)階

1、通過yaml文件創(chuàng)建pod

apiVersion: v1
kind: Pod
metadata:
  name: base-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.14

apiVersion:api的版本,可以通過kubectl api-versions查看
kind:資源的類型
metadata:元數(shù)據(jù)描述,描述kind定義的資源類型的元數(shù)據(jù)
spec:用戶期望的狀態(tài)
status:容器創(chuàng)建后系統(tǒng)的狀態(tài)

2、metadata字段

2.1namespace

apiVersion: v1
kind: Pod
metadata:
  name: base-pod
  namespace: default

命名空間,不同類型的pod運(yùn)行在創(chuàng)建出來的不同的命名空間當(dāng)中

2.2labels

apiVersion: v1
kind: Pod
metadata:
  name: base-pod
  namespace: default
  labels:
    app: nginx
    test: busybox

標(biāo)簽,pod的調(diào)度和其它資源選擇pod時通過標(biāo)簽進(jìn)行選擇
通過key/value鍵值對的形式進(jìn)行定義

2.3annotations

apiVersion: v1
kind: Pod
metadata:
  name: base-pod
  namespace: default
  labels:
    app: nginx
    test: busybox
  annotations:
    release: beta
    author: jan29

注解 與Label類似,也使用key/value鍵值對的形式進(jìn)行定義。
用Annotation來記錄的信息包括但不限于
1、build信息、release信息、Docker鏡像信息等,例如時間戳、release id號、PR號、鏡像hash值、docker registry地址等;
2、日志庫、監(jiān)控庫、分析庫等資源庫的地址信息;
3、程序調(diào)試工具信息,例如工具名稱、版本號等;
4、團(tuán)隊的聯(lián)系信息,例如電話號碼、負(fù)責(zé)人名稱、網(wǎng)址等。

3、spec字段

3.1containers

用于定義容器,可以定義多個

3.1.1ports

spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - name: nginx
      containerPort: 80
      hostPort: 80

用于定義port
containerPort:用于定義容器開放的端口
hostIP:用于定義主機(jī)IP地址
hostPort:用于映射主機(jī)的端口
name:同于定義容器名字
protocol:用于定義端口協(xié)議

3.1.2imagePullPolicy

spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - name: nginx
      containerPort: 80
      hostPort: 80
    env:
    - name: LANG
      value: en_us.UTF-8
    - name: USER
      value: root
    imagePullPolicy: IfNotPresent

鏡像拉取有三種策略
Always:總是從鏡像倉庫拉取
Never:重來不從鏡像倉庫拉取,只使用本地鏡像
IfNotPresent:如果本地有就使用本地鏡像,如果沒有就從鏡像倉庫拉取

3.1.3livenessProbe存活性探測

spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - name: nginx
      containerPort: 80
      hostPort: 80
    env:
    - name: LANG
      value: en_us.UTF-8
    - name: USER
      value: root
    imagePullPolicy: IfNotPresent
    livenessProbe:
      tcpSocket:
        port: 80

用于探測容器是否存活
探測的策略有三種
exec:通過命令探測
httpGet:向指定地址發(fā)送get請求探測
tcpSocket:向指定端口發(fā)送請求探測

3.1.4readinessProbe就緒性探測

spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - name: nginx
      containerPort: 80
      hostPort: 80
    env:
    - name: LANG
      value: en_us.UTF-8
    - name: USER
      value: root
    imagePullPolicy: IfNotPresent
    livenessProbe:
      tcpSocket:
        port: 80
    readinessProbe:
      initialDelaySeconds: 5
      failureThreshold: 3
      successThreshold: 3
      periodSeconds: 1
      timeoutSeconds: 3
      httpGet:
        path: /
        port: 80

用于探測容器是否就緒
failureThreshold:連續(xù)探測失敗幾次認(rèn)為該容器沒有存活或就緒
successThreshold:連續(xù)探測成功幾次認(rèn)為該容器存活或就緒
initialDelaySeconds:容器啟動幾秒后開始探測
periodSeconds:探測周期,幾秒鐘探測一次
timeoutSeconds:探測超過多長時間沒有相應(yīng)認(rèn)為超時

3.1.5lifecycle生命周期鉤子

容器啟動后或者容器推出前都可以進(jìn)行相應(yīng)的操作被稱為鉤子

3.1.5.1postStart啟動后配置鉤子
spec:
  containers:
  - name: busybox
    image: busybox
    command:
     - "/bin/sh"
    args:
     - "-c"
     - "sleep 3600"
    lifecycle:
      postStart:
        exec:
          command:
            - "/bin/sh"
            - "-c"
            - "ping -c 4 baidu.com"

創(chuàng)建鉤子也有三種方式
exec,httpGet和tcpSocket

3.1.5.2prestop停止前配置鉤子
spec:
  containers:
  - name: busybox
    image: busybox
    command:
     - "/bin/sh"
    args:
     - "-c"
     - "sleep 3600"
    lifecycle:
      postStart:
        exec:
          command:
            - "/bin/sh"
            - "-c"
            - "ping -c 4 baidu.com"
      preStop:
        exec:
          command:
            - "/bin/sh"
            - "-c"
            - "wget -O - -q https://baidu.com"

和prostStart相同配置

3.2restartPolicy

spec:
  containers:
  - name: nginx
    image: nginx:1.14
  restartPolicy: OnFailure

Pod重啟策略也有三種
Always:只要退出就會重啟
OnFailure:退出狀態(tài)碼不為1重啟,也就是非正常退出重啟
Never:從來不會重啟

3.3nodeSelector

spec:
  containers:
  - name: nginx
    image: nginx:1.14
 restartPolicy: OnFailure
 nodeSelector:
     kubernetes.io/hostname: node2

選擇一個標(biāo)簽匹配的節(jié)點(diǎn)進(jìn)行調(diào)度
也可以通過nodeName進(jìn)行指定

標(biāo)簽查看與創(chuàng)建分別可以使用以下命令

  • kubectl get <資源類型> --show-labels
  • kubectl label <資源類型> <資源名字> <key>=<value>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 學(xué)到現(xiàn)在,前面的七章其實(shí)已經(jīng)足夠開發(fā)使用,但如果想要對K8S有個進(jìn)階的認(rèn)知,從現(xiàn)在開始才是真正的核心,很多第三方的...
    Suny____閱讀 475評論 0 1
  • 污點(diǎn)、容忍度 給了節(jié)點(diǎn)選則的主動權(quán),我們給節(jié)點(diǎn)打一個污點(diǎn),不容忍的 pod就運(yùn)行不上來,污點(diǎn)就是定義在 節(jié)點(diǎn)上的鍵...
    菜頭_355f閱讀 1,001評論 0 2
  • Pod介紹 Pod是kubernetes中可以創(chuàng)建和部署的最小也是最簡的單位。一個Pod代表著集群中運(yùn)行的一個進(jìn)程...
    小波同學(xué)閱讀 2,253評論 0 1
  • 1. Pod基本概念 pod是kubernetes最基本的執(zhí)行單元(最小、最簡單的單元),pod表示在集群上運(yùn)行的...
    阿喪小威閱讀 539評論 0 0
  • Pod的周期 Pod 遵循一個預(yù)定義的生命周期,起始于 Pending 階段,如果至少 其中有一個主要容器正常啟動...
    會倒立的香飄飄閱讀 1,211評論 0 2

友情鏈接更多精彩內(nèi)容