使用Kubernetes 1.7版本,通过 “kubectl apply” 命令重新创建初始化容器
首先
在Kubernetes中有一个名为init container的功能。init container可以定义在pod启动之前运行的容器,在创建pod之前,例如可以将静态文件(如资产)存储在共享卷中,并使用nginx进行分发。然而,在Kubernetes的1.8版本之前,存在一个问题,即在更改配置并重新应用后,init container不会被重新创建。
解决方案 (Solution)
只需提供一种选项,以下是对原文的汉语释义:
在该问题中,可以通过在注释部分中添加 pod.alpha.kubernetes.io/init-containers: null 和 pod.beta.kubernetes.io/init-containers: null 来解决。
参考链接:https://github.com/kubernetes/kubernetes/issues/47264
举个例子的话,会像下面这样的感觉。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
annotations:
pod.alpha.kubernetes.io/init-containers: null
pod.beta.kubernetes.io/init-containers: null
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html
# These containers are run during pod initialization
initContainers:
- name: install
image: busybox
command:
- wget
- "-O"
- "/work-dir/index.html"
- http://kubernetes.io
volumeMounts:
- name: workdir
mountPath: "/work-dir"
dnsPolicy: Default
volumes:
- name: workdir
emptyDir: {}
顺便说一句,如果处于这个状态,执行”kubectl apply”命令时会触发验证错误,可以通过添加”–validate=false”选项来避免。根据貌似kubernetes1.8已经解决了这个问题,所以如果使用最新的集群,则不需要上述的解决方案。