Pod的概念摄悯,如何使用Pod赞季,如何編寫Yaml格式文件,如何使用不同類型的Pod等奢驯、
? 描述Pod特性
? 區(qū)分單容器Pod和多容器Pod
? 區(qū)分運行常駐任務(wù)的Pod和運行一次性任務(wù)的Pod
1.POD基本概念
- Pod是Kubernetes管理的最小基礎(chǔ)單元
- 一個Pod中封裝了:
? 一個或多個緊耦合的應(yīng)用容器
緊耦合的理解:容器共享存儲申钩,共享ip地址
? 存儲資源
? 獨立的IP
? 容器運行的選項
1.1 Pod的兩種模式
- 只包含一個應(yīng)用容器的pod
? “一個pod一個容器”的模式是在Kubernetes中主流的使用場景。
? 在這種場景中瘪阁,pod可以被看做是一個“包裝紙”包著的容器撒遣。Kubernetes不能直接
管理容器,而是需要通過管理pod來管理容器 - 包含多個應(yīng)用的pod
? 僅當兩種容器緊耦合管跺,且需要共享相同的資源時使用這一種模式义黎。共享ip、共享存儲
? 這些在一個pod內(nèi)的容器形成一個統(tǒng)一的服務(wù)單元豁跑。例如一個容器從共享卷提供文件轩缤,而另一個容器刷新或更新資源。Pod將這些容器和存儲資源作為單個可管理的實體包裝在一起贩绕。一般要有一個主容器,如主容器將數(shù)據(jù)放入到共享存儲壶愤,輔容器對數(shù)據(jù)文件進行提取淑倾。
1.2 Pod內(nèi)部結(jié)構(gòu)
- 當一個多容器的Pod中有一個容器故障了,這個pod是故障還是正常征椒?
- 一個pod共享存儲和ip娇哆,那這個存儲和IP應(yīng)該掛載在容器1上還是容器2上?
- 一個pod中會分配一個pause容器勃救,這也被稱為根容器碍讨,也叫基礎(chǔ)設(shè)施容器
在任何一個POD中都有一個pause
? Pause容器的狀態(tài)代表整個pod的狀態(tài)
? Pod中多個容器共享pause容器的ip和存儲,容器間可以通過localhost互訪(實際就是lo網(wǎng)卡蒙秒,因為容器沒有ip地址勃黍,所以他們之間的訪問通過回路lo機制實現(xiàn))。(典型的volume container模式)
查看pause容器
[root@k8s-node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7158a6b4234f nginx "/docker-entrypoint.…" 2 hours ago Up 2 hours k8s_nginx_mydep-65bbdb4c9f-bvwmp_default_9280bbb1-7fff-11ec-a402-000c298dbe7d_0
1c266d5c1b74 k8s.gcr.io/pause:3.1 "/pause" 2 hours ago Up 2 hours k8s_POD_mydep-65bbdb4c9f-bvwmp_default_9280bbb1-7fff-11ec-a402-000c298dbe7d_0
4cdcc66071fc nginx "/docker-entrypoint.…" 6 hours ago Up 6 hours k8s_nginx_mydep-65bbdb4c9f-swgvz_default_ad3f7636-7fdf-11ec-a402-000c298dbe7d_0
efefdf6b1cb2 k8s.gcr.io/pause:3.1 "/pause" 6 hours ago Up 6 hours k8s_POD_mydep-65bbdb4c9f-swgvz_default_ad3f7636-7fdf-11ec-a402-000c298dbe7d_0
5cf5972924e8 ff281650a721 "/opt/bin/flanneld -…" 7 hours ago Up 7 hours k8s_kube-flannel_kube-flannel-ds-amd64-wbbrw_kube-system_6375144f-7f22-11ec-aeb8-000c298dbe7d_1
2d86471f8f04 63b4dab6fab0 "/usr/local/bin/kube…" 7 hours ago Up 7 hours k8s_kube-proxy_kube-proxy-c7kf4_kube-system_6374ff82-7f22-11ec-aeb8-000c298dbe7d_1
a103bfeb6cb7 k8s.gcr.io/pause:3.1 "/pause" 7 hours ago Up 7 hours k8s_POD_kube-flannel-ds-amd64-wbbrw_kube-system_6375144f-7f22-11ec-aeb8-000c298dbe7d_1
caba61e7b44a k8s.gcr.io/pause:3.1 "/pause" 7 hours ago Up 7 hours k8s_POD_kube-proxy-c7kf4_kube-system_6374ff82-7f22-11ec-aeb8-000c298dbe7d_1
1.3Pod生命周期
Pod一旦被創(chuàng)建晕讲,會被master調(diào)度到某個具體的node上進行綁定覆获。Pod會呈現(xiàn)出不同的狀態(tài)马澈。
取值 | 描述 |
---|---|
Pending(懸決) | Pod 已被 Kubernetes 系統(tǒng)接受,但有一個或者多個容器尚未創(chuàng)建亦未運行弄息。此階段包括等待 Pod 被調(diào)度的時間和通過網(wǎng)絡(luò)下載鏡像的時間 |
Running(運行中) | Pod 已經(jīng)綁定到了某個節(jié)點痊班,Pod 中所有的容器都已被創(chuàng)建。至少有一個容器仍在運行摹量,或者正處于啟動或重啟狀態(tài)涤伐。 |
Succeeded(成功) | Pod 中的所有容器都已成功終止,并且不會再重啟缨称。 |
Failed(失斈) | Pod 中的所有容器都已終止,并且至少有一個容器是因為失敗終止具钥。也就是說豆村,容器以非 0 狀態(tài)退出或者被系統(tǒng)終止。 |
Unknown(未知 | 因為某些原因無法取得 Pod 的狀態(tài)骂删。這種情況通常是因為與 Pod 所在主機通信失敗掌动。 |
pending:
1.沒有可用的物理節(jié)點時(需要的資源不夠,cpu宁玫、內(nèi)存)
2.image沒有下載成功
Succeeded:
有些pod不需要一直運行粗恢,如一過性的。執(zhí)行完成任務(wù)結(jié)束的
示例:
1.創(chuàng)建一個不存在的image的容器
[root@k8s-master ~]# kubectl run mypod --image=nginx2
pod/mypod created
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mydep-65bbdb4c9f-bvwmp 1/1 Running 1 20h
mydep-65bbdb4c9f-sswdr 1/1 Running 1 20h
mydep-65bbdb4c9f-swgvz 1/1 Running 1 24h
mypod 0/1 ErrImagePull 0 10s
[root@k8s-master ~]# k describe pod mypod
Name: mypod
Namespace: default
欧瘪。眷射。。佛掖。妖碉。。芥被。
Status: Pending
IP: 10.244.2.10
k get pod 看到的是一個合成狀態(tài)欧宜。需要用k describe 命令才能看到真正的狀態(tài)。describe經(jīng)常用語拍錯
[root@k8s-master ~]# k describe mypod
error: the server doesn't have a resource type "mypod"
[root@k8s-master ~]# k describe pod mypod
Name: mypod
Namespace: default
Priority: 0
Node: k8s-node2/192.168.227.12
Start Time: Sat, 29 Jan 2022 10:52:08 +0800
Labels: run=mypod
Annotations: <none>
Status: Pending
IP: 10.244.2.10
拴魄。冗茸。。匹中。夏漱。
State: Waiting
Reason: ImagePullBackOff
Ready: False
2 使用yaml文件創(chuàng)建一個pod
[root@k8s-master ~]# cat > /root/mypod.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
> EOF
[root@k8s-master ~]# k get pod -w
NAME READY STATUS RESTARTS AGE
myapp-pod 1/1 Running 0 117s
mydep-65bbdb4c9f-bvwmp 1/1 Running 1 24h
mydep-65bbdb4c9f-sswdr 1/1 Running 1 24h
mydep-65bbdb4c9f-swgvz 1/1 Running 1 28h
mypod 0/1 ErrImagePull 0 3h29m
因為運行pod必須要有一個前臺進程才能啟動,否則起來就自動終止顶捷,busybox本身是linux的命令集挂绰,沒有前臺進程。所以利用args 定一個前臺進程服赎。
3 根據(jù)pod生成yaml文件
[root@k8s-master ~]# k get pods myapp-pod -oyaml > /root/pod2.yaml
[root@k8s-master ~]# cat pod2.yaml
2. 使用Pod
- 創(chuàng)建pod
1)使用create命令由該文件創(chuàng)建pod
kubectl create -f mypod.yaml
2)使用get命令查看
kubectl get pod - Pod管理常用命令
1)查看pod命令時扮授,通過添加“-o=wide”參數(shù)獲取更多信息
kubectl get pod -o=wide
2)使用describe命令芳室,可以看到pod的完整信息
kubectl describe pod mypod
3)刪除Pod,使用delete命令
kubectl delete pod mypod
4)進入mypod的命令行
kubectl exec -it mypod -- /bin/sh
5)在pod中可能存在多個容器刹勃,加入“--container 容器名“參數(shù)指定進入容器
kubectl exec -it mypod --container mypod -- /bin/sh
6)如果希望退出當前所在容器堪侯,可以輸入exit回車退出 - Pod內(nèi)容器查看
在之前使用命令查看pod狀態(tài)時,可以檢索到Pod所在的位置
kubectl get pod -o=wide