kubernetes_pods资源清单及常用命令
示例:
apiVersion: v1
kind: Pod
metadata:name: nginx-podnamespace: defaultlabels:app: nginx
spec:containers:- name: nginx-containerimage: nginx:1.21ports:- containerPort: 80
多个容器运行示例
apiVersion: v1
kind: Pod
metadata:name: linux85-nginx-tomcat
spec:containers:
- name: nginximage: nginx:1.23.4-alpine
- name: tomcatimage: tomcat:jre8-alpine
apiVersion: v1
描述的是资源使用的 API 版本。Kubernetes 中的 API 版本是按功能和稳定性分层的,例如 v1(稳定版)、apps/v1(应用程序组资源)、batch/v1(批处理任务资源)等。不同的资源类型可能属于不同的 API 组和版本。
这里指定的是 v1 版本的 API,表示这个资源使用 Kubernetes 核心 API 的第一个版本。
kind: Pod
指定 Kubernetes 资源的类型。比如 Pod、Service、Deployment、ConfigMap 等。这个字段定义了资源的具体类别,告诉 Kubernetes 这是一个什么样的对象。
这是一个 Pod 资源,表明这个 YAML 定义了一个 Pod 对象。
metadata:
包含资源的元数据,主要包括:
name:资源的名称,用于唯一标识这个对象。
namespace:资源所属的命名空间,默认是 default,可以指定其他命名空间。
labels:用于标识资源的键值对,方便管理和选择器操作。
annotations:注解,提供额外的元数据,通常用来存储不影响资源对象本身的辅助信息(例如调试、监控信息等)。
name: nginx-pod
Pod 的名称是 nginx-pod,这是该 Pod 在 Kubernetes 集群中的唯一标识。
namespace: default
这个 Pod 位于 default 命名空间中。
labels:
app: nginx
标签定义了一个键值对 app: nginx,这可以用作选择器,方便其他资源(如服务)与其进行关联。
spec:
定义资源的期望状态。用户在这个字段中描述自己希望资源以什么方式运行,比如在 Deployment 中可以指定副本数量(replicas),在 Pod 中可以定义容器的镜像、挂载卷等。
containers:
这是 Pod 内部的容器定义。此 Pod 中有一个名为 nginx-container 的容器:
name: nginx-container
容器的名称。
image: nginx:1.21
这个容器使用的是官方 nginx 镜像的 1.21 版本。
ports:
containerPort: 80
容器将暴露端口 80,用于接收 HTTP 请求。
#创建工作目录[root@master210 ~]# mkdir -pv /test_demo/pods/ && cd /test_demo/pods/
mkdir: 已创建目录 "/test_demo"
mkdir: 已创建目录 "/test_demo/pods/"
[root@master210 pods]# #编写资源清单
[root@master210 pods]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx-podnamespace: defaultlabels:app: nginx
spec:containers:- name: nginx-containerimage: nginx:1.21ports:- containerPort: 80[root@master210 pods]# kubectl apply -f nginx.yaml
pod/nginx-pod created
[root@master210 pods]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 3s
[root@master210 pods]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-pod 1/1 Running 0 6m38s 10.100.2.5 node211 <none> <none>
查看资源
# 查看当前命名空间下的所有 Pods
[root@master210 pods]# kubectl get pods
# 查看所有命名空间下的所有 Pods
[root@master210 pods]# kubectl get pods -A
或者
[root@master210 pods]# kubectl get pods --all-namespaces
# 查看指定命名空间中的 Pods
[root@master210 pods]# kubectl get pods -n <namespace>
# 查看 Pods 的详细信息
[root@master210 pods]# kubectl get pods -o wide
# 查看指定 Pod 的详细描述
[root@master210 pods]# kubectl describe pod <pod-name>
# 查看特定 Pod 的日志
[root@master210 pods]# kubectl logs <pod-name>
# 如果 Pod 内有多个容器,可以使用: -c参数
[root@master210 pods]# kubectl logs <pod-name> -c <container-name>
# 持续监控 Pods 状态(自动刷新)
[root@master210 pods]# kubectl get pods -w
# 查看 Pod 中容器的 CPU 和内存使用情况
kubectl top pod <pod-name>
# 查看所有 Pod 的资源使用情况
kubectl top pod
删除
# 删除指定 Pod
kubectl delete pod <pod-name>
# 删除多个 Pods
kubectl delete pod <pod-name-1> <pod-name-2>
# 强制删除 Pod
kubectl delete pod <pod-name> --grace-period=0 --force
# 删除所有命名空间下的所有 Pods
kubectl delete pod --all -A
# 删除当前命名空间下的所有 Pods
kubectl delete pod --all
# 删除某个命名空间中的所有 Pods
kubectl delete pod --all -n <namespace>
# 根据标签删除 Pods
kubectl delete pod -l <label-key>=<label-value>
# 删除 Pod 并保留其资源(Finalizer)
kubectl patch pod <pod-name> -p '{"metadata":{"finalizers":[]}}'
# 查看删除进度 在删除某个 Pod 之前执行该命令,可以实时监控 Pod 的删除过程。
kubectl get pod <pod-name> -w
调试
# 进入 Pod 内部运行命令
kubectl exec -it <pod-name> -- /bin/sh
# 在特定容器内执行命令(多容器 Pod)
kubectl exec -it <pod-name> -c <container-name> -- /bin/sh
# 将本地端口转发到 Pod 内的端口
kubectl port-forward <pod-name> <local-port>:<pod-port>
例如:kubectl port-forward nginx-pod 8080:80 将本地的 8080 端口转发到 Pod 的 80 端口。