kubernetes?k8s入門定義一個Pod
什么是Pod?
pod是kubernetes中最小的單元,由一組、一個或多個容器組成,每個pod中包含了一個pause容器。
pause容器是pod的父容器,主要負責僵尸進程的回收管理,通過pause容器可以使同一個pod中多個容器共享存儲、網(wǎng)絡、PID、IPC等,同一個Pod中多容器間訪問僅通過localhost就可以通信。

為什么要引入Pod?
將有強依賴性的容器放在同一個Pod里,例如要求低延遲性,容器A與容器B之間文件上的聯(lián)系等,引入Pod的概念是可以提高性能、便于管理。
從k8s角度說,docker是容器,但是容器卻不只是docker,引入pod可以使容器間工作更協(xié)調。
定義一個Pod:pod.yaml
下面這個yaml文件可能復制有問題,你也可以使用下面命令生成一個yaml文件作為模板進行修改:
kubectl create deployment nginx --image=nginx -o yaml --dry-run=client >nginx.yaml
apiVersion: v1 # 必選,API的版本號
kind: Pod # 必選,類型Pod
metadata: # 必選,元數(shù)據(jù)
name: nginx # 必選,符合RFC 1035規(guī)范的Pod名稱
# namespace: default # 可選,Pod所在的命名空間,不指定默認為default,可以使用-n 指定namespace
labels: # 可選,標簽選擇器,一般用于過濾和區(qū)分Pod
app: nginx
role: frontend # 可以寫多個
annotations: # 可選,注釋列表,可以寫多個
app: nginx
spec: # 必選,用于定義容器的詳細信息
# initContainers: # 初始化容器,在容器啟動之前執(zhí)行的一些初始化操作
# - command:
# - sh
# - -c
# - echo "I am InitContainer for init some configuration"
# image: busybox
# imagePullPolicy: IfNotPresent
# name: init-container
containers: # 必選,容器列表
- name: nginx # 必選,符合RFC 1035規(guī)范的容器名稱
image: nginx:1.15.2 # 必選,容器所用的鏡像的地址
imagePullPolicy: IfNotPresent # 可選,鏡像拉取策略, IfNotPresent: 如果宿主機有這個鏡像,那就不需要拉取了. Always: 總是拉取, Never: 不管是否存儲都不拉去
command: # 可選,容器啟動執(zhí)行的命令 ENTRYPOINT, arg --> cmd
- nginx
- -g
- "daemon off;"
workingDir: /usr/share/nginx/html # 可選,容器的工作目錄
# volumeMounts: # 可選,存儲卷配置,可以配置多個
# - name: webroot # 存儲卷名稱
# mountPath: /usr/share/nginx/html # 掛載目錄
# readOnly: true # 只讀
ports: # 可選,容器需要暴露的端口號列表
- name: http # 端口名稱
containerPort: 80 # 端口號
protocol: TCP # 端口協(xié)議,默認TCP
env: # 可選,環(huán)境變量配置列表
- name: TZ # 變量名
value: Asia/Shanghai # 變量的值
- name: LANG
value: en_US.utf8
# resources: # 可選,資源限制和資源請求限制
# limits: # 最大限制設置
# cpu: 1000m
# memory: 1024Mi
# requests: # 啟動所需的資源
# cpu: 100m
# memory: 512Mi
# startupProbe: # 可選,檢測容器內(nèi)進程是否完成啟動。注意三種檢查方式同時只能使用一種。
# httpGet: # httpGet檢測方式,生產(chǎn)環(huán)境建議使用httpGet實現(xiàn)接口級健康檢查,健康檢查由應用程序提供。
# path: /api/successStart # 檢查路徑
# port: 80
# readinessProbe: # 可選,健康檢查。注意三種檢查方式同時只能使用一種。
# httpGet: # httpGet檢測方式,生產(chǎn)環(huán)境建議使用httpGet實現(xiàn)接口級健康檢查,健康檢查由應用程序提供。
# path: / # 檢查路徑
# port: 80 # 監(jiān)控端口
# livenessProbe: # 可選,健康檢查
#exec: # 執(zhí)行容器命令檢測方式
#command:
#- cat
#- /health
#httpGet: # httpGet檢測方式
# path: /_health # 檢查路徑
# port: 8080
# httpHeaders: # 檢查的請求頭
# - name: end-user
# value: Jason
# tcpSocket: # 端口檢測方式
# port: 80
# initialDelaySeconds: 60 # 初始化時間
# timeoutSeconds: 2 # 超時時間
# periodSeconds: 5 # 檢測間隔
# successThreshold: 1 # 檢查成功為2次表示就緒
# failureThreshold: 2 # 檢測失敗1次表示未就緒
# lifecycle:
# postStart: # 容器創(chuàng)建完成后執(zhí)行的指令, 可以是exec httpGet TCPSocket
# exec:
# command:
# - sh
# - -c
# - 'mkdir /data/ '
# preStop:
# httpGet:
# path: /
# port: 80
# exec:
# command:
# - sh
# - -c
# - sleep 9
restartPolicy: Always # 可選,默認為Always,容器故障或者沒有啟動成功,那就自動該容器,Onfailure: 容器以不為0的狀態(tài)終止,自動重啟該容器, Never:無論何種狀態(tài),都不會重啟
#nodeSelector: # 可選,指定Node節(jié)點
# region: subnet7
# imagePullSecrets: # 可選,拉取鏡像使用的secret,可以配置多個
# - name: default-dockercfg-86258
# hostNetwork: false # 可選,是否為主機模式,如是,會占用主機端口
# volumes: # 共享存儲卷列表
# - name: webroot # 名稱,與上述對應
# emptyDir: {} # 掛載目錄
# hostPath: # 掛載本機目錄
# path: /etc/hosts
apiserver:定義API的版本號
kind:創(chuàng)建資源類型,如pod、deployment等
metadata:元數(shù)據(jù),如pod的一些基本信息
spec:用于定義容器的詳細信息
執(zhí)行yaml文件創(chuàng)建Pod:
kubectl create -f pod.yaml
完成后查看Pod:
kubectl get pod
注意:生產(chǎn)中基本不會直接使用pod進行部署,但是yaml文件大同小異。需要熟悉yaml文件的格式和配置項。
Pod探針:
StartupProbe:1.16版本后增加的探針方式,用于判斷容器內(nèi)應用程序是否已經(jīng)啟動,如果配置了StartupProbe,就會先禁止其他探測,直到成功,成功后將不在進程探測。
LivenessProbe:用于探測容器是否運行,如果探測失敗,kubelet會根據(jù)配置的重啟策略進行相應的處理。若沒有配置該探針,默認就是success。
ReadinessProbe:一般用于探測容器內(nèi)的程序是否健康,它的返回值如果為success,那么代表這個容器已經(jīng)啟動成功,并且程序已經(jīng)是可以接受流量的狀態(tài)。
Pod探針檢測方式:
以上探針均可配置以下方式:
ExecAction:在容器內(nèi)執(zhí)行一個命令,如果返回值為0,則認為容器健康(類似于執(zhí)行一個命令后,執(zhí)行echo $?返回值為0代表成功是一樣的)
livenessProbe:
exec:
command:
- cat
- /tmp/health
TCPSocketAction:通過TCP連接檢查容器內(nèi)的端口是否通的,如果是通的則認為容器健康(類似于telnet 127.0.0.1 3306,執(zhí)行成功的話判斷為容器健康)
livenessProbe:
tcpSocket:
port: 80
HTTPGetAction:通過應用程序暴露的API地址來檢查程序是否正常,如果狀態(tài)碼為200~400之間,則認為容器健康。(生產(chǎn)使用最多)
livenessProbe:
httpGet:
path: /status/health
port: 80
探針檢查的幾個參數(shù):
initialDelaySeconds:初始化時間(比如程序啟動慢,我要多少秒后才會檢查)
timeoutSeconds:超時時間(1-2秒)
periodSeconds:檢測間隔,多長時間檢測一次(5秒)
successThreshold:檢測成功次數(shù),比如檢測成功幾次代表就緒(1-2次)
failureThreshold:檢測失敗次數(shù),比如檢測失敗幾次代表未就緒(2次)
重啟策略:timeoutSecondsperiodSecondsfailureThreshold
我們可以看以下coredns的探針配置:
# 查看pod名稱
[root@k8s-master01 ~]# kubectl get deployment -n kube-system
coredns 1/1 1 1 5d18h
# 在線編譯coredns的yaml文件
[root@k8s-master01 ~]# kubectl edit deployment coredns -n kube-system
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
# 上面代表請求8080的/health接口,如果訪問成功則保留容器不會被殺死
readinessProbe:
failureThreshold: 3
httpGet:
path: /ready
port: 8181
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
# 上面配置代表請求8181的/ready接口成功,說明容器可以正常開始工作了
Pod退出流程
Prestop:先去請求eureka接口,把自己的IP地址和端口號,進行下線,eureka從注冊表中該應用的IP地址。然后容器進行sleep 90,kill ‘進程’;(注意90不是確定值,而是根據(jù)實際情況進行變化的)

以上就是kubernetes k8s入門定義一個Pod的詳細內(nèi)容,更多關于k8s入門定義Pod的資料請關注腳本之家其它相關文章!
相關文章
K8s Pod調度機制詳解(從理論到生成實戰(zhàn)指南)
Kubernetes調度機制是集群的智能調度中樞,主要完成過濾和打分兩個決策,在生產(chǎn)環(huán)境中,核心調度策略包括資源調度、親和性調度、污點與容忍、拓撲分布約束等,本文介紹K8s Pod調度機制詳解(從理論到生成實戰(zhàn)指南),感興趣的朋友一起看看吧2025-03-03
Kubernetes中使用PersistentVolume掛載云盤方式
這篇文章主要介紹了Kubernetes中使用PersistentVolume掛載云盤方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02

