K8s新手系列之初识pod
Pod的基本概念[*]Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
[*]Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器,这些容器共享网络和存储命名空间。
[*]Pod 的设计是 非持久化 的,可能因节点故障、调度策略或更新操作而被销毁重建。
[*]当Pod中有多个容器时,容器之间的通信是通过pause容器来实现的。
Pod的核心特性
共享网络命名空间
[*]共享同一 IP:Pod 内的所有容器共享一个 IP 地址,容器间通过 localhost 直接通信。
[*]端口分配:容器需避免端口冲突(如主容器监听 80 端口,日志收集容器监听 8080)。
共享存储卷
[*]Volume 挂载:Pod 级别定义的存储卷(如 emptyDir、PersistentVolumeClaim)可被所有容器挂载。
[*]数据共享:适合需要共享文件或目录的场景(如主容器写日志,Sidecar 容器读取日志并上传)。
生命周期一致性
[*]同生共死:Pod 内的容器同时启动,当 Pod 终止时,所有容器一起终止。
[*]独立重启:若某个容器崩溃,Pod 会根据 restartPolicy 决定是否重启整个 Pod 或仅重启该容器。
k8s中pod的管理
使用命令创建pod
通过 kubectl run 快速创建临时 Pod,适合测试和调试场景。
# 创建一个简单的 Pod(默认生成随机名称)
kubectl run <POD_NAME> --image=<IMAGE> --port=<PORT>
# 示例:运行一个名为 nginx-pod 的 Nginx 容器
kubectl run nginx-pod --image=nginx:latest --port=80参数说明:
[*]--image: 指定容器镜像(必填)。
[*]--port: 暴露容器端口。
[*]--env: 设置环境变量(如 --env=KEY=VALUE)。
[*]--command: 覆盖容器默认命令(需结合 -- 分隔符)。
kubectl run debug-pod --image=busybox --command -- sh -c "sleep 3600"
[*]--rm: Pod 退出后自动删除(适合临时任务):
kubectl run --rm -it temp-pod --image=busybox -- sh
[*]--dry-run=client: 生成模板但不实际创建:
kubectl run nginx-pod --image=nginx --dry-run=client -o yaml > pod.yaml查看pod的信息
# 列出当前命名空间的所有 Pod
kubectl get pods
# 列出所有命名空间的 Pod
kubectl get pods -A
# 显示 Pod 的详细信息(IP、节点、事件等)
kubectl get pods -o wide
# 以yaml格式显示pod的详细信息
kubectl get pods -o yaml
# 查看某个 Pod 的详细描述(状态、事件、容器配置)
kubectl describe pod <pod-name>查看pod的日志
# 查看 Pod 的主容器日志
kubectl logs <pod-name>
# 持续跟踪日志(类似 tail -f)
kubectl logs -f <pod-name>
# 查看 Pod 中指定容器的日志
kubectl logs <pod-name> -c <container-name>进入pod调试
# 进入 Pod 的容器执行命令(默认进入第一个容器)
kubectl exec -it <pod-name> -- /bin/sh
# 进入指定容器
kubectl exec -it <pod-name> -c <container-name> -- /bin/bash删除pod
# 删除指定 Pod
kubectl delete pod <pod-name>
# 强制立即删除(不等待优雅终止)
kubectl delete pod <pod-name> --force --grace-period=0创建第一个pod
命令创建(生产环境不建议使用)
# 创建pod
# kubectl run nginx-pod --image=nginx --port=80
pod/nginx-pod created
# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 9s通过yaml创建第一个pod(强烈建议使用!!!)
通过yaml创建pod,创建pod的yaml文件又叫资源清单(manifests),资源清单是用于描述定义K8S集群资源的配置文件。
下面是一个创建pod的资源清单文件示例:
# cat pod-nginx.yaml
apiVersion: v1
# 资源类型,例如 Pod
kind: Pod
# 元数据
metadata:
# Pod名称
name: nginx-pod
# Pod中容器的详细定义
spec:
# Pod中容器列表
containers:
# 容器名称
- name: nginx-container
# 容器的镜像
image: nginx:latest
# 指定容器的端口
ports:
# 容器端口命名
- name: http
# 容器内部监听的端口号
containerPort: 80创建pod
# kubectl apply -f pod-nginx.yaml
pod/nginx-pod created查看pod
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 25s访问pod
创建的pod默认是无法被外部访问的,这个我们后面会讲
# 查看pod的IP地址
# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-pod 1/1 Running 0 10s 100.95.185.203 node02 <none> <none>
# 通过pod的IP进行访问
# curl 100.95.185.203
<!DOCTYPE html>
<html>
##..省略万字内容
</html>删除pod
# kubectl delete -f pod-nginx.yaml
pod "nginx-pod" deleted
# kubectl get pod
No resources found in default namespace.
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]