Merge pull request #3366 from yike21/bundle-kruise-resources-BroadcastJob

add customizations for apps.krusie.io/v1alpha1/BroadcastJob
This commit is contained in:
karmada-bot 2023-04-14 16:42:02 +08:00 committed by GitHub
commit 8639977d2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 285 additions and 0 deletions

View File

@ -0,0 +1,161 @@
apiVersion: config.karmada.io/v1alpha1
kind: ResourceInterpreterCustomization
metadata:
name: declarative-configuration-broadcastjob
spec:
target:
apiVersion: apps.kruise.io/v1alpha1
kind: BroadcastJob
customizations:
replicaResource:
luaScript: >
local kube = require("kube")
function GetReplicas(obj)
replica = 1
if obj.spec.parallelism ~= nil then
replica = obj.spec.parallelism
end
requirement = kube.accuratePodRequirements(obj.spec.template)
return replica, requirement
end
replicaRevision:
luaScript: >
function ReviseReplica(obj, replica)
obj.spec.parallelism = replica
return obj
end
healthInterpretation:
luaScript: >
function InterpretHealth(observedObj)
if observedObj.status.desired == 0 or observedObj.status.failed ~= 0 then
return false
end
if observedObj.status.succeeded == 0 and observedObj.status.active == 0 then
return false
end
return true
end
statusAggregation:
luaScript: >
function AggregateStatus(desiredObj, statusItems)
if statusItems == nil then
return desiredObj
end
if desiredObj.status == nil then
desiredObj.status = {}
end
if desiredObj.status.conditions == nil then
desiredObj.status.conditions = {}
end
conditions = {}
active = 0
succeeded = 0
failed = 0
desired = 0
phase = ''
successfulJobs = 0
completionTime = {}
jobFailed = {}
type = ''
conditionsIndex = 0
for i = 1, #statusItems do
if statusItems[i].status ~= nil and statusItems[i].status.active ~= nil then
active = active + statusItems[i].status.active
end
if statusItems[i].status ~= nil and statusItems[i].status.succeeded ~= nil then
succeeded = succeeded + statusItems[i].status.succeeded
end
if statusItems[i].status ~= nil and statusItems[i].status.failed ~= nil then
failed = failed + statusItems[i].status.failed
end
if statusItems[i].status ~= nil and statusItems[i].status.desired ~= nil then
desired = desired + statusItems[i].status.desired
end
if statusItems[i].status ~= nil and statusItems[i].status.phase ~= nil then
phase = statusItems[i].status.phase
end
if statusItems[i].status ~= nil and statusItems[i].status.completionTime ~= nil then
completionTime = statusItems[i].status.completionTime
end
if statusItems[i].status ~= nil and statusItems[i].status.conditions ~= nil then
for conditionIndex = 1, #statusItems[i].status.conditions do
if statusItems[i].status.conditions[conditionIndex].type == 'Complete' and statusItems[i].status.conditions[conditionIndex].status == 'True' then
type = statusItems[i].status.conditions[conditionIndex].type
break
end
if statusItems[i].status.conditions[conditionIndex].type == 'Failed' and statusItems[i].status.conditions[conditionIndex].status == 'True' then
type = statusItems[i].status.conditions[conditionIndex].type
break
end
end
end
if type == 'Complete' then
successfulJobs = successfulJobs + 1
end
if type == 'Failed' then
jobFailedNextIndex = #jobFailed + 1
jobFailed[jobFailedNextIndex] = statusItems[i].clusterName
end
end
if #jobFailed > 0 then
condition = {}
condition.type = 'Failed'
condition.status = 'True'
condition.reason = 'JobFailed'
condition.message = 'Job executed failed in member clusters: '
for i = 1, #jobFailed - 1 do
condition.message = condition.message..jobFailed[i]..', '
end
condition.message = condition.message..jobFailed[#jobFailed]
conditionsIndex = conditionsIndex + 1
conditions[conditionsIndex] = condition
end
if successfulJobs == #statusItems and successfulJobs > 0 then
condition = {}
condition.type = 'Completed'
condition.status = 'True'
condition.reason = 'Completed'
condition.message = 'Job completed'
conditionsIndex = conditionsIndex + 1
conditions[conditionsIndex] = condition
end
desiredObj.status.active = active
desiredObj.status.succeeded = succeeded
desiredObj.status.failed = failed
desiredObj.status.desired = desired
desiredObj.status.phase = phase
desiredObj.status.conditions = conditions
return desiredObj
end
retention:
luaScript: >
function Retain(desiredObj, observedObj)
if observedObj.spec.template.metadata ~= nil and observedObj.spec.template.metadata.labels ~= nil then
desiredObj.spec.template.metadata.labels = observedObj.spec.template.metadata.labels
return desiredObj
end
end
statusReflection:
luaScript: >
function ReflectStatus (observedObj)
status = {}
if observedObj == nil or observedObj.status == nil then
return status
end
status.conditions = observedObj.status.conditions
status.startTime = observedObj.status.startTime
status.completionTime = observedObj.status.completionTime
status.active = observedObj.status.active
status.succeeded = observedObj.status.succeeded
status.failed = observedObj.status.failed
status.desired = observedObj.status.desired
status.phase = observedObj.status.phase
return status
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,36 @@
apiVersion: apps.kruise.io/v1alpha1
kind: BroadcastJob
metadata:
labels:
app: sample
name: sample
namespace: test-bcj
spec:
parallelism: 1
template:
metadata:
labels:
app: sample
spec:
restartPolicy: Never
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
completionPolicy:
type: Always
activeDeadlineSeconds: 10

View File

@ -0,0 +1,51 @@
apiVersion: apps.kruise.io/v1alpha1
kind: BroadcastJob
metadata:
labels:
app: sample
name: sample
namespace: test-bcj
spec:
parallelism: 1
template:
metadata:
labels:
app: sample
spec:
restartPolicy: Never
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
completionPolicy:
type: Always
activeDeadlineSeconds: 10
status:
active: 0
completionTime: "2023-04-06T15:01:47Z"
conditions:
- lastProbeTime: "2023-04-06T15:01:47Z"
lastTransitionTime: "2023-04-06T15:01:47Z"
message: Job test-bcj/sample was active longer than specified deadline
reason: Failed
status: "True"
type: Failed
desired: 1
failed: 1
phase: failed
startTime: "2023-04-06T15:01:37Z"
succeeded: 0

View File

@ -0,0 +1,37 @@
applied: true
clusterName: member1
health: Healthy
status:
active: 0
completionTime: "2023-04-06T15:01:47Z"
conditions:
- lastProbeTime: "2023-04-06T15:01:47Z"
lastTransitionTime: "2023-04-06T15:01:47Z"
message: Job test-bcj/sample was active longer than specified deadline
reason: Failed
status: "True"
type: Failed
desired: 1
failed: 1
phase: failed
startTime: "2023-04-06T15:01:37Z"
succeeded: 0
---
applied: true
clusterName: member3
health: Healthy
status:
active: 0
completionTime: "2023-04-06T15:01:47Z"
conditions:
- lastProbeTime: "2023-04-06T15:01:47Z"
lastTransitionTime: "2023-04-06T15:01:47Z"
message: Job test-bcj/sample was active longer than specified deadline
reason: Failed
status: "True"
type: Failed
desired: 1
failed: 1
phase: failed
startTime: "2023-04-06T15:01:37Z"
succeeded: 0