|
1255 | 1255 | "additionalProperties": false,
|
1256 | 1256 | "type": "object"
|
1257 | 1257 | },
|
| 1258 | + "DynamicNodePool": { |
| 1259 | + "properties": { |
| 1260 | + "name": { |
| 1261 | + "type": "string", |
| 1262 | + "description": "Name is the name of this NodePool" |
| 1263 | + }, |
| 1264 | + "requirements": { |
| 1265 | + "items": { |
| 1266 | + "$ref": "#/$defs/Requirement" |
| 1267 | + }, |
| 1268 | + "type": "array", |
| 1269 | + "description": "Requirements filter the types of nodes that can be provisioned by this pool.\nAll requirements must be met for a node type to be eligible." |
| 1270 | + }, |
| 1271 | + "taints": { |
| 1272 | + "items": { |
| 1273 | + "$ref": "#/$defs/KubeletJoinTaint" |
| 1274 | + }, |
| 1275 | + "type": "array", |
| 1276 | + "description": "Taints are the taints to apply to the nodes in this pool." |
| 1277 | + }, |
| 1278 | + "nodeLabels": { |
| 1279 | + "additionalProperties": { |
| 1280 | + "type": "string" |
| 1281 | + }, |
| 1282 | + "type": "object", |
| 1283 | + "description": "NodeLabels are the labels to apply to the nodes in this pool." |
| 1284 | + }, |
| 1285 | + "limits": { |
| 1286 | + "additionalProperties": { |
| 1287 | + "type": "string" |
| 1288 | + }, |
| 1289 | + "type": "object", |
| 1290 | + "description": "Limits specify the maximum resources that can be provisioned by this node pool,\nmapping to the 'limits' field in Karpenter's NodePool API." |
| 1291 | + }, |
| 1292 | + "disruption": { |
| 1293 | + "$ref": "#/$defs/DynamicNodePoolDisruption", |
| 1294 | + "description": "Disruption contains the parameters that relate to Karpenter's disruption logic" |
| 1295 | + }, |
| 1296 | + "terminationGracePeriod": { |
| 1297 | + "type": "string", |
| 1298 | + "description": "TerminationGracePeriod is the maximum duration the controller will wait before forcefully deleting the pods on a node, measured from when deletion is first initiated.\n\nWarning: this feature takes precedence over a Pod's terminationGracePeriodSeconds value, and bypasses any blocked PDBs or the karpenter.sh/do-not-disrupt annotation.\n\nThis field is intended to be used by cluster administrators to enforce that nodes can be cycled within a given time period.\nWhen set, drifted nodes will begin draining even if there are pods blocking eviction. Draining will respect PDBs and the do-not-disrupt annotation until the TGP is reached.\n\nKarpenter will preemptively delete pods so their terminationGracePeriodSeconds align with the node's terminationGracePeriod.\nIf a pod would be terminated without being granted its full terminationGracePeriodSeconds prior to the node timeout,\nthat pod will be deleted at T = node timeout - pod terminationGracePeriodSeconds.\n\nThe feature can also be used to allow maximum time limits for long-running jobs which can delay node termination with preStop hooks.\nDefaults to 30s. Set to Never to wait indefinitely for pods to be drained." |
| 1299 | + }, |
| 1300 | + "expireAfter": { |
| 1301 | + "type": "string", |
| 1302 | + "description": "The amount of time a Node can live on the cluster before being removed" |
| 1303 | + }, |
| 1304 | + "weight": { |
| 1305 | + "type": "integer", |
| 1306 | + "description": "Weight is the weight of this node pool." |
| 1307 | + } |
| 1308 | + }, |
| 1309 | + "additionalProperties": false, |
| 1310 | + "type": "object", |
| 1311 | + "required": [ |
| 1312 | + "name" |
| 1313 | + ] |
| 1314 | + }, |
| 1315 | + "DynamicNodePoolDisruption": { |
| 1316 | + "properties": { |
| 1317 | + "consolidateAfter": { |
| 1318 | + "type": "string", |
| 1319 | + "description": "ConsolidateAfter is the duration the controller will wait\nbefore attempting to terminate nodes that are underutilized.\nRefer to ConsolidationPolicy for how underutilization is considered." |
| 1320 | + }, |
| 1321 | + "consolidationPolicy": { |
| 1322 | + "type": "string", |
| 1323 | + "description": "ConsolidationPolicy describes which nodes Karpenter can disrupt through its consolidation\nalgorithm. This policy defaults to \"WhenEmptyOrUnderutilized\" if not specified" |
| 1324 | + }, |
| 1325 | + "budgets": { |
| 1326 | + "items": { |
| 1327 | + "$ref": "#/$defs/DynamicNodePoolDisruptionBudget" |
| 1328 | + }, |
| 1329 | + "type": "array", |
| 1330 | + "description": "Budgets is a list of Budgets.\nIf there are multiple active budgets, Karpenter uses\nthe most restrictive value. If left undefined,\nthis will default to one budget with a value to 10%." |
| 1331 | + } |
| 1332 | + }, |
| 1333 | + "additionalProperties": false, |
| 1334 | + "type": "object" |
| 1335 | + }, |
| 1336 | + "DynamicNodePoolDisruptionBudget": { |
| 1337 | + "properties": { |
| 1338 | + "nodes": { |
| 1339 | + "type": "string", |
| 1340 | + "description": "Nodes dictates the maximum number of NodeClaims owned by this NodePool\nthat can be terminating at once. This is calculated by counting nodes that\nhave a deletion timestamp set, or are actively being deleted by Karpenter.\nThis field is required when specifying a budget." |
| 1341 | + }, |
| 1342 | + "schedule": { |
| 1343 | + "type": "string", |
| 1344 | + "description": "Schedule specifies when a budget begins being active, following\nthe upstream cronjob syntax. If omitted, the budget is always active.\nTimezones are not supported." |
| 1345 | + }, |
| 1346 | + "duration": { |
| 1347 | + "type": "string", |
| 1348 | + "description": "Duration determines how long a Budget is active since each Schedule hit.\nOnly minutes and hours are accepted, as cron does not work in seconds.\nIf omitted, the budget is always active.\nThis is required if Schedule is set." |
| 1349 | + } |
| 1350 | + }, |
| 1351 | + "additionalProperties": false, |
| 1352 | + "type": "object" |
| 1353 | + }, |
1258 | 1354 | "EnableAutoSwitchWithPatches": {
|
1259 | 1355 | "properties": {
|
1260 | 1356 | "enabled": {
|
|
3547 | 3643 | "joinNode": {
|
3548 | 3644 | "$ref": "#/$defs/JoinConfiguration",
|
3549 | 3645 | "description": "JoinNode holds configuration specifically used during joining the node (see \"kubeadm join\")."
|
| 3646 | + }, |
| 3647 | + "nodePools": { |
| 3648 | + "$ref": "#/$defs/PrivateNodesNodePools", |
| 3649 | + "description": "NodePools stores karpenter node pool configuration" |
| 3650 | + }, |
| 3651 | + "tunnel": { |
| 3652 | + "$ref": "#/$defs/PrivateNodesTunnel", |
| 3653 | + "description": "Tunnel holds configuration for the private nodes tunnel. This can be used to connect the private nodes to the control plane or\nconnect the private nodes to each other if they are not running in the same network. Platform connection is required for the tunnel to work." |
3550 | 3654 | }
|
3551 | 3655 | },
|
3552 | 3656 | "additionalProperties": false,
|
3553 | 3657 | "type": "object",
|
3554 | 3658 | "description": "PrivateNodes enables private nodes for vCluster."
|
3555 | 3659 | },
|
| 3660 | + "PrivateNodesNodePools": { |
| 3661 | + "properties": { |
| 3662 | + "static": { |
| 3663 | + "items": { |
| 3664 | + "$ref": "#/$defs/StaticNodePool" |
| 3665 | + }, |
| 3666 | + "type": "array", |
| 3667 | + "description": "Static defines static node pools. Static node pools have a fixed size and are not scaled automatically." |
| 3668 | + }, |
| 3669 | + "dynamic": { |
| 3670 | + "items": { |
| 3671 | + "$ref": "#/$defs/DynamicNodePool" |
| 3672 | + }, |
| 3673 | + "type": "array", |
| 3674 | + "description": "Dynamic defines dynamic node pools. Dynamic node pools are scaled automatically based on the requirements within the cluster.\nKarpenter is used under the hood to handle the scheduling of the nodes." |
| 3675 | + } |
| 3676 | + }, |
| 3677 | + "additionalProperties": false, |
| 3678 | + "type": "object", |
| 3679 | + "description": "PrivateNodesNodePools defines node pools" |
| 3680 | + }, |
| 3681 | + "PrivateNodesTunnel": { |
| 3682 | + "properties": { |
| 3683 | + "enabled": { |
| 3684 | + "type": "boolean", |
| 3685 | + "description": "Enabled defines if the private nodes tunnel should be enabled." |
| 3686 | + }, |
| 3687 | + "nodeToNode": { |
| 3688 | + "$ref": "#/$defs/PrivateNodesTunnelNodeToNode", |
| 3689 | + "description": "NodeToNode holds configuration for the node to node tunnel. This can be used to connect the private nodes to each other if they are not running in the same network." |
| 3690 | + } |
| 3691 | + }, |
| 3692 | + "additionalProperties": false, |
| 3693 | + "type": "object" |
| 3694 | + }, |
| 3695 | + "PrivateNodesTunnelNodeToNode": { |
| 3696 | + "properties": { |
| 3697 | + "enabled": { |
| 3698 | + "type": "boolean", |
| 3699 | + "description": "Enabled defines if the node to node tunnel should be enabled." |
| 3700 | + } |
| 3701 | + }, |
| 3702 | + "additionalProperties": false, |
| 3703 | + "type": "object" |
| 3704 | + }, |
3556 | 3705 | "RBAC": {
|
3557 | 3706 | "properties": {
|
3558 | 3707 | "role": {
|
|
3723 | 3872 | "additionalProperties": false,
|
3724 | 3873 | "type": "object"
|
3725 | 3874 | },
|
| 3875 | + "Requirement": { |
| 3876 | + "properties": { |
| 3877 | + "property": { |
| 3878 | + "type": "string", |
| 3879 | + "description": "Property is the property on the node type to select." |
| 3880 | + }, |
| 3881 | + "operator": { |
| 3882 | + "type": "string", |
| 3883 | + "description": "Operator is the comparison operator, such as \"In\", \"NotIn\", \"Exists\". If empty, defaults to \"In\"." |
| 3884 | + }, |
| 3885 | + "values": { |
| 3886 | + "items": { |
| 3887 | + "type": "string" |
| 3888 | + }, |
| 3889 | + "type": "array", |
| 3890 | + "description": "Values is the list of values to use for comparison. This is mutually exclusive with value." |
| 3891 | + }, |
| 3892 | + "value": { |
| 3893 | + "type": "string", |
| 3894 | + "description": "Value is the value to use for comparison. This is mutually exclusive with values." |
| 3895 | + } |
| 3896 | + }, |
| 3897 | + "additionalProperties": false, |
| 3898 | + "type": "object", |
| 3899 | + "required": [ |
| 3900 | + "property" |
| 3901 | + ], |
| 3902 | + "description": "KarpenterRequirement defines a scheduling requirement for a dynamic node pool." |
| 3903 | + }, |
3726 | 3904 | "ResolveDNS": {
|
3727 | 3905 | "properties": {
|
3728 | 3906 | "hostname": {
|
|
3993 | 4171 | "type": "string",
|
3994 | 4172 | "description": "Bundle is a path to a Kubernetes bundle to use for the standalone mode. If empty, will use the bundleRepository to download the bundle."
|
3995 | 4173 | },
|
| 4174 | + "nodes": { |
| 4175 | + "$ref": "#/$defs/StandaloneNodes", |
| 4176 | + "description": "Nodes is a list of nodes to deploy for standalone mode." |
| 4177 | + }, |
3996 | 4178 | "joinNode": {
|
3997 | 4179 | "$ref": "#/$defs/StandaloneJoinNode",
|
3998 | 4180 | "description": "JoinNode holds configuration for the standalone control plane node."
|
|
4051 | 4233 | "additionalProperties": false,
|
4052 | 4234 | "type": "object"
|
4053 | 4235 | },
|
| 4236 | + "StandaloneNodes": { |
| 4237 | + "properties": { |
| 4238 | + "quantity": { |
| 4239 | + "type": "integer", |
| 4240 | + "description": "Quantity is the number of nodes to deploy for standalone mode." |
| 4241 | + }, |
| 4242 | + "requirements": { |
| 4243 | + "items": { |
| 4244 | + "$ref": "#/$defs/Requirement" |
| 4245 | + }, |
| 4246 | + "type": "array", |
| 4247 | + "description": "Requirements filter the types of nodes that can be provisioned by this pool.\nAll requirements must be met for a node type to be eligible." |
| 4248 | + } |
| 4249 | + }, |
| 4250 | + "additionalProperties": false, |
| 4251 | + "type": "object" |
| 4252 | + }, |
4054 | 4253 | "StandaloneSyncConfig": {
|
4055 | 4254 | "properties": {
|
4056 | 4255 | "enabled": {
|
|
4102 | 4301 | "type": "object",
|
4103 | 4302 | "description": "StartupProbe defines the configuration for the startup probe."
|
4104 | 4303 | },
|
| 4304 | + "StaticNodePool": { |
| 4305 | + "properties": { |
| 4306 | + "name": { |
| 4307 | + "type": "string", |
| 4308 | + "description": "Name is the name of this static nodePool" |
| 4309 | + }, |
| 4310 | + "requirements": { |
| 4311 | + "items": { |
| 4312 | + "$ref": "#/$defs/Requirement" |
| 4313 | + }, |
| 4314 | + "type": "array", |
| 4315 | + "description": "Requirements filter the types of nodes that can be provisioned by this pool.\nAll requirements must be met for a node type to be eligible." |
| 4316 | + }, |
| 4317 | + "taints": { |
| 4318 | + "items": { |
| 4319 | + "$ref": "#/$defs/KubeletJoinTaint" |
| 4320 | + }, |
| 4321 | + "type": "array", |
| 4322 | + "description": "Taints are the taints to apply to the nodes in this pool." |
| 4323 | + }, |
| 4324 | + "nodeLabels": { |
| 4325 | + "additionalProperties": { |
| 4326 | + "type": "string" |
| 4327 | + }, |
| 4328 | + "type": "object", |
| 4329 | + "description": "NodeLabels are the labels to apply to the nodes in this pool." |
| 4330 | + }, |
| 4331 | + "terminationGracePeriod": { |
| 4332 | + "type": "string", |
| 4333 | + "description": "TerminationGracePeriod is the maximum duration the controller will wait before forcefully deleting the pods on a node, measured from when deletion is first initiated.\n\nWarning: this feature takes precedence over a Pod's terminationGracePeriodSeconds value, and bypasses any blocked PDBs or the karpenter.sh/do-not-disrupt annotation.\n\nThis field is intended to be used by cluster administrators to enforce that nodes can be cycled within a given time period.\nWhen set, drifted nodes will begin draining even if there are pods blocking eviction. Draining will respect PDBs and the do-not-disrupt annotation until the TGP is reached.\n\nKarpenter will preemptively delete pods so their terminationGracePeriodSeconds align with the node's terminationGracePeriod.\nIf a pod would be terminated without being granted its full terminationGracePeriodSeconds prior to the node timeout,\nthat pod will be deleted at T = node timeout - pod terminationGracePeriodSeconds.\n\nThe feature can also be used to allow maximum time limits for long-running jobs which can delay node termination with preStop hooks.\nDefaults to 30s. Set to Never to wait indefinitely for pods to be drained." |
| 4334 | + }, |
| 4335 | + "quantity": { |
| 4336 | + "type": "integer", |
| 4337 | + "description": "Quantity is the number of desired nodes in this pool." |
| 4338 | + } |
| 4339 | + }, |
| 4340 | + "additionalProperties": false, |
| 4341 | + "type": "object", |
| 4342 | + "required": [ |
| 4343 | + "name", |
| 4344 | + "quantity" |
| 4345 | + ] |
| 4346 | + }, |
4105 | 4347 | "Sync": {
|
4106 | 4348 | "properties": {
|
4107 | 4349 | "toHost": {
|
|
0 commit comments