一、initcontainers
initcontainer(初始化容器)是Kubernetes中的一種特殊容器,它主要是用來初始化或者準備一些特定的環境,以便在主容器運行之前進行配置。initcontainer與主容器運行在同一個Pod中,但它會在主容器運行之前被啟動。
initcontainer與主容器共享同一個Volume和Pod的網路命名空間。
二、initcontainers spark operator
使用Spark Operator時,經常需要在Spark應用程序運行之前,準備一些環境,比如將JAR文件下載到容器內部。這時候就可以使用initcontainers。下面是部署Spark Operator時使用initcontainers的代碼示例:
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
name: pi
spec:
type: Scala
mode: cluster
image: "gcr.io/spark-operator/spark:v3.1.1"
imagePullPolicy: Always
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
sparkVersion: "3.1.1"
restartPolicy:
type: OnFailure
onFailureRetries: 3
onFailureRetryInterval: 10
onSubmissionFailureRetries: 5
onSubmissionFailureRetryInterval: 20
driver:
cores: 1
coreLimit: "1200m"
memory: "512m"
labels:
version: 3.1.1
serviceAccount: spark
InitContainers:
- name: download-files
image: busybox
command: ['sh', '-c', 'wget http://path/to/files.tgz -O - | tar xz -C /']
executor:
cores: 1
instances: 1
memory: "512m"
labels:
version: 3.1.1
InitContainers:
- name: download-files
image: busybox
command: ['sh', '-c', 'wget http://path/to/files.tgz -O - | tar xz -C /']
三、initcontainer掛載持久化
initcontainers可以掛載configMap或者secrets,以獲取在主容器中需要使用到的配置信息或者機密數據。
下面是一個掛載configMap的initcontainers的示例:
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /etc/nginx/nginx.conf
name: config-volume
subPath: nginx.conf
initContainers:
- name: config-nginx
image: busybox
command: ['sh', '-c', 'echo "server {\n listen 80;\n}" > /data/nginx.conf']
volumeMounts:
- mountPath: /data
name: config-volume
volumes:
- name: config-volume
configMap:
name: nginx-config
四、initcontainer k8s
initcontainers支持Kubernetes中大多數的存儲類型,比如emptyDir、configMap、secret和persistentVolumeClaim等。下面是一個使用emptyDir的示例:
spec:
volumes:
- name: shared-logs
emptyDir: {}
initContainers:
- name: create-volume-dir
image: busybox
command: ['sh', '-c', 'mkdir /var/shared-logs']
volumeMounts:
- mountPath: /var/shared-logs
name: shared-logs
containers:
- image: nginx
name: nginx
volumeMounts:
- mountPath: /var/log/nginx
name: shared-logs
五、initcontainer telnet
可以使用telnet來測試容器之間的網路連接。下面是使用CentOS作為示例進行測試:
spec:
containers:
- name: web
image: nginx
- name: net
image: centos
command:
- "/bin/sh"
- "-c"
- "yum install -y telnet && echo telnet nginx 80 && telnet nginx 80"
六、initcontainers怎麼更新
initcontainers的更新方式與普通容器類似,可以通過Kubernetes的kubectl命令或者Deployment進行更新。
下面是一個使用Deployment進行更新initcontainers的示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
initContainers:
- name: init1
image: busybox
command: ['sh', '-c', 'echo 123 > /tmp/test']
volumeMounts:
- name: data
mountPath: /tmp
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: http
volumeMounts:
- name: data
volumes:
- name: data
emptyDir: {}
七、initcontainer重啟
initcontainer與主容器同生共死,它們共用一個Pod,如果主容器需要重啟,那麼initcontainer也會一起重啟。
八、initcontainers skywalking
可以使用SkyWalking對initcontainer進行監控。
下面是一個使用SkyWalking監控initcontainer的示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
annotations:
"skywalking/nginx": "true"
"skywalking/init": "true"
spec:
initContainers:
- name: init1
image: busybox
command: ['sh', '-c', 'echo 123 > /tmp/test']
volumeMounts:
- name: data
mountPath: /tmp
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: http
volumeMounts:
- name: data
volumes:
- name: data
emptyDir: {}
九、initcontainer 檢測埠
可以使用curl或者nc等工具來檢測埠的可用性。
下面是一個使用nc檢測埠的initcontainers示例:
spec:
initContainers:
- name: wait-for-etcd
image: centos
command: ['sh', '-c', 'until nc -z etcd 2379; do sleep 1; done;']
containers:
- name: my-container
image: my-image
總結
通過此篇文章,我們對initcontainer有了更深入的理解。initcontainers可以在主容器運行之前,進行一些初始化或者準備工作,比如獲取configMap、secrets,掛載卷、檢測埠等。同時,initcontainers也可以使用Spark Operator進行部署,並且支持Kubernetes中的多種存儲類型。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/200282.html
微信掃一掃
支付寶掃一掃