Add customizations for apps.krusie.io/v1alpha1/CloneSet

Signed-off-by: yike21 <yike21@qq.com>
This commit is contained in:
yike21 2023-03-27 22:19:40 +08:00
parent 42bf1bcddb
commit 217657af36
4 changed files with 235 additions and 0 deletions

View File

@ -0,0 +1,125 @@
apiVersion: config.karmada.io/v1alpha1
kind: ResourceInterpreterCustomization
metadata:
name: declarative-configuration-cloneset
spec:
target:
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
customizations:
replicaResource:
luaScript: >
local kube = require("kube")
function GetReplicas(obj)
replica = obj.spec.replicas
requirement = kube.accuratePodRequirements(obj.spec.template)
return replica, requirement
end
replicaRevision:
luaScript: >
function ReviseReplica(obj, desiredReplica)
obj.spec.replicas = desiredReplica
return obj
end
statusAggregation:
luaScript: >
function AggregateStatus(desiredObj, statusItems)
if statusItems == nil then
return desiredObj
end
if desiredObj.status == nil then
desiredObj.status = {}
end
if desiredObj.metadata.generation == nil then
desiredObj.metadata.generation = 0
end
generation = desiredObj.metadata.generation
replicas = 0
updatedReplicas = 0
readyReplicas = 0
availableReplicas = 0
updatedReadyReplicas = 0
expectedUpdatedReplicas = 0
updateRevision = ''
currentRevision = ''
for i = 1, #statusItems do
if statusItems[i].status ~= nil and statusItems[i].status.replicas ~= nil then
replicas = replicas + statusItems[i].status.replicas
end
if statusItems[i].status ~= nil and statusItems[i].status.updatedReplicas ~= nil then
updatedReplicas = updatedReplicas + statusItems[i].status.updatedReplicas
end
if statusItems[i].status ~= nil and statusItems[i].status.readyReplicas ~= nil then
readyReplicas = readyReplicas + statusItems[i].status.readyReplicas
end
if statusItems[i].status ~= nil and statusItems[i].status.availableReplicas ~= nil then
availableReplicas = availableReplicas + statusItems[i].status.availableReplicas
end
if statusItems[i].status ~= nil and statusItems[i].status.updatedReadyReplicas ~= nil then
updatedReadyReplicas = updatedReadyReplicas + statusItems[i].status.updatedReadyReplicas
end
if statusItems[i].status ~= nil and statusItems[i].status.expectedUpdatedReplicas ~= nil then
expectedUpdatedReplicas = expectedUpdatedReplicas + statusItems[i].status.expectedUpdatedReplicas
end
if statusItems[i].status ~= nil and statusItems[i].status.updateRevision ~= nil and statusItems[i].status.updateRevision ~= '' then
updateRevision = statusItems[i].status.updateRevision
end
if statusItems[i].status ~= nil and statusItems[i].status.currentRevision ~= nil and statusItems[i].status.currentRevision ~= '' then
currentRevision = statusItems[i].status.currentRevision
end
if statusItems[i].status ~= nil and statusItems[i].status.observedGeneration ~= nil and statusItems[i].status.observedGeneration ~= '' then
generation = statusItems[i].status.observedGeneration
end
end
desiredObj.status.observedGeneration = generation
desiredObj.status.replicas = replicas
desiredObj.status.updatedReplicas = updatedReplicas
desiredObj.status.readyReplicas = readyReplicas
desiredObj.status.availableReplicas = availableReplicas
desiredObj.status.updatedReadyReplicas = updatedReadyReplicas
desiredObj.status.expectedUpdatedReplicas = expectedUpdatedReplicas
desiredObj.status.updateRevision = updateRevision
desiredObj.status.currentRevision = currentRevision
return desiredObj
end
statusReflection:
luaScript: >
function ReflectStatus (observedObj)
status = {}
if observedObj == nil or observedObj.status == nil then
return status
end
status.replicas = observedObj.status.replicas
status.updatedReplicas = observedObj.status.updatedReplicas
status.readyReplicas = observedObj.status.readyReplicas
status.availableReplicas = observedObj.status.availableReplicas
status.updatedReadyReplicas = observedObj.status.updatedReadyReplicas
status.expectedUpdatedReplicas = observedObj.status.expectedUpdatedReplicas
status.updateRevision = observedObj.status.updateRevision
status.currentRevision = observedObj.status.currentRevision
status.observedGeneration = observedObj.status.observedGeneration
return status
end
healthInterpretation:
luaScript: >
function InterpretHealth(observedObj)
if observedObj.status.observedGeneration ~= observedObj.metadata.generation then
return false
end
if observedObj.spec.replicas ~= nil then
if observedObj.status.updatedReplicas < observedObj.spec.replicas then
return false
end
end
if observedObj.status.availableReplicas < observedObj.status.updatedReplicas then
return false
end
return true
end
dependencyInterpretation:
luaScript: >
local kube = require("kube")
function GetDependencies(desiredObj)
refs = kube.getPodDependencies(desiredObj.spec.template, desiredObj.metadata.namespace)
return refs
end

View File

@ -0,0 +1,35 @@
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
metadata:
labels:
app: sample
name: sample
namespace: test-cloneset
spec:
replicas: 4
selector:
matchLabels:
app: sample
template:
metadata:
labels:
app: sample
spec:
volumes:
- name: configmap
configMap:
name: my-sample-config
containers:
- name: nginx
image: nginx:alpine
env:
- name: logData
valueFrom:
configMapKeyRef:
name: mysql-config
key: log
- name: lowerData
valueFrom:
configMapKeyRef:
name: mysql-config
key: lower

View File

@ -0,0 +1,48 @@
apiVersion: apps.kruise.io/v1alpha1
kind: CloneSet
metadata:
labels:
app: sample
name: sample
namespace: test-cloneset
generation: 1
spec:
replicas: 2
selector:
matchLabels:
app: sample
template:
metadata:
labels:
app: sample
spec:
volumes:
- name: configmap
configMap:
name: my-sample-config
containers:
- name: nginx
image: nginx:alpine
env:
- name: logData
valueFrom:
configMapKeyRef:
name: mysql-config
key: log
- name: lowerData
valueFrom:
configMapKeyRef:
name: mysql-config
key: lower
status:
availableReplicas: 2
collisionCount: 0
currentRevision: sample-59df6bd888
expectedUpdatedReplicas: 2
labelSelector: app=sample
observedGeneration: 1
readyReplicas: 2
replicas: 2
updateRevision: sample-59df6bd888
updatedReadyReplicas: 2
updatedReplicas: 2

View File

@ -0,0 +1,27 @@
applied: true
clusterName: member1
health: Healthy
status:
availableReplicas: 2
currentRevision: sample-59df6bd888
expectedUpdatedReplicas: 2
observedGeneration: 1
readyReplicas: 2
replicas: 2
updateRevision: sample-59df6bd888
updatedReadyReplicas: 2
updatedReplicas: 2
---
applied: true
clusterName: member3
health: Healthy
status:
availableReplicas: 2
currentRevision: sample-59df6bd888
expectedUpdatedReplicas: 2
observedGeneration: 1
readyReplicas: 2
replicas: 2
updateRevision: sample-59df6bd888
updatedReadyReplicas: 2
updatedReplicas: 2