zoukankan      html  css  js  c++  java
  • pod 生命周期

    1、init 容器

    init 模板

    apiVersion: v1
    kind: Pod
    metadata:
      name: initctest
    spec:
      containers:
      - name: busybox
        image: hub.wufujie.com/library/busybox:v1
        command: ['sh','-c','echo The app is running! && sleep 3600']
      initContainers:
      - name: init-myservice
        image: hub.wufujie.com/library/busybox:v1
        command: ['sh','-c','until nslookup myservice;do echo waiting for myservice;sleep 2;done;']
      - name: init-mydb
        image: hub.wufujie.com/library/busybox:v1
        command: ['sh','-c','until nslookup mydb;do echo waiting for mydb;sleep 2;done;']

    service

    apiVersion: v1
    kind: Service
    metadata:
      name: myservice
    spec:
      ports:
      - protocol: TCP
        port: 80
        targetPort: 9375
    apiVersion: v1
    kind: Service
    metadata:
      name: mydb
    spec:
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9377

    2、检测探针——就绪检测

    readiness-httpget-pod.yml

    apiVersion: v1
    kind: Pod
    metadata:
      name: readiness-httpget-pod
      namespace: default
    spec:
      containers:
      - name: readiness-httpget-container
        image: hub.wufujie.com/library/httpd:v1
        imagePullPolicy: IfNotPresent
        readinessProbe:
          httpGet:
            port: 80
            path: /index1.html
          initialDelaySeconds: 1
          periodSeconds: 3

    此刻创建 pod

    kubectl create -f readiness-httpget-pod.yml

     因为容器的路径下没有 index1.html 这个文件,所有 pod 一直处在 ready 状态

    我们进入容器,在网页根目录下创建一个 index1.html 的文件

    [root@master ~]# kubectl exec -it readiness-httpget-pod -- /bin/bash
    root@readiness-httpget-pod:/usr/local/apache2# cd htdocs/
    root@readiness-httpget-pod:/usr/local/apache2/htdocs# echo "hello world!" > index1.html
    root@readiness-httpget-pod:/usr/local/apache2/htdocs# exit
    exit

    此刻查看 pod 状态,发现 pod 已经 ready

     3、探针检测——存活检测

    livenessProbe-exec.yml

    apiVersion: v1
    kind: Pod
    metadata:
      name: liveness-exec-pod
      namespace: default
    spec:
      containers:
      - name: liveness-exec-container
        image: hub.wufujie.com/library/busybox:v1
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh","-c","touch /tmp/live;sleep 60;rm -rf /tmp/live;sleep 3600"]
        livenessProbe:
          exec:
            command: ["test","-e","/tmp/live"]
          initialDelaySeconds: 1
          periodSeconds: 3

     command 命令的意思是:1、创建 /tmp/live 文件;2、休眠 60 秒;3、删除文件 /tmp/live;4、休眠 3600 秒

    下一个 command 检测 /tmp/live 这个文件是否存在

    initailDelaySeconds: 1的意思是容器初始化 1 秒后,才开始检测 /tmp/live 文件

    periodSeconds: 3的意思是,检测的循环周期是 3 秒

    从下图可以看到,如果检测不到文件,pod 会重启

     livenessProbe-httpget.yml

    通过 http 能够访问网页,来检测是否存活

    apiVersion: v1
    kind: Pod
    metadata:
      name: liveness-httpget-pod
      namespace: default
    spec:
      containers:
      - name: liveness-httpget-container
        image: hub.wufujie.com/library/httpd:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        livenessProbe:
          httpGet:
            port: http
            path: /index.html
          initialDelaySeconds: 1
          periodSeconds: 3
          timeoutSeconds: 10

    查看状态,已经在 running 了

     我们进去容器,把 index.html 改成 index1.html,再看看

    已经看到已经重启一次了

     livenessProbe-tcp.yml

    检查 tcp 连接,80端口是否再通信

    apiVersion: v1
    kind: Pod
    metadata:
      name: probe-tcp
    spec:
      containers:
      - name: nginx
        image: hub.wufujie.com/library/httpd:v1
        livenessProbe:
          initialDelaySeconds: 5
          timeoutSeconds: 1
          tcpSocket:
            port: 80

    4、启动退出动作

    在容器启动的时候执行命令

    在容器停止前执行命令

    apiVersion: v1
    kind: Pod
    metadata:  
      name: lifecycle-demo
    spec:  
      containers:  
      - name: lifecycle-demo-container    
        image: nginx    
        lifecycle:      
          postStart:        
            exec:          
              command: ["/bin/sh", "-c", "echo Hello from the postStart handler >/usr/share/message"]      
          preStop:        
            exec:
              command: ["/bin/sh", "-c", "echo Hello from the poststop handler >/usr/share/message"]
  • 相关阅读:
    将vue文件script代码抽取到单独的js文件
    git pull 提示错误:Your local changes to the following files would be overwritten by merge
    vue和uniapp 配置项目基础路径
    XAMPP Access forbidden! Access to the requested directory is only available from the local network.
    postman与newman集成
    postman生成代码段
    Curl命令
    POST方法的Content-type类型
    Selenium Grid 并行的Web测试
    pytorch转ONNX以及TnesorRT的坑
  • 原文地址:https://www.cnblogs.com/wufj/p/13138659.html
Copyright © 2011-2022 走看看