云原生系列(九)

简介: 云原生系列(九)

pod的初始化容器实操,两个Hook的实操

pod的init初始化容器,就是init容器启动,应用pod才能开始启动,比如:①、数据库启动完成后,才能开启启动应用;②、在init容器中,根据需要生成配置文件,然后在主应用pod中启动应用。

yaml文件如下:


# 这里是 Pod 模版apiVersion: v1kind: Podmetadata:  name: my-podspec:  #业务容器  containers:    - name: myapp-container      image: busybox:latest      command: ['sh', '-c', 'echo The app is running! && sleep 3600']  #初始化的容器:一般我们用不到初始化容器,除非做一些初始化的话会做  # 看日志的话:kubectl  logs -f 容器名 --container=init-myservice  initContainers:    - name: init-myservice      image: busybox:latest      command: ['sh', '-c', 'echo waiting for myservice! && sleep 10']    - name: init-mydb      image: busybox:latest      command: ['sh', '-c', 'echo waiting for mydb! && sleep 10']

运行如下:

5d12fb03853024d0666abc96f29ef332.png

执行初始化容器1

1558f8b797b3798b3e267b933c86b56f.png

执行初始化容器2:

259e4f9327e70b27e99c1bb2a96d05da.png

看下初始化容器的日志:

3af8d7fde4abc59fe53b368b2ade22ff.png

Pod钩子Hook方法

pod钩子作用于:

①、pod创建后立刻执行PostStart方法

②、pod容器终止后之前立刻执行PreStop方法

PostStart钩子:

容器创建后立即执行,注意由于是异步执行,它无法保证一定在ENTRYPOINT之前执行,如果失败,容器会被杀死,并根据RestartPolicy决定是否重启。

preStop钩子:

在容器终止之前调用,是阻塞的,需要执行完该步骤后,才能真正执行终止容器的步骤。容器终止执前执行,常用于资源清理。执行完成之后容器将被成功终止,如果失败,容器同样也会被杀死。

钩子的回调函数支持三种方式定义动作:

①、exec:执行一段命令

exec:在容器内执行命令,如果命令的退出状态码是0表示执行成功,否则表示失败


……lifecycle:postStart:exec:command:- cat- /tmp/healthy……

②、HTTP:发送HTTP请求

httpGet:向指定URL发起GET请求,如果返回的HTTP状态码在[200,400)之间表示请求成功,否则表示失败


……lifecycle:postStart:httpGet:path: /login # URI地址port: 80 # 端口号host: 192.168.126.100 # 主机地址scheme: HTTP # 支持的协议,http或https# http://192.168.126.100:80/login……

③、TCPSocket:在容器尝试访问指定的socket


……lifecycle:postStart:tcpSocket:port: 8080……

Pod的钩子Hook的方法Demo如下:


# 这里是 Pod 模版#在外面的虚拟机里面执行 kubectl  命令apiVersion: v1kind: Podmetadata:  name: my-podspec:  containers:    - name: hello      image: busybox:latest      command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']      lifecycle:        #钩子方法 启动执行的钩子        postStart:          exec:            # shell命令   重定向到一个文件里面   会输出到内存里面,没有刷盘  文件是有缓存,所以在看不到,等到刷盘就能看到了            command: ["/bin/sh", "-c", "echo Hello from the postStart handler >> /usr/share/message"]        #停止的时候执行的钩子        preStop:          exec:            command: ["/bin/sh", "-c", "echo Hello from the preStop handler >> /usr/share/message"]      #使用了一个卷的挂载   docker编排里面的卷的挂载不一样      volumeMounts:        - name: outfile  #这里的name名称要和volumes相同   这个是对应的名字  对应的是外面的卷          mountPath: /usr/share  #这个是容器里面的目录   挂载到容器里的路径  #一个pod内部的所有网络命名空间和存储空间是共享的  所以和容器是并列的  volumes:    - name: outfile #创建 volumes 外面卷的名字      hostPath:        path: /tmp  对应到本地的目录  容器外面的路径   会在MiniKube的虚拟机里,需要进去 minikube ssh  restartPolicy: OnFailure

运行结果如下:

695444634c240e3c717751fb92f63ed2.png

Pod的状态和重启策略:

在介绍Pod的重启策略前,首先得了解pod的状态

pod的常见的状态:

pending:挂起,我们在请求创建pod时,条件不满足,调度没有完成,没有任何一个节点能满足调度条件,已经创建了但是没有适合它运行的节点叫做挂起,这其中也包含了含集群为容器创建网络,或者下载镜像的过程。

Running:Pod内的所有的容器都已经被创建,且至少一个容器正处于运行状态,正在启动状态或者重启状态。

Succeded:Pod中所有容器都执行成功后退出,并且没有处于重启的容器

Failed:Pod中所有容器都已经退出,但是至少还有一个容器退出时是失败的状态。

Unknown:未知状态,所谓的pod是什么状态是apiserver和运行在pod节点进行通信获取状态信息的,如果节点上的kubelet本身出故障,那么apiserver就连不上kubelet,得不到信息了,就会看到Unknown。

通过Kubectl的命令也可以查看Pod的状态信息:

3d849ffbc8aba515c6757c83691c91c3.png

Pod重启策略

根据restartPolicy来定义重启策略

①、Always:但凡Pod对象终止就将其重启,此为默认设定。

②、OnFailure:仅在Pod对象出现错误时将其重启

③、Never:从不重启

Pod的重启,只会在当前同一node节点上尝试重启pod

只有第一次重启是立刻执行,后面需要重启时,kubelet会延迟时间进行,且反复的重启操作的延迟时长依次为10秒,20秒,40秒,80秒 和300秒,300秒是最大的延迟时长。

Pod常见状态转换场景

不同的重启策略下,Pod常见状态转换过程

5374d510b45465439af7deb768aece72.png

相关文章
|
运维 Cloud Native 持续交付
云原生应用
云原生应用
|
3月前
|
存储 Cloud Native Linux
云原生系列(三)
云原生系列(三)
|
2月前
|
运维 Kubernetes Cloud Native
探索云原生应用的未来之路
【10月更文挑战第2天】在数字化浪潮中,云原生技术如同一艘扬帆起航的巨轮,正引领着企业和应用开发者驶向更广阔的大海。本文将深入浅出地探讨云原生的核心概念、优势及其在实际中的应用案例,同时提供代码示例,帮助读者更好地理解和运用云原生技术,共同迎接数字化转型的新浪潮。
|
3月前
|
存储 负载均衡 Cloud Native
云原生系列(六)
云原生系列(六)
|
3月前
|
Kubernetes Cloud Native API
云原生系列(五)
云原生系列(五)
|
3月前
|
Kubernetes Cloud Native 调度
云原生系列(八)
云原生系列(八)
|
3月前
|
Kubernetes Cloud Native 安全
云原生系列(四)
云原生系列(四)
|
3月前
|
Cloud Native Linux 网络安全
云原生系列(二)
云原生系列(二)
|
3月前
|
Kubernetes Cloud Native API
云原生系列(七)
云原生系列(七)
|
监控 Cloud Native Devops
云原生应用在那些场景应用广泛
云原生应用在那些场景应用广泛
下一篇
无影云桌面