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

云川之下 2024-10-20 15:07:02 阅读 52

常用命令

<code> kubectl api-resources #查询可操作的资源对象列表

kubectl get pod #查看默认命名空间下所有pod

kubectl describe pod podname #获取默认命名空间下POD详情

# 如果要查看制定命名空间则使用 -n nsname

kubectl get pod -n ns

kubectl describe pod podname -n ns

# 以YAML格式提供比 kubectl describe pod 更加详细的信息,即系统拥有的关于 Pod 的所有信息

kubectl get pod podname -o yaml

# 查看Pod对应的labels

kubectl get pod --show-labels

# deploy 也能用 --show-labels 查看标签

kubectl get deploy --show-labels

# 通过labels来筛选对应的Pod

kubectl get pod --show-labels --selector=pod-template-hash=748c667d99

kubectl logs podname #查看POD日志,如果有多个容器时,默认查看第一个容器的日志

kubectl logs podname -c containername #使用 -c 查看POD中指定容器的日志

kubectl logs podname containername #也可以省略 -c

# 打印容器在Pod中的前一个实例的日志,如果它存在的话

# 即如果你的容器之前崩溃过,你可以通过此命令访问之前容器的崩溃日志(-p 是 --previous的缩写)

kubectl logs -p podname containername

kubectl logs --previous podname containername

# 在Pod的容器内部执行命令

kubectl exec podname -- cat /var/log/dpkg.log

kubectl exec podname -- ls /var/log/

# 在Pod内部使用 -c 指定容器执行命令

# 如果Pod内有多个容器的情况下若是不用 -c 指定容器,则会默认在第一个容器里执行(也就是配置文件先定义的容器)

k exec podname -c containername -- ls /var/log

# 连接Pod容器的控制台

kubectl exec -it podname -- sh

# 连接Pod指定容器的控制台

k exec nginx -c nginx-container -- ls /var/log

# 不执行命令,而是生成 yaml 的配置文件重定向到配置文件中

kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx.yaml

# 完整一些的

kubectl run nginx --image=nginx --restart=OnFailure --port=80 --env="test_env=test is env" --dry-run=client -o json > pod05code>

# 列出Pod容器的环境变量

kubectl exec podname -- printenv

Pod配置文件

apiVersion: v1

kind: Pod

metadata:

creationTimestamp: null

labels:

run: nginx

name: nginx

spec:

containers:

- image: nginx

imagePullPolicy: IfNotPresent

name: nginx

resources: { }

dnsPolicy: ClusterFirst

restartPolicy: Always

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详解



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。