天天看點

k8s專欄-pod(一)前言:一、Pod概述:二、pod存在意義:三、pod實作機制四、鏡像拉取政策五、pod資源限制六、pod重新開機機制七、健康檢查

前言:

參考k8s教程由淺入深

一、Pod概述:

定義:

  • k8s系統中可以建立、管理的最小單元
  • 資源對象模型中使用者建立或部署的最小資源模型
  • k8s上運作容器化應用的資源對象
  • 其他資源作用是支援pod,如控制器是為了管控pod,Service和Ingress是為了暴露pod引用對象,PersistentVolume為pod提供存儲
  • pod不是容器,是一個或多個容器組成。k8s不會直接操作容器
  • 一個pod中共享網絡命名空間
  • pod是短暫的。每一個pod都有一個根容器,叫pause容器,還有使用者自己建立的容器

二、pod存在意義:

  • 建立容器使用docker,一個docker對應一個容器,一個容器運作一個應用程式,對應一個程序
  • pod是多程序設計,運作多個應用程式
  • pod是為親密性應用而存在的(兩個應用頻繁互相調用)

三、pod實作機制

1. docker之間互相隔離

實作機制:linux的namespace機制/cgroup

namespace:linux核心隔離核心資源的方式。通過namespace能讓進行僅看到和自己程序相關的資源

cgroup:Linux下控制一個(或一組)程序的資源限制機制,可精細化的控制程序使用的cpu/記憶體

2.共享網絡

前提條件:容器在同一個namespace下可以共享網絡

實作機制:

a.預設建立根容器 pause(info容器)

b.後續建立的業務容器會加入info容器,使得業務容器與info容器在同一個namespace中,實作網絡共享

3.共享存儲

pod需要持久化的資料:日志資料、業務資料

實作機制:使用資料卷(Volume)進行持久化存儲

多個pod将資料存儲到Volume中,若node結點當機,建立的鏡像可以從資料卷中重新讀取資料進行同步

apiVersion: apps/v1
kind: Pod
metadata:
  name: pod-test
spec:
  containers:
  - image: centos
    name: write
    command: ["bash","-c","for i in {1,100};do echo $i >> /data/hello;sleep 1;done"]
    # 挂載資料卷
    volumeMounts:
    - name: data
      mountPath: /data
  - name: read
    image: centos
    command: ["bash","-c","tail -f /data/hello"]
    # 挂載資料卷
    volumeMounts:
    - name: data
      mountPath: /data
# 定義資料卷
volumes:
- name: data
  emptyDir: {}
           

四、鏡像拉取政策

apiVersion: apps/v1
kind: Pod
metadata:
  name: pod-test
spec:
  containers:
  - image: nginx:1.14
    name: nginx
    # 鏡像拉取政策
    imagePullPolicy:Always

           

如上,imagePullPolicy為鏡像拉取政策。拉取政策分為:

  • IfNotPresent:預設值,鏡像在主控端上不存在時才拉取
  • Always:每次建立pod都拉取
  • Never:Pod永遠不會主動拉取這個鏡像

五、pod資源限制

apiVersion: apps/v1
kind: Pod
metadata:
  name: pod-test
spec:
  containers:
  - image: nginx:1.14
    name: nginx
    imagePullPolicy:Always
    # 資源限制
    resources:
      # 排程大小
      request:
        memory: "64Mi"
        cpu: "250m"  # 一核=1c=1000m
      # 限制最大資源
      limit:
        memory: "128Mi"
        cpu: "500m"
           

六、pod重新開機機制

apiVersion: apps/v1
kind: Pod
metadata:
  name: pod-test
spec:
  containers:
  - image: nginx:1.14
    name: nginx
    imagePullPolicy:Always
  # 重新開機政策
  restartPolicy:Never
           

Always:容器終止退出後,總重新開機容器

OnFailure:容器異常退出後(狀态碼非0)重新開機

Never:不重新開機

七、健康檢查

1.容器檢查(部分問題容器檢查定位不了)

2.應用層面檢查

存活檢查:如果檢查失敗,kill,根據restartPolicy政策操作

就緒檢查:如果檢查失敗,将pod從service endpoints中剔除

Probe檢查方法:

1.httpGet 狀态碼200-400則為成功

2.exec 執行shell指令傳回0為成功

3.tcpSocket 發起TCP socket建立成功

apiVersion: apps/v1
kind: Pod
metadata:
  name: pod-test
spec:
  containers:
  - image: busybox
    name: write
    args:
    - /bin/sh
    - -C
    - touch /tmp/healthy; sleep 30;rm -rf /tmp/healthy
    livenessProbe:
      # probe檢查方法:exec;有tmp/healthy--->0  無--->1
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5
      periodSeconds: 5
           
k8s

繼續閱讀