在 K8S 中, pod 是一個(gè)非常關(guān)鍵的存在,我們一起來(lái)看看 pod 具體是個(gè)什么?
[圖片上傳失敗...(image-da7e54-1687664619081)]
pod 是個(gè)啥?
pod 是個(gè)什么呢?pod 是 K8S中的一個(gè)核心概念
每一個(gè) pod 都會(huì)有一個(gè)特殊的根容器,叫做 pause 容器,pause 容器對(duì)應(yīng)的鏡像也是屬于 K8S 的一部分的
pod 里面可不僅僅只有 pause 容器,還可以有其他多個(gè)容器
[圖片上傳失敗...(image-15104e-1687664619081)]
之前文章我們稍微提到過(guò) pod,每一個(gè) pod ,都是一個(gè)具體應(yīng)用的實(shí)例,pod 有自己獨(dú)自的 IP,主機(jī)名,進(jìn)程等等
- pod 與 容器是 1 對(duì)多的關(guān)系
一個(gè) pod 里面可以有多個(gè)容器,多個(gè)容器彼此共享網(wǎng)絡(luò)和存儲(chǔ)資源
我們都是通過(guò) pod 中的 pause 容器 來(lái)管理其他容器的, 因?yàn)?pause 容器會(huì)存儲(chǔ)所有的容器狀態(tài)
- pod 和節(jié)點(diǎn)的關(guān)系
pod 存在于節(jié)點(diǎn)中,不同節(jié)點(diǎn)的 pod 相互通信,是通過(guò)二層網(wǎng)絡(luò)通信的
- pod 自身還有啥不同的?
pod 自身還分成普通的 pod,和靜態(tài)的 pod
我們?nèi)绾味x一個(gè) pod
在 K8S 中定義一個(gè) pod 也是比較簡(jiǎn)單的,就是寫一個(gè) yaml 文件,只不過(guò)我們剛開(kāi)始需要多加嘗試和練習(xí)
yaml 文件大體是這樣的,純手寫 , 下面的配置,我把不太容易理解的或者說(shuō)是容易誤解的名詞解釋一下,其他的自行看英文即可理解
apiVersion: v1 // 版本號(hào)
kind: Pod // 類型
metadata:
name: pod name
namespace: pod namespace
labels:
- name: pod label
annotations:
- name: pod annotation // 自定義注釋列表
spec: // pod 中容器的詳細(xì)定義
container:
- name: container name
image: container image
imagesPullPolicy: [Always|Never|IfNotPresent] // 鏡像拉取策略
command: command list
agrs: app start params
workingDir: work dir
volumeMounts:
- name: volume name
mountPath: volume absolutely path
readonly: boolean
ports:
- name: ports list name
containerPort: 8888
hostPort: 9999
protocol: TCP // 可以是 TCP 和 UDP
env:
- name: env name
value: string
resources:
limits:
cpu: string
memory: string
requeste:
cpu: string
memory: string
livenessProbe: // 健康檢查設(shè)置
exec:
command: [string]
httpGet: // 通過(guò) httpGet 方式檢查
path: string
port: string
host: string
scheme: string
httpHeaders:
- name: httpHeaders name
value: string
tcpSocket: // 通過(guò) tcpSocket 方式檢查
port: 80
initialDelaySeconds: 0 // 首次檢查時(shí)間
timeoutSeconds: 0 // 超時(shí)檢查時(shí)間
periodSeconds: 0 // 檢查間隔時(shí)間
successTreshold: 0
failuerTreshold: 0
securityContext: // 安全配置
privileged: false
restartPolicy: [Always|Never|OnFailure]
nodeSelector: object
imagePullSecrets:
- name: string
hostNetwork: false // 是否使用主機(jī)網(wǎng)絡(luò)模式?
volumes: // 存儲(chǔ)卷
- name: volumes list name
emptyDir: {}
hostPath: // pod 所在主機(jī)的目錄,用于掛載
path: string
secret: // secret 類型 存儲(chǔ)卷
secretName: secret name
item:
- key: specific key
path: key path
configMap: // configmap 類型存儲(chǔ)卷
name: string
items:
- key: specific key
path: string
看了上面的這個(gè) yaml ,起初可能會(huì)覺(jué)得有點(diǎn)多,一下子記不住, xdm ,沒(méi)有讓你記住,咱們只需要知道 pod 的 yaml 是長(zhǎng) 這個(gè)樣子,里面都有哪些用法即可
pod 基本用法使用示例
在 K8S 中對(duì) pod 中的容器運(yùn)行也是有要求的
- 容器的主程序是在前臺(tái)運(yùn)行,而不是后臺(tái),因此,應(yīng)用需要改造成前臺(tái)運(yùn)行的方式
- 若 pod 中包含的容器是一個(gè)后臺(tái)執(zhí)行程序,那么執(zhí)行完命令之后,pod 就會(huì)被銷毀
- 若 pod 是一個(gè) rc ,rc 就是 replicationController ,那么 pod 就會(huì)處于一個(gè) 創(chuàng)建,銷毀的循環(huán)中 需注意
我們分享創(chuàng)建的pod,可以是里面放 1 個(gè)容器,也可以是放多個(gè)容器的,根據(jù)我們需要去處理即可
1 個(gè) pod 放 1 個(gè)容器
例如我們 1 個(gè) pod 里面放 1 個(gè) mongdb 的容器,可以這樣來(lái)寫
[圖片上傳失敗...(image-fd0ece-1687664619081)]
1 個(gè) pod 放 多個(gè) 容器
例如我們 1 個(gè) pod 里面放 1 個(gè) mongodb 和 1 個(gè) redis 容器,可以這樣來(lái)寫
[圖片上傳失敗...(image-d4c8f-1687664619081)]
如何操作 pod
根據(jù)已有 yaml 創(chuàng)建 pod
kubectl create -f yaml文件
查看 pod 和 查看 pod 詳情
例如這樣的
[圖片上傳失敗...(image-4d4743-1687664619081)
- kubectl get pod -A
查看所有命名空間下面的 pod
- kubectl get pod pod名字
- Kubectl get pod pod名字 -o wide
查看 pod 的更多信息
- kubectl describe pod pod名字
查看 pod 的詳情
刪除 pod
- kubectl delete pod pod名字
- kubectl delete pod pod名字 -n 命名空間
kubectl delete pod --all
刪除所有的 pod
今天就到這里,學(xué)習(xí)所得,若有偏差,還請(qǐng)斧正
歡迎點(diǎn)贊,關(guān)注,收藏
朋友們,你的支持和鼓勵(lì),是我堅(jiān)持分享,提高質(zhì)量的動(dòng)力
[圖片上傳失敗...(image-3b8eac-1687664619081)]
好了,本次就到這里
技術(shù)是開(kāi)放的,我們的心態(tài),更應(yīng)是開(kāi)放的。擁抱變化,向陽(yáng)而生,努力向前行。
我是阿兵云原生,歡迎點(diǎn)贊關(guān)注收藏,下次見(jiàn)~