Kubernetes(k8s):精通 Pod 操作的关键命令
- 1、查看 Pod 列表
- 2、 查看 Pod 的详细信息
- 3、创建 Pod
- 4、删除 Pod
- 5、获取 Pod 日志
- 6、进入 Pod 执行命令
- 7、暂停和启动 Pod
- 8、改变 Pod 副本数量
- 9、查看当前部署中使用的镜像版本
- 10、滚动更新 Pod
- 11、导出 、导入Pod 的配置
- 1、导出配置到文件:
- 2、导入配置文件到集群:
- 12、查看 Pod 的 CPU、内存 使用情况
- 13、端口转发
????The Begin????点点关注,收藏不迷路????
|
Kubernetes 是一个强大的容器编排平台,其中的核心概念之一就是 Pod。Pod 是 Kubernetes 中最小的可部署单元,它由一个或多个容器组成,共享网络和存储资源。
在本篇博客中,我们将深入探讨 Kubernetes 集群中与 Pod 相关的一些重要命令,帮助更好地管理和调试的容器应用。
1、查看 Pod 列表
要查看集群中所有 Pod 的列表,可以使用以下命令:
kubectl get pods
此命令将列出当前命名空间中所有 Pod 的名称、状态、所在节点和创建时间等信息。
2、 查看 Pod 的详细信息
要查看特定 Pod 的详细信息,可以使用以下命令:
kubectl describe pod <pod_name>
kubectl describe pod nginx-deployment-544dc8b7c4-ds6b5
这将显示有关该 Pod 的更详细的信息,包括容器状态、事件、标签和注释等。
3、创建 Pod
可以使用 kubectl create --help 命令来查看关于 kubectl create 命令的帮助信息和可用选项。
kubectl create --help
1、方式一
从 Kubernetes 版本 1.18 开始
,kubectl create pod 命令已经不再建议使用,因为它创建的 Pod 缺少一些默认配置(如控制器)。
建议使用 kubectl run 或者编写 YAML 文件来创建 Pod。
如果想使用 kubectl 命令行直接创建一个简单的 Pod,可以使用 kubectl run 命令。例如:
kubectl run my-pod --image=nginx --restart=Never
这将创建一个名为 my-pod 的 Pod,使用 nginx 镜像, Never 表示当 Pod 终止后不会被自动重启。( --restart=Always 会自动重启容器)
2、方式二
创建 Deployment 时指定副本数量,使用 --replicas 标志。
kubectl create deployment my-nginx-deployment --image=nginx --replicas=2
这将创建一个名为 my-nginx-deployment 的 Deployment,使用 nginx 镜像,并配置 Deployment 控制器以管理两个 Pod 副本。
4、删除 Pod
要删除一个 Pod,可以使用以下命令:
kubectl delete pod <pod_name>
kubectl delete pod my-nginx-deployment-56b7d44759-9sdr2
这将删除指定名称的 Pod,因为前面指定了副本数为2,删除后会自动重建。
5、获取 Pod 日志
要查看 Pod 的日志,可以使用以下命令:
kubectl logs <pod_name>
kubectl logs my-nginx-deployment-56b7d44759-mm7gw
此命令将打印出指定 Pod 的日志。
6、进入 Pod 执行命令
要在 Pod 内部执行命令,可以使用以下命令:
kubectl exec -it <pod_name> -- /bin/bash
kubectl exec -it my-nginx-deployment-56b7d44759-mm7gw -- /bin/bash
这将在指定的 Pod 内部启动一个交互式的 shell,允许执行命令进行调试或查看状态。
7、暂停和启动 Pod
从 Kubernetes 版本 1.20 开始
,kubectl pause 和 kubectl unpause 命令已经不再推荐使用,并且在较新的版本中已被移除。
这是因为这两个命令不再被视为最佳实践,因为它们直接修改了 Pod 的状态,而且可能会引起一些不必要的混淆和意外行为。
相反,推荐的做法是使用更高级的控制器,如 Deployment、StatefulSet、DaemonSet 等,来管理 Pod 的生命周期。通过更新这些控制器的 Pod 模板来控制 Pod 的启动和停止,可以更加灵活地管理应用程序的部署和维护。
1.20 之前的低版本:
要暂停一个 Pod,可以使用以下命令:
kubectl pause pod <pod_name>
要继续一个暂停的 Pod,可以使用以下命令:
kubectl unpause pod <pod_name>
较新的版本(改变 Pod 副本数量):
在 Kubernetes 中,没有直接的 stop 命令来停止 Pod。通常,可以通过删除 Pod 、副本数量缩减来实现停止。
缩放 Deployment:如果您想停止一个 Deployment 下的所有 Pod,可以使用 kubectl scale 命令来将副本数量缩减为 0。例如:
kubectl scale --replicas=0 deployment/<deployment-name>
kubectl delete pod <pod-name>
如:将名为 my-nginx-deployment 的部署的副本数量缩减为 0,
kubectl scale --replicas=0 deployment/my-nginx-deployment
这将把名为 nginx 的部署中的所有 Pod 的副本数量缩减为 0,从而停止所有 my-nginx-deployment 的运行。
8、改变 Pod 副本数量
要改变 Deployment 或 ReplicaSet 中 Pod 的副本数量,可以使用以下命令:
1、语法
kubectl scale deployment <deployment_name> --replicas=<replica_count>
2、例子:将 nginx-deployment副本数从2增加至3个
kubectl scale deployment nginx-deployment --replicas=3
9、查看当前部署中使用的镜像版本
1、语法,<deployment_name> 为要查询的 Deployment 的实际名称
kubectl get deployment <deployment_name> -o=jsonpath='{.spec.template.spec.containers[0].image}'
2、例子:查看 nginx-deployment 中正在使用的 nginx 容器的镜像版本
kubectl get deployment nginx-deployment -o=jsonpath='{.spec.template.spec.containers[0].image}'
这将返回 nginx-deployment 中正在使用的 nginx 容器的镜像版本。
10、滚动更新 Pod
使用 kubectl set image 命令来更新 Deployment 中的容器镜像。
如把目前的nginx-deployment 使用的nginx版本更新为nginx:1.22.1版本。
kubectl set image deployment/nginx-deployment nginx=nginx:1.22.1
11、导出 、导入Pod 的配置
较新的 Kubernetes 版本中,–export 标志已被弃用。
要导出 Pod 的配置,可以使用 kubectl get 命令结合 --export 标志,并将输出保存到文件中。然后,可以使用 kubectl apply 命令将此配置重新导入到集群中。以下是示例:
1、导出配置到文件:
1、语法
kubectl get pod <pod_name> -o yaml > pod.yaml
kubectl get deployment <deployment_name> -o yaml > deployment.yaml
2、例子
例子1:导出 my-pod 的配置到文件 my-pod.yaml
kubectl get pod my-pod -o yaml >my-pod.yaml
例子2:获取名为 nginx-deployment 的 Deployment 的 YAML 配置,并将其保存到名为 nginx-deployment20240404.yaml 的文件中。
kubectl get deployment nginx-deployment -o yaml > nginx-deployment20240404.yaml
2、导入配置文件到集群:
kubectl apply -f nginx-deployment20240404.yaml
kubectl apply -f my-pod.yaml
这将根据 yaml 文件中的配置创建或更新 Pod。
12、查看 Pod 的 CPU、内存 使用情况
## 所有
kubectl top pods
##查看特定命名空间中 Pod
kubectl top pod <pod-name> --namespace=<namespace>
kubectl top pods -n=default
kubectl top pod nginx-deployment-78f585888c-dnd2r -n=default
kubectl top pod nginx-deployment-78f585888c-dnd2r --namespace=default
13、端口转发
在 Kubernetes 中,可以使用 kubectl port-forward 命令来将本地端口与 Pod 中的端口进行转发。
这对于调试和测试
非常有用,例如在本地机器*问运行在 Kubernetes 集群中的 Pod。
kubectl port-forward <pod-name> <local-port>:<pod-port> --namespace=<namespace>
其中:
<pod-name> 是要转发的 Pod 的名称。
<local-port> 是本地主机上用于转发流量的端口。
<pod-port> 是要转发到 Pod 中的端口。
<namespace> 是 Pod 所在的命名空间。
1、例如:将名为 my-pod 的 Pod 中的端口 80 转发到本地主机上的端口 9090。
kubectl port-forward my-pod 9090:80
本地主机的端口 9090 将会与 Pod 中的端口 80 进行绑定。现在,可以通过访问 http://localhost:9090 来访问 Pod 中运行的服务。
只能在本地访问,不能在浏览器访问
。
2、如果转发到主机的 IP 地址而不是 localhost,你可以通过指定 --address 或 -a 参数来指定要监听的地址。
kubectl port-forward <pod-name> <local-port>:<pod-port> --address <host-ip>
kubectl port-forward my-pod 9090:80 --address 192.168.234.20
在浏览器即可访问192.168.234.20:9090。
????The End????点点关注,收藏不迷路????
|