Bab*_*med 1 containers kubernetes
我注意到在部署文件中有两个容器字段,例如initContainers和containers,对我来说看起来很困惑,我在互联网上搜索但无法理解。谁能告诉我之间的差异initContainers和containers以及如何使用它们放在一起?
例如
containers:
- name: php
image: php:7-fpm
volumeMounts:
- name: dir
mountPath: /dir
initContainers:
- name: install
image: busybox
volumeMounts:
- name: dir
mountPath: /dir
command:
- wget
- "-O"
- "/dir/index.php"
- https://raw.githubusercontent.com/videofalls/demo/master/index.php
Run Code Online (Sandbox Code Playgroud)
这真的很可观,并提前致谢!!
关于容器:
容器是一种用于将应用程序的(已编译)代码及其在运行时所需的依赖项打包的技术。您运行的每个容器都是可重复的;包含依赖项的标准化意味着无论您在何处运行它都会获得相同的行为。
Init 容器与普通容器完全一样,除了:
- Init 容器总是在容器执行之前运行到完成。
- 每个 initContainer必须在下一个开始之前成功完成。
- 如果 Pod 的 init 容器失败,Kubernetes 会反复重启 Pod,直到 init 容器成功。但是,如果 Pod 的
restartPolicy值为 Never,Kubernetes 不会重启 Pod。
总结:
Containers托管您的 dockerized 应用程序,initContainer运行需要在主容器执行之前运行的任务。
一个简单的例子是您提供的代码:
index.html始终更新的内容,而不必更改 pod 清单本身。initContainer来获取更新index.php并添加到容器中。volume参数修复了您的 yaml以添加emptyDir将保存下载的文件并将其更改mountPath为默认 html 文件夹的参数/var/www/html:apiVersion: v1
kind: Pod
metadata:
name: php-updated
spec:
containers:
- name: php
image: php:7-fpm
volumeMounts:
- name: dir
mountPath: /var/www/html/
initContainers:
- name: install
image: busybox
volumeMounts:
- name: dir
mountPath: /var/www/html/
command:
- wget
- "-O"
- "/var/www/html/index.php"
- https://raw.githubusercontent.com/videofalls/demo/master/index.php
volumes:
- name: dir
emptyDir: {}
Run Code Online (Sandbox Code Playgroud)
概念验证:
$ kubectl apply -f php.yaml
pod/php-updated created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
php-updated 1/1 Running 0 3s
$ kubectl exec -it php-updated -- /bin/bash
root@php-updated:/var/www/html# cat index.php
<?php
echo 'Demo Test';
Run Code Online (Sandbox Code Playgroud)
initContainer在 pod 之前运行,将文件下载到与 PHP 服务器共享的挂载卷Container。注意:上面的 webserver 没有完全功能,因为完全php-fpm 部署有点复杂,它不是这个问题的核心,所以我会留下这个教程:PHP-FPM、Nginx、Kubernetes 和 Docker
有人可能会争辩说这index.html不是 Pod 初始化的关键文件,并且可以在 Pod 执行期间使用替换,Command所以我会在这里留下我给出的答案,resolv.conf即使在 Pod 重新启动之后,我也会在 Pod 初始化之前持续更改:DNS Config is Skipped in GKE。
另一个很好的用法initContainer是让 pod 在初始化之前等待集群中的另一个资源准备就绪。
initContainer调用的 pod,init-mydb它在允许容器启动之前等待并监视调用mydb处于开启running状态的服务myapp-container,想象一下myapp-container是一个需要数据库连接才能执行的应用程序,否则它会反复失败。再生产:
my-app.yaml:apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: my-app
name: my-app
spec:
replicas: 2
selector:
matchLabels:
run: my-app
template:
metadata:
labels:
run: my-app
spec:
restartPolicy: Always
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
Run Code Online (Sandbox Code Playgroud)
$ kubectl apply -f my-app.yaml
deployment.apps/my-app created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-app-6b4fb4958f-44ds7 0/1 Init:0/1 0 4s
my-app-6b4fb4958f-s7wmr 0/1 Init:0/1 0 4s
Run Code Online (Sandbox Code Playgroud)
Init:0/1等待状态,等待 init 容器的完成。initContainer等待的服务running:apiVersion: v1
kind: Service
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9377
Run Code Online (Sandbox Code Playgroud)
$ kubectl apply -f mydb-svc.yaml
service/mydb created
$ kubectl get pods -w
NAME READY STATUS RESTARTS AGE
my-app-6b4fb4958f-44ds7 0/1 Init:0/1 0 91s
my-app-6b4fb4958f-s7wmr 0/1 Init:0/1 0 91s
my-app-6b4fb4958f-s7wmr 0/1 PodInitializing 0 93s
my-app-6b4fb4958f-44ds7 0/1 PodInitializing 0 94s
my-app-6b4fb4958f-s7wmr 1/1 Running 0 94s
my-app-6b4fb4958f-44ds7 1/1 Running 0 95s
^C
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/my-app-6b4fb4958f-44ds7 1/1 Running 0 99s
pod/my-app-6b4fb4958f-s7wmr 1/1 Running 0 99s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mydb ClusterIP 10.100.106.67 <none> 80/TCP 14s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-app 2/2 2 2 99s
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-app-6b4fb4958f 2 2 2 99s
Run Code Online (Sandbox Code Playgroud)
最后我会给你留下一些关于如何使用的例子InitContainers:
如果您有任何问题,请在评论中告诉我!
| 归档时间: |
|
| 查看次数: |
850 次 |
| 最近记录: |