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"]
  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/wufj/p/13138659.html
Copyright © 2011-2022 走看看