k8s开发基础-pod的initcontainer示例
Init Container可以在多种K8S资源里被使用到如Deployment、Daemon Set, Pet Set, Job等,但归根结底都是在Pod启动时,在主容器启动前执行,做初始化工作。Init 容器不支持 lifecycle、livenessProbe、readinessProbe 和 startupProbe, 因为它们必须在 Pod 就绪之前运行完成。应用场景:第一种场景:等待其
Pause容器说明
每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效。在设计时可以充分利用这一特性,将一组密切相关的服务进程放入同一个Pod中;同一个Pod里的容器之间仅需通过localhost就能互相通信。
kubernetes中的pause容器主要为每个业务容器提供以下功能:
PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID。
网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围。
IPC命名空间:Pod中的多个容器能够使用System V IPC或POSIX消息队列进行通信。
UTS命名空间:Pod中的多个容器共享一个主机名;Volumes(共享存储卷)。
Pod中的各个容器可以访问在Pod级别定义的Volumes。
Init Container可以在多种K8S资源里被使用到如Deployment、Daemon Set, Pet Set, Job等,但归根结底都是在Pod启动时,在主容器启动前执行,做初始化工作。
Init 容器不支持 lifecycle
、livenessProbe
、readinessProbe
和 startupProbe
, 因为它们必须在 Pod 就绪之前运行完成。
应用场景:
第一种场景:等待其它模块Ready,比如我们有一个应用里面有两个容器化的服务,一个是Web Server,另一个是数据库。其中Web Server需要访问数据库。但是当我们启动这个应用的时候,并不能保证数据库服务先启动起来,所以可能出现在一段时间内Web Server有数据库连接错误。为了解决这个问题,我们可以在运行Web Server服务的Pod里使用一个InitContainer,去检查数据库是否准备好,直到数据库可以连接,Init Container才结束退出,然后Web Server容器被启动,发起正式的数据库连接请求。
第二种场景:初始化配置
个人总结示例:
(weops) [root@node201 k8s]# cat initcontainer_emptyvolume.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-initcontainer-emptyvolume
labels:
app: init
spec:
initContainers:
- name: init1
image: busybox
command:
- wget
- "-O"
- "/temp/index.html"
- http://www.baidu.com
volumeMounts:
- name: initdir1 # 关联volumes:-> name: initdir1
mountPath: "/temp" #挂载到init容器busybox的/temp
- name: init2
image: busybox
command:
- wget
- "-O"
- "/temp/index1.html"
- http://www.baidu.com
volumeMounts:
- name: initdir2 # 关联volumes:-> name: initdir2
mountPath: "/temp" #挂载到init容器busybox的/temp
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: initdir1
mountPath: /usr/share/nginx/html #initdir1挂载到nginx容器的/usr/share/nginx/html
- image: busybox
name: busybox
command: [ "sleep", "3600" ]
volumeMounts:
- name: initdir2
mountPath: /tmp #initdir2挂载到busybox容器的/tmp
volumes:
- name: initdir1
emptyDir: {}
#emptyDir:
# medium: Memory #Memory表示使用基于RAM的临时文件系统tmpfs
# sizeLimit: 50Mi
- name: initdir2
#emptyDir: {}
emptyDir:
medium: Memory #Memory表示使用基于RAM的临时文件系统tmpfs
sizeLimit: 50Mi
restartPolicy: Always
(weops) [root@node201 k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-initcontainer-emptyvolume 0/2 Init:1/2 0 37s
(weops) [root@node201 k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-initcontainer-emptyvolume 0/2 PodInitializing 0 42s
(weops) [root@node201 k8s]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-initcontainer-emptyvolume 2/2 Running 0 68s
更多推荐
所有评论(0)