0


k8s之Pod常用命令详解、镜像拉取策略(imagePullPolicy)

常用命令

  1. kubectl api-resources #查询可操作的资源对象列表
  2. kubectl get pod #查看默认命名空间下所有pod
  3. kubectl describe pod podname #获取默认命名空间下POD详情# 如果要查看制定命名空间则使用 -n nsname
  4. kubectl get pod -n ns
  5. kubectl describe pod podname -n ns
  6. # 以YAML格式提供比 kubectl describe pod 更加详细的信息,即系统拥有的关于 Pod 的所有信息
  7. kubectl get pod podname -o yaml
  8. # 查看Pod对应的labels
  9. kubectl get pod --show-labels
  10. # deploy 也能用 --show-labels 查看标签
  11. kubectl get deploy --show-labels
  12. # 通过labels来筛选对应的Pod
  13. kubectl get pod --show-labels --selector=pod-template-hash=748c667d99
  14. kubectl logs podname #查看POD日志,如果有多个容器时,默认查看第一个容器的日志
  15. kubectl logs podname -c containername #使用 -c 查看POD中指定容器的日志
  16. kubectl logs podname containername #也可以省略 -c# 打印容器在Pod中的前一个实例的日志,如果它存在的话# 即如果你的容器之前崩溃过,你可以通过此命令访问之前容器的崩溃日志(-p 是 --previous的缩写)
  17. kubectl logs -p podname containername
  18. kubectl logs --previous podname containername
  19. # 在Pod的容器内部执行命令
  20. kubectl exec podname -- cat /var/log/dpkg.log
  21. kubectl exec podname -- ls /var/log/
  22. # 在Pod内部使用 -c 指定容器执行命令# 如果Pod内有多个容器的情况下若是不用 -c 指定容器,则会默认在第一个容器里执行(也就是配置文件先定义的容器)
  23. k exec podname -c containername -- ls /var/log
  24. # 连接Pod容器的控制台
  25. kubectl exec-it podname -- sh# 连接Pod指定容器的控制台
  26. k exec nginx -c nginx-container -- ls /var/log
  27. # 不执行命令,而是生成 yaml 的配置文件重定向到配置文件中
  28. kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml
  29. # 完整一些的
  30. kubectl run nginx --image=nginx --restart=OnFailure --port=80--env="test_env=test is env" --dry-run=client -o json > pod05
  31. # 列出Pod容器的环境变量
  32. kubectl exec podname -- printenv

Pod配置文件

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. creationTimestamp: null
  5. labels:
  6. run: nginx
  7. name: nginx
  8. spec:
  9. containers:
  10. - image: nginx
  11. imagePullPolicy: IfNotPresent
  12. name: nginx
  13. resources: {}
  14. dnsPolicy: ClusterFirst
  15. restartPolicy: Always
  16. status: {}

镜像拉取策略

imagePullPolicy有三个取值:

  • Always 每次都下载最新镜像
  • Never 不会尝试获取镜像,如果镜像已经以某种方式存在本地,kubelet 会尝试启动容器;否则,会启动失败
  • IfNotPresent 只有当镜像在本地不存在时才会拉取 默认镜像拉取策略:

当你(或控制器)向 API 服务器提交一个新的 Pod 时,你的集群会在满足特定条件时设置 imagePullPolicy 字段:

如果你省略了 imagePullPolicy 字段,并且容器镜像的标签是 :latest,imagePullPolicy 会自动设置为 Always
如果你省略了 imagePullPolicy 字段,并且没有指定容器镜像的标签,imagePullPolicy 会自动设置为 Always
如果你省略了 imagePullPolicy 字段,并且为容器镜像指定了非 :latest 的标签,imagePullPolicy 就会自动设置为 IfNotPresent

注意事项:

1、在生产环境中部署容器时,你应该避免使用 :latest 标签,因为这使得正在运行的镜像的版本难以追踪,并且难以正确地回滚,应指定一个有意义的标签,如 v1.42.0

2、为了确保 Pod 总是使用相同版本的容器镜像,你可以指定镜像的摘要; 将 : 替换为 @,例如image@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2 (当使用镜像标签时,如果镜像仓库修改了代码所对应的镜像标签,可能会出现新旧代码混杂在 Pod 中运行的情况。 镜像摘要唯一标识了镜像的特定版本,因此 Kubernetes 每次启动具有指定镜像名称和摘要的容器时,都会运行相同的代码。 通过摘要指定镜像可固定你运行的代码,这样镜像仓库的变化就不会导致版本的混杂)

3、容器的 imagePullPolicy 的值总是在对象初次创建时设置的,如果后来镜像的标签发生变化,则不会更新。例如,如果你用一个 非 :latest 的镜像标签创建一个 Deployment, 并在随后更新该 Deployment 的镜像标签为 :latest,则 imagePullPolicy 字段 不会 变成 Always 你必须手动更改已经创建的资源的拉取策略

容器重启策略

restartPolicy有三个取值:

  • Always 总是重启
  • OnFailure 失败了才重启
  • Never 从不重启

Pod容器的状态:

Pending Pod已经建立,但是pod里还有容器没有创建完成
Running Pod已经被调度到节点上,且容器工作正常
Completed Pod里所有容器正常退出
Succeeded
Failed

参考

k8s之Pod详解


本文转载自: https://blog.csdn.net/m0_45406092/article/details/134708669
版权归原作者 云川之下 所有, 如有侵权,请联系我们删除。

“k8s之Pod常用命令详解、镜像拉取策略(imagePullPolicy)”的评论:

还没有评论