K8S 容器重启策略

今天我们来实验容器重启策略。官网描述如下:

Pod 的 spec 中包含一个 restartPolicy 字段,其可能取值包括 Always、OnFailure 和 Never。默认值是 Always。

Pod 的重启策略(restartPolicy)应用于 Pod 中的 应用容器(也叫主容器,spec.containers 定义的容器)和 常规的 Init 容器(初始化容器)。

  • Always:只要容器终止就自动重启容器(这是默认的重启策略)。
  • OnFailure:只有在容器错误退出(退出状态非零)时才重新启动容器。
  • Never:不会自动重启已终止的容器。

所谓容器终止,就是指容器内运行的主进程终止。

  • 在 Linux 容器中,PID 1 是容器的主进程。如果这个进程退出,Docker 或 containerd 等容器运行时会认为该容器已经完成其工作,并停止容器。因此,如果你的应用程序作为 PID 1 运行,那么当应用程序退出时,容器也会终止。

 假设有如下三个节点的 K8S 集群:

k8s31master 是控制节点

k8s31node1、k8s31node2 是工作节点

容器运行时是 containerd

一、镜像准备

1.1、镜像拉取

docker pull tomcat:8.5-jre8-alpine

# 查看是否下载完成
docker images | grep tomcat

 1.2、镜像导出

docker save -o tomcat-8.5-jre8-alpine.tar.gz 镜像TAG
或者
docker save 镜像TAG -o tomcat-8.5-jre8-alpine.tar.gz
都可以

 1.3、镜像导入工作节点 containerd

# k8s31node1 执行
[root@k8s31node1 ~]# ctr -n=k8s.io images import tomcat-8.5-jre8-alpine.tar.gz
[root@k8s31node1 ~]# ctr -n=k8s.io images ls|grep tomcat

# k8s31node2 执行
[root@k8s31node2 ~]# ctr -n=k8s.io images import tomcat-8.5-jre8-alpine.tar.gz
[root@k8s31node2 ~]# ctr -n=k8s.io images ls|grep tomcat

 说明:

  • ctr 是 containerd 命令
  • ctr images import:导入镜像
  • -n=k8s.io:K8S 镜像存储命名空间

 二、Always

  •  编写资源文件

pod-restart-policy-always-demo.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-restart-policy-always
  labels:
    app: tomcat
spec:
  nodeName: k8s31node1
  containers:
  - name: tomcat
    image: tomcat:8.5-jre8-alpine
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080

nodeName 指定它运行在 node1 节点上。

restartPolicy 没写,没写就是 Always。

  • 运行并查看
kubectl apply -f pod-restart-policy-always-demo.yaml
kubectl get pod -owide

pod 已经正常地跑在 k8s31node1 上,且重启次数是 0(也就是没有重启过)。

 2.1、正常停止容器

  • 查找主进程
# 进入 pod 中的容器
# -- 固定写法
[root@k8s31master ~]# kubectl exec -it pod-restart-policy-always -- /bin/bash
# 查看主进程
bash-4.4# ps -ef

tomcat 的 PID 是 1,说明 tomcat 是容器的 主进程。我们正常停止 tomcat,容器就会正常退出。

  •  停止 tomcat 服务
# 运行 tomcat 停止脚本
bash-4.4# /usr/local/tomcat/bin/shutdown.sh

  • 查看 pod

会发现容器重启了 1 次。

 2.2、非正常停止容器

  • 杀死 tomcat 服务
[root@k8s31master ~]# kubectl exec -it pod-restart-policy-always -- /bin/bash
# 杀死 PID=1 的进程,也就是杀死 tomcat
bash-4.4# kill 1

  • 查看 pod

重启了第二次。

2.3、结论

Always:只要容器终止就自动重启容器。

三、OnFailure

  •  编写资源文件

pod-restart-policy-onfailure-demo.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-restart-policy-onfailure
  labels:
    app: tomcat
spec:
  restartPolicy: OnFailure
  nodeName: k8s31node1
  containers:
  - name: tomcat
    image: tomcat:8.5-jre8-alpine
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080

 restartPolicy: OnFailure

  •   运行并查看
