本文介绍: 通过摘要指定镜像固定运行代码,这样镜像仓库的变化就不会导致版本的混杂)例如,如果你用一个 非 :latest镜像标签创建一个 Deployment, 并在随后更新该 Deployment镜像标签为 :latest,则 imagePullPolicy 字段 不会 变成 Always 你必须手动更改已经创建资源拉取策略。1、在生产环境部署容器时,你应该避免使用 :latest 标签,因为这使得正在运行镜像版本难以追踪,并且难以正确回滚,应指定一个有意义的标签,如 v1.42.0。

常用命令

 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 > pod05

# 列出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有三个取值

当你(或控制器)向 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有三个取值

Pod容器的状态

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

参考

k8s之Pod详解

原文地址:https://blog.csdn.net/m0_45406092/article/details/134708669

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_38830.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注