目录
一、简介
1、什么是pod
Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。
一个pod类似一个豌豆英,包含一个或多个容器 (通常是docker) ,多个容器间共享IPC、Network和UTC namespace。
2、为什么要有pod
k8s作为集群调度需要解决的一些问题
1、容器建超亲密关系,容器建共享问题如何解决,互通的问题
2、数据间共享问题
每个容器都会有自己的namespace,容器是通过namespace来做的隔离,就是说容器间网络是不通的,有些容器之间我们希望是像localhost这样超亲密容器之间如何互访?
容器中放的就是我们的业务,假设有两个容器,他们的关系非常的亲密,他们之间的通信非常的频繁,而且还需要共享数据,这样就需要pod,在k8s中pod就解决了上述的两个问题,打通了这两个超亲密容器之间的通信和数据共享的问题,pod就给他提供了这样的环境,在同一个pod内的容器共享一个网络栈,pod还可以为pod内的容器提供一个相对持久化的存储也就是卷,不删除pod存储就是在的(pod是怎么来的在我们下载额镜像中reg.westos.org/k8s/pause是汇编语言写的,很小,大概几百kb,永远处于一种暂停的方式,会通过镜像为我们提供一个k8s的环境,这是谷歌为我们准备好的,他的设计理念就是为了解决打通容器间的网络和存储,提供一个相对持久化的存储)
二、pod的分类
Kubernetes 集群中的 Pod 主要有两种用法:
运行单个容器的 Pod。"每个 Pod 一个容器" 模型是最常见的 Kubernetes 用例; 在这种情况下,可以将 Pod 看作单个容器的包装器,并且 Kubernetes 直接管理 Pod,而不是容器。
运行多个协同工作的容器的 Pod。 Pod 可能封装由多个紧密耦合且需要共享资源的共处容器组成的应用程序。 这些位于同一位置的容器可能形成单个内聚的服务单元 —— 一个容器将文件从共享卷提供给公众, 而另一个单独的 “边车”(sidecar)容器则刷新或更新这些文件。 Pod 将这些容器和存储资源打包为一个可管理的实体。
0、pod常用命令命令
kubectl get pod ##获取pod
kubectl get ns ##查看namespace
kubectl get pod -n kube-system ##查看相应namespace对应的pod,不加namespace就自动选择默认的namespace
kubectl describe pod xxx ##这条命令来查看pod详细信息
kubectl run -h ##查看创建pod帮助
kubectl get pod -o wide ##查看节点的具体信息
kubectl delete pod demo ##删除pod
1、准备镜像
下载测试镜像[root@k8s1 docker]# docker pull yakexi007/myapp:v1
[root@k8s1 docker]# docker pull yakexi007/myapp:v2
修改名称
[root@k8s1 docker]# docker tag yakexi007/myapp:v1 reg.westos.org/library/myapp:v1
[root@k8s1 docker]# docker tag yakexi007/myapp:v2 reg.westos.org/library/myapp:v2
上传harbor仓库
[root@k8s1 docker]# docker push reg.westos.org/library/myapp:v1
[root@k8s1 docker]# docker push reg.westos.org/library/myapp:v2
2、自主式pod
(生产不推荐,没有控制器维护的pod就是自主式pod,自主式pod没有自愈性)
[root@k8s2 ~]# kubectl run demo --image=myapp:v1

[root@k8s2 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo 1/1 Running 0 35s 10.244.2.2 k8s4 <none> <none>
查看pod详情
[root@k8s2 ~]# kubectl describe pod demo
Name: demo
Namespace: default
Priority: 0
Node: k8s4/192.168.56.174
Start Time: Mon, 09 Jan 2023 15:40:49 +0800
Labels: run=demo
Annotations: <none>
Status: Running
IP: 10.244.2.2
IPs:
IP: 10.244.2.2
...
删除pod[root@k8s2 ~]# kubectl delete pod demo

3、控制器创建pod
这里我们先使用deployment控制器,控制器内容会在下一章节讲解
创建
kubectl create deployment myapp --image=myapp:v1
拉伸pod的副本数
kubectl scale deployment myapp --replicas 3
创建时直接设定好副本数:kubectl create deployment myapp --image=myapp:v1 --replicas=3

控制器会自动维护pod副本数
[root@k8s2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-678fcbc488-gp6pr 1/1 Running 0 3s
myapp-678fcbc488-gqdgk 1/1 Running 0 3s
myapp-678fcbc488-qqkzx 1/1 Running 0 3s

获取当前deployment控制器,有3个pod
[root@k8s2 ~]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
深入理解Kubernetes Pod管理

本文详细介绍了Kubernetes中的Pod,包括Pod的概念、为何需要Pod、Pod的分类及其管理,如常用命令、扩容和更新应用版本。还探讨了Pod的生命周期,包括Init容器和探针(存活探针和就绪探针)的作用,展示了如何通过yaml文件创建和管理Pod,以及如何通过Service暴露和负载均衡Pod。Pod是Kubernetes中最小的部署单元,负责协调容器的网络和存储需求。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



