k8s:优雅关闭pod的简单例子

先通过Dockerfile创建一个image

vim Dockerfie
<<<< 内容如下:
FROM centos

RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
RUN sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*
RUN yum install -y net-tools telnet wget vim

RUN echo "alias ll='ls -al'" >> /etc/profile

RUN mkdir -p /install/java
RUN cd /install/java && wget https://download.java.net/java/GA/jdk22.0.1/c7ec1332f7bb44aeba2eb341ae18aca4/8/GPL/openjdk-22.0.1_linux-x64_bin.tar.gz
RUN cd /install/java && tar zxvf openjdk-22.0.1_linux-x64_bin.tar.gz
RUN echo 'export JAVA_HOME=/install/java/jdk-22.0.1' >> /etc/profile
RUN echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile

RUN mkdir -p /app
COPY target/myWeb-1.0-SNAPSHOT.jar /app/myWeb-1.0-SNAPSHOT.jar

RUN echo '#!/bin/bash' >> /app/startup.sh
RUN echo 'source /etc/profile' >> /app/startup.sh
RUN echo 'exec java -jar /app/myWeb-1.0-SNAPSHOT.jar' >> /app/startup.sh
RUN chmod +x /app/startup.sh

ENTRYPOINT ["/app/startup.sh"]
>>>>

注意Dockerfile文件里面的【RUN echo ‘exec java -jar /app/myWeb-1.0-SNAPSHOT.jar’ >> /app/startup.sh】这句话,里面的【exec】非常重要,没有exec的话虽然也能运行,但做不到优雅关闭。因为exec的作用是让【java】进程成为【pid=1】的进程,如果没有【exec】,【pid=1】的进程是ENTRYPOINT里面的【/app/startup.sh】。

创建镜像

docker build -t my-web .

上传镜像到镜像库

docker tag my-web:latest 192.168.44.228:5000/my-web:latest
docker push 192.168.44.228:5000/my-web:latest

基于该镜像创建pod

kubectl run my-web --image=192.168.44.228:5000/my-web

连接上这个pod看下是否在运行

kubectl attach my-web

在这里插入图片描述

删除这个pod试试

kubectl delete pod my-web

在这里插入图片描述

可以看到当k8s删除一个pod的时候容器里面的进程收到了【SIGTERM】信息,所以程序里面注册的【ShutdownHook】被触发了,该【ShutdownHook】的注册代码如下:

@SpringBootApplication()
public class MyWebTest {

    public static void main(String[] args) {
        registerHook();
        SpringApplication.run(MyWebTest.class, args);
    }

    private static void registerHook() {
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            // 当pod关闭的时候会触发这个回调
            System.out.println(LocalDateTime.now() + "-->Hook.run 1....");
            // 关闭spring boot
            ShutdownHelper.shutdown();
            System.out.println(LocalDateTime.now() + "-->Hook.run 2....");
        }));
    }
}

关于spring boot的优雅关闭请参考【https://blog.csdn.net/chenhz2284/article/details/139359172?spm=1001.2014.3001.5502】

相关推荐

  1. k8s中,pod服务状态和pod里面容器状态关系

    2024-06-08 01:10:04       19 阅读
  2. <span style='color:red;'>k</span><span style='color:red;'>8</span><span style='color:red;'>s</span>-<span style='color:red;'>Pod</span>

    k8s-Pod

    2024-06-08 01:10:04      31 阅读
  3. <span style='color:red;'>K</span><span style='color:red;'>8</span><span style='color:red;'>S</span> <span style='color:red;'>POD</span>

    K8S POD

    2024-06-08 01:10:04      22 阅读
  4. K8S Pod

    2024-06-08 01:10:04       16 阅读
  5. <span style='color:red;'>k</span><span style='color:red;'>8</span><span style='color:red;'>s</span>-<span style='color:red;'>Pod</span>

    k8s-Pod

    2024-06-08 01:10:04      15 阅读
  6. <span style='color:red;'>k</span><span style='color:red;'>8</span><span style='color:red;'>s</span>-<span style='color:red;'>pod</span>

    k8s-pod

    2024-06-08 01:10:04      11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 01:10:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 01:10:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 01:10:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 01:10:04       18 阅读

热门阅读

  1. 【html】简单网页模板源码

    2024-06-08 01:10:04       8 阅读
  2. 语言模型解构——手搓BPE算法

    2024-06-08 01:10:04       8 阅读
  3. C# Parallel 未完

    2024-06-08 01:10:04       9 阅读
  4. html及css

    2024-06-08 01:10:04       7 阅读
  5. BGP有条件打破IBGP水平分割1

    2024-06-08 01:10:04       6 阅读
  6. 第二十六章HTML与CSS书写规范

    2024-06-08 01:10:04       4 阅读
  7. 探索HTML5 Geolocation:精准定位网页的新纪元

    2024-06-08 01:10:04       6 阅读
  8. 【封装】Unity切换场景不销毁物体

    2024-06-08 01:10:04       7 阅读