-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
enhancement and fixes (kodekloudhub#128)
* added Note on Secrets * remove duplicate heading * added Init Containers notes * added Init Containers notes * Update 03-Storage-in-Docker.md with typo
- Loading branch information
1 parent
a301146
commit 1be2bb9
Showing
2 changed files
with
78 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
62 changes: 59 additions & 3 deletions
62
docs/05-Application-Lifecycle-Management/15.Init-Containers.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,62 @@ | ||
# Init-Containers | ||
- Take me to [Init-Containers](https://kodekloud.com/topic/init-containers/) | ||
|
||
# Init Containers | ||
- Take me to [Init-Containers](https://kodekloud.com/topic/init-containers/) | ||
|
||
In a multi-container pod, each container is expected to run a process that stays alive as long as the POD’s lifecycle. For example in the multi-container pod that we talked about earlier that has a web application and logging agent, both the containers are expected to stay alive at all times. The process running in the log agent container is expected to stay alive as long as the web application is running. If any of them fails, the POD restarts. | ||
|
||
|
||
|
||
But at times you may want to run a process that runs to completion in a container. For example a process that pulls a code or binary from a repository that will be used by the main web application. That is a task that will be run only one time when the pod is first created. Or a process that waits for an external service or database to be up before the actual application starts. That’s where initContainers comes in. | ||
|
||
|
||
|
||
An initContainer is configured in a pod like all other containers, except that it is specified inside a initContainers section, like this: | ||
|
||
|
||
|
||
```yaml | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: myapp-pod | ||
labels: | ||
app: myapp | ||
spec: | ||
containers: | ||
- name: myapp-container | ||
image: busybox:1.28 | ||
command: ['sh', '-c', 'echo The app is running! && sleep 3600'] | ||
initContainers: | ||
- name: init-myservice | ||
image: busybox | ||
command: ['sh', '-c', 'git clone <some-repository-that-will-be-used-by-application> ;'] | ||
``` | ||
When a POD is first created the initContainer is run, and the process in the initContainer must run to a completion before the real container hosting the application starts. | ||
You can configure multiple such initContainers as well, like how we did for multi-containers pod. In that case, each init container is run one at a time in sequential order. | ||
If any of the initContainers fail to complete, Kubernetes restarts the Pod repeatedly until the Init Container succeeds. | ||
```yaml | ||
apiVersion: v1 | ||
kind: Pod | ||
metadata: | ||
name: myapp-pod | ||
labels: | ||
app: myapp | ||
spec: | ||
containers: | ||
- name: myapp-container | ||
image: busybox:1.28 | ||
command: ['sh', '-c', 'echo The app is running! && sleep 3600'] | ||
initContainers: | ||
- name: init-myservice | ||
image: busybox:1.28 | ||
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] | ||
- name: init-mydb | ||
image: busybox:1.28 | ||
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;'] | ||
``` | ||
#### K8s Reference Docs | ||
- https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ | ||
- https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/ |