zoukankan      html  css  js  c++  java
  • K8S Pod 生命周期 (二)

    Init 容器

    mkdir ~/initC/ && cd ~/initC/
    
    cat init-pod.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp-pod
      labels: 
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: busybox
        command: ['sh', '-c', 'echo The app is runing! && sleep 3600']
      initContainers:
      - name: init-myservice
        image: busybox
        command: ['sh', '-c', 'until nslookup myservice; do echo waithing for myservice; sleep 2; done;']
      - name: init-mydb
        image: busybox
        command: ['sh', '-c', 'until nslookup mydb; do echo waithing for mydb; sleep 2; done;']
    
    kubectl create -f init-pod.yaml 
    
    [root@k8s-master01 initC]# kubectl get pods
    NAME        READY   STATUS     RESTARTS   AGE
    myapp-pod   0/1     Init:0/2   0          23h
    
    # 创建第一个 svc myservice
    cat myservice.yaml 
    kind: Service
    apiVersion: v1
    metadata:
      name: myservice
    spec:
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376
    
    kubectl apply -f myservice.yaml
    
    # 这里看到已经初始化好第一个 init 容器
    [root@k8s-master01 initC]# kubectl get pod
    NAME        READY   STATUS     RESTARTS   AGE
    myapp-pod   0/1     Init:1/2   0          23h
    
    # 创建第二个 svc myservice
    cat myservice.yaml 
    kind: Service
    apiVersion: v1
    metadata:
      name: myservice
    spec:
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376
    
    ---
    
    kind: Service
    apiVersion: v1
    metadata:
      name: mydb
    spec:
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9377
    
    kubectl apply -f myservice.yaml
    
    [root@k8s-master01 initC]# kubectl get pod
    NAME        READY   STATUS    RESTARTS   AGE
    myapp-pod   1/1     Running   0          24h
    

    检测探针 - 就绪检测

    检测容器是否推备好服务请求。如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。

    readiness-httpget-pod 探测模式

    cd ~/initC/
    
    cat readiness-probe-httpget.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: readiness-httpget-pod
      namespace: default
    spec:
      containers:
      - name: readiness-httpget-pod
        image: wangyanglinux/myapp:v1
        imagePullPolicy: IfNotPresent
        readinessProbe:
          httpGet:
            port: 80
            path: /index1.html
          initialDelaySeconds: 1
          periodSeconds: 3
    
    kubectl apply -f readiness-probe-httpget.yaml 
    
    # 因为没有 indes1.html 文件,pod 无法进入 ready 状态
    [root@k8s-master01 initC]# kubectl get pod
    NAME                    READY   STATUS    RESTARTS   AGE
    readiness-httpget-pod   0/1     Running   0          6s
    
    # 创建 index1.html 文件
    kubectl exec readiness-httpget-pod -it -- /bin/sh
    
    cd /usr/share/nginx/html/
    
    echo "klvchen" > index1.html
    
    exit
    
    kubectl get pod
    NAME                    READY   STATUS    RESTARTS   AGE
    readiness-httpget-pod   1/1     Running   0          4m22s
    

    检测探针 - 存活检测

    检测容器是否正在运行。如果存活探测失败, 则 kubelet 会杀死容器,并且容器将受到其重启策略的影响。

    liveness-exec-pod 探测模式

    kubectl delete pod --all
    
    cat liveness-exec.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: liveness-exec-pod
      namespace: default
    spec:
      containers:
      - name: liveness-exec-container
        image: busybox
        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
    
    kubectl apply -f liveness-exec.yaml 
    
    kubectl get pod -w
    NAME                READY   STATUS    RESTARTS   AGE
    liveness-exec-pod   1/1     Running   0          8s
    liveness-exec-pod   1/1     Running   1          103s
    

    liveness-httpget-pod 探测模式

    kubectl delete pod --all
    
    cat liveness-probe-httpget.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: liveness-httpget-pod
      namespace: default
    spec:
      containers:
      - name: liveness-httpget-pod
        image: wangyanglinux/myapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80       # 这个可以不需要指定,因为 K8S 是扁平化的网络,容器启动的端口会映射在 pod 的 pause 上
        livenessProbe:
          httpGet:
            port: 80
            path: /index.html
          initialDelaySeconds: 1
          periodSeconds: 3
          timeoutSeconds: 10
    
    kubectl get pod
    NAME                   READY   STATUS    RESTARTS   AGE
    liveness-httpget-pod   1/1     Running   0          33s
    

    liveness-probe-tcp 探测模式

    cat liveness-probe-tcp.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: liveness-probe-tcp
    spec:
      containers:
      - name: liveness-probe-pod
        image: wangyanglinux/myapp:v1
        livenessProbe:
          initialDelaySeconds: 1
          timeoutSeconds: 1
          tcpSocket:
            port: 80
    
    kubectl apply -f liveness-probe-tcp.yaml 
    
    kubectl get pod
    NAME                 READY   STATUS    RESTARTS   AGE
    liveness-probe-tcp   1/1     Running   0          9s
    

    启动退出动作

    cat lifecycle-demo.yaml 
    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 Hello from the postStart handler > /usr/share/message"]
          preStop:
            exec:
              command: ["/bin/sh","-c","echo Hello Hello from the postStop handler > /usr/share/message"]
    
    kubectl apply -f lifecycle-demo.yaml 
    
    kubectl exec -it lifecycle-demo -- /bin/sh
    # cat /usr/share/message
    Hello Hello from the postStart handler
    
  • 相关阅读:
    三个习题
    20 python--celery
    19 python --队列
    18 python --多线程
    17 python --多进程
    16 python --memcached
    15 python --redis
    14 python --mysql
    13 python --正则
    12 python --json
  • 原文地址:https://www.cnblogs.com/klvchen/p/12458674.html
Copyright © 2011-2022 走看看