我正在玩这个:http://kubernetes.io/docs/user-guide/deployments/在我的基础设施中.我有一些部署,我需要复制品 - 但我有一些我只需要在部署中的一个副本 - 但有一个简单的方法来更改图像版本是伟大的和必需的.
所以我试着看看如果你在只有1个副本的部署上运行一个损坏的更新会发生什么 - 如果我们执行以下操作(来自上面的文档):
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
如果我们再运行 kubectl create -f nginx-deployment.yaml
我们看到3个健康运行的复制品.
如果我们然后将上面的文件更改replicas: 3为replicas: 1并运行apply命令:kubectl apply -f nginx-deployment.yaml- 我们看到1个健康的副本.
现在 - 如果我们改成image: nginx:1.7.9类似的东西image: nginx:1.7.9broken- 然后运行,kubectl apply -f nginx-deployment.yaml我们会看到类似这样的东西:
$ kubectl get rs
NAME DESIRED CURRENT AGE …Run Code Online (Sandbox Code Playgroud) 我一直在使用init-containers,因为它们变得可用并且发现它们非常有用.我的核心映像(下面作为web-dev)没有太大变化,但我的init-container映像(下面作为web-data-dev)确实经常更改.
init-container使用带有版本号的容器映像.我将此版本号更改为最新值,然后执行kubectl apply -f deployment.yaml
例如,在运行kubectl apply之前,我将eu.gcr.io/project/web-data-dev:187更改为eu.gcr.io/project/web-data-dev:188.
然而,当我这样做时,没有发生部署,如果我对init-container使用的映像进行任何更改,部署仍然不会发生.我认为这是因为没有检测到init-container更改.
然后我试图在图像字段中放入一些垃圾,如下所示:"image":"thisIsNotAnImage"并再次运行kubectl apply -f,但仍未应用更新.
我的问题是 - 如何使用kubectl apply -f检测init-container中的图像标签更改?我做错了什么,这是一个错误,还是这还没有实现,因为init-containers是Alpha?
完整部署YAML如下.
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 1
strategy:
rollingUpdate:
maxUnavailable: 0
template:
metadata:
labels:
app: web
tier: frontend
annotations:
pod.alpha.kubernetes.io/init-containers: '[
{
"name": "initialiser1",
"image": "eu.gcr.io/project/web-data-dev:187",
"command": ["cp", "-r", "/data-in/", "/opt/"],
"volumeMounts": [
{
"name": "file-share",
"mountPath": "/opt/"
}
]
}
]'
spec:
containers:
- image: eu.gcr.io/project/web-dev:20
name: web
resources:
requests:
cpu: 10m …Run Code Online (Sandbox Code Playgroud)