Align federated StatefulSet's observedGeneration semantics with its native
Signed-off-by: zhy76 <958474674@qq.com>
This commit is contained in:
parent
45d4b8ed3b
commit
d7d28eaf3b
|
@ -24,24 +24,46 @@ spec:
|
||||||
statusAggregation:
|
statusAggregation:
|
||||||
luaScript: >
|
luaScript: >
|
||||||
function AggregateStatus(desiredObj, statusItems)
|
function AggregateStatus(desiredObj, statusItems)
|
||||||
if statusItems == nil then
|
|
||||||
return desiredObj
|
|
||||||
end
|
|
||||||
if desiredObj.status == nil then
|
if desiredObj.status == nil then
|
||||||
desiredObj.status = {}
|
desiredObj.status = {}
|
||||||
end
|
end
|
||||||
if desiredObj.metadata.generation == nil then
|
if desiredObj.metadata.generation == nil then
|
||||||
desiredObj.metadata.generation = 0
|
desiredObj.metadata.generation = 0
|
||||||
end
|
end
|
||||||
generation = desiredObj.metadata.generation
|
if desiredObj.status.observedGeneration == nil then
|
||||||
replicas = 0
|
desiredObj.status.observedGeneration = 0
|
||||||
readyReplicas = 0
|
end
|
||||||
currentReplicas = 0
|
|
||||||
updatedReplicas = 0
|
-- Initialize status fields if status doest not exist
|
||||||
availableReplicas = 0
|
-- If the StatefulSet is not spread to any cluster, its status also should be aggregated
|
||||||
updatedReadyReplicas = 0
|
if statusItems == nil then
|
||||||
updateRevision = ''
|
desiredObj.status.observedGeneration = desiredObj.metadata.generation
|
||||||
currentRevision = ''
|
desiredObj.status.replicas = 0
|
||||||
|
desiredObj.status.readyReplicas = 0
|
||||||
|
desiredObj.status.currentReplicas = 0
|
||||||
|
desiredObj.status.updatedReplicas = 0
|
||||||
|
desiredObj.status.availableReplicas = 0
|
||||||
|
desiredObj.status.updatedReadyReplicas = 0
|
||||||
|
desiredObj.status.updateRevision = ''
|
||||||
|
desiredObj.status.currentRevision = ''
|
||||||
|
return desiredObj
|
||||||
|
end
|
||||||
|
|
||||||
|
local generation = desiredObj.metadata.generation
|
||||||
|
local observedGeneration = desiredObj.status.observedGeneration
|
||||||
|
local replicas = 0
|
||||||
|
local readyReplicas = 0
|
||||||
|
local currentReplicas = 0
|
||||||
|
local updatedReplicas = 0
|
||||||
|
local availableReplicas = 0
|
||||||
|
local updatedReadyReplicas = 0
|
||||||
|
local updateRevision = ''
|
||||||
|
local currentRevision = ''
|
||||||
|
local labelSelector = ''
|
||||||
|
|
||||||
|
-- Count all members that their status is updated to the latest generation
|
||||||
|
local observedResourceTemplateGenerationCount = 0
|
||||||
|
|
||||||
for i = 1, #statusItems do
|
for i = 1, #statusItems do
|
||||||
if statusItems[i].status ~= nil and statusItems[i].status.replicas ~= nil then
|
if statusItems[i].status ~= nil and statusItems[i].status.replicas ~= nil then
|
||||||
replicas = replicas + statusItems[i].status.replicas
|
replicas = replicas + statusItems[i].status.replicas
|
||||||
|
@ -67,11 +89,32 @@ spec:
|
||||||
if statusItems[i].status ~= nil and statusItems[i].status.currentRevision ~= nil and statusItems[i].status.currentRevision ~= '' then
|
if statusItems[i].status ~= nil and statusItems[i].status.currentRevision ~= nil and statusItems[i].status.currentRevision ~= '' then
|
||||||
currentRevision = statusItems[i].status.currentRevision
|
currentRevision = statusItems[i].status.currentRevision
|
||||||
end
|
end
|
||||||
if statusItems[i].status ~= nil and statusItems[i].status.observedGeneration ~= nil and statusItems[i].status.observedGeneration ~= '' then
|
|
||||||
generation = statusItems[i].status.observedGeneration
|
-- Check if the member's status is updated to the latest generation
|
||||||
|
local resourceTemplateGeneration = 0
|
||||||
|
if statusItems[i].status ~= nil and statusItems[i].status.resourceTemplateGeneration ~= nil then
|
||||||
|
resourceTemplateGeneration = statusItems[i].status.resourceTemplateGeneration
|
||||||
|
end
|
||||||
|
local memberGeneration = 0
|
||||||
|
if statusItems[i].status ~= nil and statusItems[i].status.generation ~= nil then
|
||||||
|
memberGeneration = statusItems[i].status.generation
|
||||||
|
end
|
||||||
|
local memberObservedGeneration = 0
|
||||||
|
if statusItems[i].status ~= nil and statusItems[i].status.observedGeneration ~= nil then
|
||||||
|
memberObservedGeneration = statusItems[i].status.observedGeneration
|
||||||
|
end
|
||||||
|
if resourceTemplateGeneration == generation and memberGeneration == memberObservedGeneration then
|
||||||
|
observedResourceTemplateGenerationCount = observedResourceTemplateGenerationCount + 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Update the observed generation based on the observedResourceTemplateGenerationCount
|
||||||
|
if observedResourceTemplateGenerationCount == #statusItems then
|
||||||
desiredObj.status.observedGeneration = generation
|
desiredObj.status.observedGeneration = generation
|
||||||
|
else
|
||||||
|
desiredObj.status.observedGeneration = observedGeneration
|
||||||
|
end
|
||||||
|
|
||||||
desiredObj.status.replicas = replicas
|
desiredObj.status.replicas = replicas
|
||||||
desiredObj.status.readyReplicas = readyReplicas
|
desiredObj.status.readyReplicas = readyReplicas
|
||||||
desiredObj.status.currentReplicas = currentReplicas
|
desiredObj.status.currentReplicas = currentReplicas
|
||||||
|
@ -84,8 +127,8 @@ spec:
|
||||||
end
|
end
|
||||||
statusReflection:
|
statusReflection:
|
||||||
luaScript: >
|
luaScript: >
|
||||||
function ReflectStatus (observedObj)
|
function ReflectStatus(observedObj)
|
||||||
status = {}
|
local status = {}
|
||||||
if observedObj == nil or observedObj.status == nil then
|
if observedObj == nil or observedObj.status == nil then
|
||||||
return status
|
return status
|
||||||
end
|
end
|
||||||
|
@ -98,6 +141,20 @@ spec:
|
||||||
status.currentRevision = observedObj.status.currentRevision
|
status.currentRevision = observedObj.status.currentRevision
|
||||||
status.updatedReadyReplicas = observedObj.status.updatedReadyReplicas
|
status.updatedReadyReplicas = observedObj.status.updatedReadyReplicas
|
||||||
status.observedGeneration = observedObj.status.observedGeneration
|
status.observedGeneration = observedObj.status.observedGeneration
|
||||||
|
|
||||||
|
-- handle resource generation report
|
||||||
|
if observedObj.metadata == nil then
|
||||||
|
return status
|
||||||
|
end
|
||||||
|
status.generation = observedObj.metadata.generation
|
||||||
|
|
||||||
|
if observedObj.metadata.annotations == nil then
|
||||||
|
return status
|
||||||
|
end
|
||||||
|
local resourceTemplateGeneration = tonumber(observedObj.metadata.annotations["resourcetemplate.karmada.io/generation"])
|
||||||
|
if resourceTemplateGeneration ~= nil then
|
||||||
|
status.resourceTemplateGeneration = resourceTemplateGeneration
|
||||||
|
end
|
||||||
return status
|
return status
|
||||||
end
|
end
|
||||||
healthInterpretation:
|
healthInterpretation:
|
||||||
|
|
|
@ -3,6 +3,7 @@ kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
name: sample
|
name: sample
|
||||||
namespace: test-statefulset
|
namespace: test-statefulset
|
||||||
|
generation: 1
|
||||||
spec:
|
spec:
|
||||||
replicas: 2
|
replicas: 2
|
||||||
serviceName: sample-statefulset-headless-service
|
serviceName: sample-statefulset-headless-service
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
apiVersion: apps.kruise.io/v1beta1
|
apiVersion: apps.kruise.io/v1beta1
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
metadata:
|
metadata:
|
||||||
|
annotations:
|
||||||
|
resourcetemplate.karmada.io/generation: "1"
|
||||||
name: sample
|
name: sample
|
||||||
namespace: test-statefulset
|
namespace: test-statefulset
|
||||||
generation: 1
|
generation: 1
|
||||||
|
|
|
@ -5,6 +5,8 @@ status:
|
||||||
availableReplicas: 2
|
availableReplicas: 2
|
||||||
currentReplicas: 2
|
currentReplicas: 2
|
||||||
currentRevision: sample-5675547df7
|
currentRevision: sample-5675547df7
|
||||||
|
generation: 1
|
||||||
|
resourceTemplateGeneration: 1
|
||||||
observedGeneration: 1
|
observedGeneration: 1
|
||||||
readyReplicas: 2
|
readyReplicas: 2
|
||||||
replicas: 2
|
replicas: 2
|
||||||
|
@ -19,7 +21,9 @@ status:
|
||||||
availableReplicas: 2
|
availableReplicas: 2
|
||||||
currentReplicas: 2
|
currentReplicas: 2
|
||||||
currentRevision: sample-5675547df7
|
currentRevision: sample-5675547df7
|
||||||
|
generation: 1
|
||||||
observedGeneration: 1
|
observedGeneration: 1
|
||||||
|
resourceTemplateGeneration: 1
|
||||||
readyReplicas: 2
|
readyReplicas: 2
|
||||||
replicas: 2
|
replicas: 2
|
||||||
updateRevision: sample-5675547df7
|
updateRevision: sample-5675547df7
|
||||||
|
|
Loading…
Reference in New Issue