kubectl apply -f pod-restart-policy-onfailure-demo.yaml
kubectl get pod -owide

    刚开始重启次数是 0。

    3.1、正常停止容器

    •  停止 tomcat 服务
    [root@k8s31master ~]# kubectl exec -it pod-restart-policy-onfailure -- /bin/bash
    # 运行 tomcat 停止脚本
    bash-4.4# /usr/local/tomcat/bin/shutdown.sh
    

    • 查看 pod

    会发现正常停止容器,容器状态是 Completed,但重启次数是0,也就是没有重启。

    3.2、非正常停止容器

    • 删除 pod 并重新运行
    # 删除容器
    [root@k8s31master ~]# kubectl delete -f pod-restart-policy-onfailure-demo.yaml
    # 重新运行
    [root@k8s31master ~]# kubectl apply -f pod-restart-policy-onfailure-demo.yaml
    # 查看
    [root@k8s31master ~]# kubectl get pod -owide

    • 杀死 tomcat 服务
    [root@k8s31master ~]# kubectl exec -it pod-restart-policy-onfailure -- /bin/bash
    # 杀死 PID=1 的进程,也就是杀死 tomcat
    bash-4.4# kill 1

    • 查看 pod

    重启次数是1,也就重启了一次。

    3.3、结论

    OnFailure:只有在容器错误退出(退出状态非零)时才重新启动容器。正常退出,容器状态是 Completed,但不会重启。

    四、Never

    •  编写资源文件

    pod-restart-policy-never-demo.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-restart-policy-never
      labels:
        app: tomcat
    spec:
      restartPolicy: Never
      nodeName: k8s31node1
      containers:
      - name: tomcat
        image: tomcat:8.5-jre8-alpine
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080

     restartPolicy: Never

    •   运行并查看
    kubectl apply -f pod-restart-policy-never-demo.yaml
    kubectl get pod -owide

    4.1、正常停止容器

    •  停止 tomcat 服务
    [root@k8s31master ~]# kubectl exec -it pod-restart-policy-never -- /bin/bash
    # 运行 tomcat 停止脚本
    bash-4.4# /usr/local/tomcat/bin/shutdown.sh

    •  查看 pod

     会发现正常停止容器,容器状态是 Completed,但重启次数是0,也就是没有重启。

    4.2、非正常停止容器

    • 删除 pod 并重启
    # 删除容器
    [root@k8s31master ~]# kubectl delete -f pod-restart-policy-never-demo.yaml
    # 重新运行
    [root@k8s31master ~]# kubectl apply -f pod-restart-policy-never-demo.yaml
    # 查看
    [root@k8s31master ~]# kubectl get pod -owide

    •  杀死 tomcat 服务
    [root@k8s31master ~]# kubectl exec -it pod-restart-policy-never -- /bin/bash
    # 杀死 PID=1 的进程,也就是杀死 tomcat
    bash-4.4# kill 1
    •  查看 pod

     容器状态是 Error,重启次数是 0,说明并没有重启容器。

     4.3、结论

    Never:不会自动重启已终止的容器。

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/956616.html

    如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

    相关文章

    ROS机器人学习和研究的势-道-术-转型和变革的长期主义习惯

    知易行难。说说容易做到难。 例如,不受成败评价影响,坚持做一件事情10年以上,专注事情本身。 机器人专业不合格且失败讲师如何让内心保持充盈的正能量(节选)-CSDN博客 时间积累 注册20年。 创作历程10年。 创作10年…

    通过学习更多样化的生成数据进行更广泛的数据分发来改进实例分割

    大家读完觉得有帮助记得关注和点赞!!! 本次使用的英文整理的一些记录,练习一下为后续SCI发表论文打好基础 Improving Instance Segmentation by Learning Wider Data Distribution with More Diverse Generative Data Abstract In…

    python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)角点检测

    角点检测(Corner Detection)是计算机视觉和图像处理中重要的步骤,主要用于提取图像中的关键特征,以便进行后续的任务,比如图像匹配、物体识别、运动跟踪等。下面介绍几种常用的角点检测方法及其应用。 1. Harris角点检…

    Git实用指南:忽略文件、命令别名、版本控制、撤销修改与标签管理

    目录 1.忽略特殊文件 1.1.那如何配置我们需要忽略的文件的呢? 1.2.如何检验效果? 2.给命令配置别名 3.基本操作之版本回退 3.1.使用场景: 3.2.使用方法: 4.撤销修改 情况一:对于工作区的代码,还没…

    Linux的基本指令(上) -- 0基础入门

    目录 知识点引入 基本指令 ls指令 pwd 命令 cd 指令 touch 指令 stat指令 mkdir 指令 tree指令 rmdir 指令 rm 命令 man 指令 which 指令 alias 指令 echo指令 输出重定向: > 追加重定向:>> cp 指令 知识点引入 1. Linux中路径用 / 作为路径分隔…

    论文阅读:CosAE Learnable Fourier Series for Image Restoration

    这是 2024 NeurIPS 上发表的一篇文章,介绍了一种新型的基于傅里叶级数的通用编码器。 Abstract 本文介绍了余弦自动编码器(Cosine Autoencoder, CosAE),这是一种新颖的通用自动编码器,它将经典傅里叶级数与前馈神经网…

    网络编程-UDP套接字

    文章目录 UDP/TCP协议简介两种协议的联系与区别Socket是什么 UDP的SocketAPIDatagramSocketDatagramPacket 使用UDP模拟通信服务器端客户端测试 完整测试代码 UDP/TCP协议简介 两种协议的联系与区别 TCP和UDP其实是传输层的两个协议的内容, 差别非常大, 对于我们的Java来说, …

    【华为路由/交换机的ssh远程设置】

    华为路由/交换机的ssh远程设置 R1(client):10.1.1.1 R2(server):10.1.1.2 R2服务端配置: 生成本机密钥 查看生成的密钥 设置AAA授权验证方式,并设置支持SSH协议 创建本地用户&…

    计算机毕业设计PySpark+Hadoop+Hive机票预测 飞机票航班数据分析可视化大屏 航班预测系统 机票爬虫 飞机票推荐系统 大数据毕业设计

    温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

    CSS笔记基础篇01——选择器、文字控制属性、背景属性、显示模式、盒子模型

    黑马程序员视频地址: 前端Web开发HTML5CSS3移动web视频教程https://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodeshttps://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d3666…

    C++学习第五天

    创作过程中难免有不足,若您发现本文内容有误,恳请不吝赐教。 提示:以下是本篇文章正文内容,下面案例可供参考 一、构造函数 问题1 关于编译器生成的默认成员函数,很多童鞋会有疑惑:不实现构造函数的情况下…

    2024嵌入式系统的未来发展与技术洞察分享

    时间如白驹过隙,不知不觉又是一年,这一年收获满满。接下来,将本年度对技术的感悟和洞察分析如下,希望对大家有所帮助。 在过去几十年里,嵌入式系统技术迅速发展,成为现代电子设备和智能硬件的核心组成部分。…

    01设计模式(D3_设计模式类型 - D3_行为型模式)

    目录 一、模版方法模式 1. 基本介绍 2. 应用案例一:豆浆制作问题 需求 代码实现 模板方法模式的钩子方法 3. View的draw(Android) Android中View的draw方法就是使用了模板方法模式 模板方法模式在 Spring 框架应用的源码分析 知识小…

    Linux 中如何使用 inotify-tools 监控目录变化 ?

    当 Linux 系统目录中有新文件创建时执行命令,可以通过组合使用工具和脚本实现监控。一种常见的方法是使用 inotify-tools,这是一个允许您监视文件系统事件的实用程序,与 shell 脚本一起使用。 Step 1: 安装 inotify-tools 首先,…

    vid2vid-zero:使用Stable Diffusion进行零样本视频编辑

    Paper: Wang W, Jiang Y, Xie K, et al. Zero-shot video editing using off-the-shelf image diffusion models[J]. arXiv preprint arXiv:2303.17599, 2023. Introduction: Unreleased Code: https://github.com/baaivision/vid2vid-zero 目录 一. 预备知识1. diffusion 引导…

    AI 大爆发时代,音视频未来路在何方?

    AI 大模型突然大火了 回顾2024年,计算机领域最大的变革应该就是大模型进一步火爆了。回顾下大模型的发展历程: 萌芽期:(1950-2005) 1956年:计算机专家约翰麦卡锡首次提出“人工智能”概念,标志…

    蓝桥杯训练—完美的代价

    文章目录 一、题目二、示例三、解析四、代码 一、题目 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定义是&am…

    雷电9最新版安装Magisk+LSPosd(新手速通)

    大家好啊!我是NiJiMingCheng 我的博客:NiJiMingCheng 在安卓系统的定制与拓展过程中,获取 ROOT 权限以及安装各类框架是进阶玩家常用的操作,这可以帮助我们实现更多系统层面的个性化功能。今天,我将为大家详细介绍如何…

    【25】Word:林涵-科普文章❗

    目录 题目​ NO1.2.3 NO4.5.6 NO7.8 NO9.10 NO11.12 不连续选择:按住ctrl按键,不连续选择连续选择:按住shift按键,选择第一个,选择最后一个。中间部分全部被选择 题目 NO1.2.3 布局→纸张方向:横向…

    ESP8266-01S、手机、STM32连接

    1、ESP8266-01S的工作原理 1.1、AP和STA ESP8266-01S为WIFI的透传模块,主要模式如下图: 上节说到,我们需要用到AT固件进行局域网应用(ESP8266连接的STM32和手机进行连接)。 ESP8266为一个WiFi透传模块,和…