K8S学习笔记之八-command和探针


一、普通command命令

1、创建yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  containers:
  - name: busybox
    image: busybox
    command: ['sh', '-c', 'echo The app is running! > /tmp/test&& sleep 3600']

2、验证

二、postStart

简介:1、应用容器启动之后如果要做点配置之类的 ,可以使用postStart。

2、postStart 处理函数的调用不保证早于容器的入口点(entrypoint)的执行,postStart和entrypoint异步执行

3、Kubernetes 的容器管理逻辑会一直阻塞等待 postStart 处理函数执行完毕。只有 postStart 处理函数执行完毕,

容器的状态才会变成 RUNNING

1、举例

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"]

2、验证结果

 三、preStop

概念:1、Kubernetes 在容器结束前立即发送 preStop 事件

2、Kubernetes 的容器管理逻辑 会一直阻塞等待 preStop 处理函数执行完毕

1、举例

apiVersion: v1
kind: Pod
metadata:
  name: hook-demo2
  labels:
    app: hook
spec:
  containers:
  - name: hook-demo2
    image: nginx
    ports:
    - name: webport
      containerPort: 80
    volumeMounts:
    - name: message
      mountPath: /usr/share/
    lifecycle:
      preStop:
        exec:
          command: ['/bin/sh','-c','echo Hello from the preStop Handler > /usr/share/wuchang']
  volumes:
  - name: message
    hostPath:
      path: /tmp

2、创建之后查看本地/tmp目录下文件

[root@k8s-master pod]# kubectl apply -f pod1.yaml
pod "hook-demo2" created
[root@k8s-master pod]# kubectl get pods
NAME         READY     STATUS    RESTARTS   AGE
hook-demo2   1/1       Running   0          1m

 3、执行删除pod操作,再查看/tmp目录下,文件存在

[root@k8s-master pod]# kubectl delete pods --all
pod "hook-demo2" deleted

四、探针

liveness探针:影响的是单个容器,

readiness探针:影响的是整个pod,即如果pod中有多个容器,只要有一个容器的readiness探针诊断失败,那么整个pod都会处于unready状态

ExecAction:在容器内执行指定命令,如果命令退出时返回码为0,则认为诊断成功
TCPSocketAction:kubelet尝试打开容器上的某个端口,如果连接成功建立则诊断通过,否则失败
HTTPGetAction:每进行一次HTTP健康检查都会curl访问一次指定的URL,如果返回的HTTP状态码在200和399之间,则认为容器运转正常,否则认为容器运转不正常

且小于400,则诊断被认为是成功的

Ⅰ、就绪探针(readinessProbe)

简介:指示容器是否准备好服务请求。如果就绪探测失败,断点控制器将从与pod匹配的所有service的端点中删除该

pod的ip地址。初始延迟之前的就绪状态为Failure。如果容器不提供就绪探测,则默认为Success

1、创建readinessProbe-httpget

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-container
    image: nginx
    readinessProbe:
       httpGet:
         port: 80              //通过http访问,访问的是/usr/share/nginx/html下的页面
         path: /index1.html   //检测根目录下是否有该文件
       initialDelaySeconds: 1
       periodSeconds: 3

2、查看pods的状态为running,但是ready为0/1,证明没有就绪

 3、进入pod内创建文件

[root@k8s-master probe]# kubectl exec -it nginx-pod -- /bin/sh
# cd /usr/share/nginx/html
# echo "123" > index1.html

4、检测pod状态,已经就绪

Ⅱ、存活探针(livenessProbe)

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

如果容器不提供存活探针,则默认为success

1、livenessProbe-exec

apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec-pod
  labels:
    app: busybox
spec:
  containers:
  - name: liveness-exec-container
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; se=leep 3600"]
    livenessProbe:
       exec:
         command: ["test","-e","/tmp/live"]
       initialDelaySeconds: 1
       periodSeconds: 3

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM