我使用Google Kubernetes Engine,并故意在代码中输入错误。我希望滚动更新在发现状态为const mongoose = require ('mongoose');
var url = "mongodb://localhost:27017/db1"
//connect to mongodb
mongoose.connect(url)
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
// we're connected!
var Schema = mongoose.Schema;
var Person = mongoose.model('Person', yourSchema);
// find each person with a last name matching 'Ghost', selecting the `name` and `occupation` fields
Person.findOne({ 'name.last': 'Ghost' }, 'name occupation', function (err, person) {
if (err) return handleError(err);
// Prints "Space Ghost is a talk show host".
console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation);
});
});
时会停止,但是不是。
在此page中,他们说..
Deployment控制器将自动停止错误的推出,并且 将停止按比例扩大新的ReplicaSet。这取决于 您拥有的rollingUpdate参数(特别是maxUnavailable) 指定。
但这并没有发生,仅当状态为CrashLoopBackOff
时?
下面是我的配置。
ImagePullBackOff
P.S。我已经阅读了活跃性/就绪性探针,但是我认为它不能停止滚动更新吗?还是它?
答案 0 :(得分:1)
结果是,我只需要设置minReadySeconds
,当新的副本集的状态为CrashLoopBackOff
或类似Exited with status code 1
时,它将停止滚动更新。因此,现在旧的copysetSet仍然可用并且未更新。
这是新的配置。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: volume-service
labels:
group: volume
tier: service
spec:
replicas: 4
minReadySeconds: 60
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 2
maxSurge: 2
template:
metadata:
labels:
group: volume
tier: service
spec:
containers:
- name: volume-service
image: gcr.io/example/volume-service:latest
谢谢大家的帮助!
答案 1 :(得分:0)
您引用的解释是正确的,这意味着新的copySet(出现错误的那个)将不会继续执行,但是会在其前进到maxSurge
+ {{1}的过程中停止}数。而且旧的copySet也将出现。
这是我尝试的示例:
maxUnavailable
这些是结果:
spec:
replicas: 4
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
我的新副本集将仅启动2个新Pod(NAME READY STATUS RESTARTS AGE
pod/volume-service-6bb8dd677f-2xpwn 0/1 ImagePullBackOff 0 42s
pod/volume-service-6bb8dd677f-gcwj6 0/1 ImagePullBackOff 0 42s
pod/volume-service-c98fd8d-kfff2 1/1 Running 0 59s
pod/volume-service-c98fd8d-wcjkz 1/1 Running 0 28m
pod/volume-service-c98fd8d-xvhbm 1/1 Running 0 28m
NAME DESIRED CURRENT READY AGE
replicaset.extensions/volume-service-6bb8dd677f 2 2 0 26m
replicaset.extensions/volume-service-c98fd8d 3 3 3 28m
中的1个插槽和maxUnavailable
中的1个插槽)。
旧的副本集将继续运行3个Pod(4-1 maxSurge
)。
您在unAvailable
部分中设置的两个参数是关键点,但是您也可以使用诸如rollingUpdate
,readinessProbe
,livenessProbe
,{{ 1}}。
对于他们来说,here参考。
答案 2 :(得分:0)
我同意@ Nicola_Ben -我也将考虑更改为以下设置:
<Form
layout="vertical"
size="medium"
>
<Input.Group compact>
<Form.Item label={product.productName + " : "} />
<Input addonBefore={"TestLabel"} style={{ width:"34%" }} />
</Input.Group>
</Form>
或者甚至将spec:
replicas: 4
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 <----- I want at least (4)-[1] = 3 available pods.
maxSurge: 1 <----- I want maximum (4)+[1] = 5 total running pods.
更改为maxSurge
。
这将帮助我们暴露不太可能出现的无法运行的Pod(就像我们在canary release中所做的那样)。
像@ Hana_Alaydrus 一样,建议设置0
很重要。
除此之外,有时我们需要在推出后执行更多操作。
(例如,在某些情况下,新的Pod不能正常运行,但在容器内运行的进程没有崩溃)。
有关常规调试过程的建议:
1)首先,使用以下命令暂停部署:
minReadySeconds
。
2)调试相关的pod并决定如何继续(也许我们可以继续使用新版本,也许没有)。
3)我们将不得不使用以下内容恢复部署:kubectl rollout pause deployment <name>
,因为即使我们决定使用kubectl rollout resume deployment <name>
命令(4.B)返回到先前的版本,我们也需要首先{{1} }推出。
4.A)继续使用新版本。
4.B)使用undo
返回上一版本。
以下是可视摘要(在内部单击以查看评论):