Skip to content

Commit 206d3a4

Browse files
committed
implement enable/disable flags for user-defined scheduler configuration
Signed-off-by: Pedro Tôrres <[email protected]>
1 parent fb7fc37 commit 206d3a4

12 files changed

+5391
-1
lines changed

src/aks-preview/HISTORY.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ Pending
1313
+++++++
1414
* Add framework for interactive AI-powered debugging tool.
1515

16+
18.0.0b27
17+
+++++++
18+
- Add `--enable-upstream-kubescheduler-user-configuration` to `az aks create` and `az aks update`.
19+
- Add `--disable-upstream-kubescheduler-user-configuration` to `az aks update`.
20+
1621
18.0.0b26
1722
+++++++
1823
* Add `az aks identity-binding` command group for identity binding feature.

src/aks-preview/azext_aks_preview/_help.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,9 @@
657657
type: bool
658658
short-summary: Create a default ManagedSystem mode that is fully managed by AKS.
659659
long-summary: When set, the default system node pool is created with ManagedSystem mode, where all properties except name and mode are managed by AKS. Learn more at https://aka.ms/aks/nodepool/mode.
660+
- name: --enable-upstream-kubescheduler-user-configuration
661+
type: bool
662+
short-summary: Enable user-defined scheduler configuration for kube-scheduler upstream on the cluster
660663
examples:
661664
- name: Create a Kubernetes cluster with an existing SSH public key.
662665
text: az aks create -g MyResourceGroup -n MyManagedCluster --ssh-key-value /path/to/publickey
@@ -1298,6 +1301,12 @@
12981301
- name: --enable-http-proxy
12991302
type: bool
13001303
short-summary: Enable HTTP Proxy Configuration on the cluster.
1304+
- name: --enable-upstream-kubescheduler-user-configuration
1305+
type: bool
1306+
short-summary: Enable user-defined scheduler configuration for kube-scheduler upstream on the cluster
1307+
- name: --disable-upstream-kubescheduler-user-configuration
1308+
type: bool
1309+
short-summary: Disable user-defined scheduler configuration for kube-scheduler upstream on the cluster
13011310
examples:
13021311
- name: Reconcile the cluster back to its current state.
13031312
text: az aks update -g MyResourceGroup -n MyManagedCluster

src/aks-preview/azext_aks_preview/_params.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,7 @@ def load_arguments(self, _):
10761076
c.argument("vm_sizes", is_preview=True)
10771077
c.argument("enable_imds_restriction", action="store_true", is_preview=True)
10781078
c.argument("enable_managed_system_pool", action="store_true", is_preview=True)
1079+
c.argument("enable_upstream_kubescheduler_user_configuration", action="store_true", is_preview=True)
10791080

10801081
with self.argument_context("aks update") as c:
10811082
# managed cluster paramerters
@@ -1521,6 +1522,8 @@ def load_arguments(self, _):
15211522
c.argument('migrate_vmas_to_vms', is_preview=True, action='store_true')
15221523
c.argument("disable_http_proxy", action="store_true", is_preview=True)
15231524
c.argument("enable_http_proxy", action="store_true", is_preview=True)
1525+
c.argument("enable_upstream_kubescheduler_user_configuration", action="store_true", is_preview=True)
1526+
c.argument("disable_upstream_kubescheduler_user_configuration", action="store_true", is_preview=True)
15241527

15251528
with self.argument_context("aks upgrade") as c:
15261529
c.argument("kubernetes_version", completer=get_k8s_upgrades_completion_list)

src/aks-preview/azext_aks_preview/custom.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,7 @@ def aks_create(
751751
enable_imds_restriction=False,
752752
# managed system pool
753753
enable_managed_system_pool=False,
754+
enable_upstream_kubescheduler_user_configuration=False,
754755
):
755756
# DO NOT MOVE: get all the original parameters and save them as a dictionary
756757
raw_parameters = locals()
@@ -966,6 +967,8 @@ def aks_update(
966967
enable_imds_restriction=False,
967968
disable_imds_restriction=False,
968969
migrate_vmas_to_vms=False,
970+
enable_upstream_kubescheduler_user_configuration=False,
971+
disable_upstream_kubescheduler_user_configuration=False,
969972
):
970973
# DO NOT MOVE: get all the original parameters and save them as a dictionary
971974
raw_parameters = locals()

src/aks-preview/azext_aks_preview/managed_cluster_decorator.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2944,6 +2944,31 @@ def get_enable_http_proxy(self) -> bool:
29442944

29452945
return enable_http_proxy
29462946

2947+
def get_enable_upstream_kubescheduler_user_configuration(self) -> bool:
2948+
"""Obtain the value of enable_upstream_kubescheduler_user_configuration.
2949+
2950+
:return: bool
2951+
"""
2952+
return self.raw_param.get("enable_upstream_kubescheduler_user_configuration")
2953+
2954+
def get_disable_upstream_kubescheduler_user_configuration(self) -> bool:
2955+
"""Obtain the value of disable_upstream_kubescheduler_user_configuration.
2956+
2957+
:return: bool
2958+
"""
2959+
disable_upstream_kubescheduler_user_configuration = self.raw_param.get(
2960+
"disable_upstream_kubescheduler_user_configuration"
2961+
)
2962+
if (
2963+
disable_upstream_kubescheduler_user_configuration and
2964+
self.get_enable_upstream_kubescheduler_user_configuration()
2965+
):
2966+
raise MutuallyExclusiveArgumentError(
2967+
"Cannot specify --enable-upstream-kubescheduler-user-configuration and "
2968+
"--disable-upstream-kubescheduler-user-configuration at the same time."
2969+
)
2970+
return disable_upstream_kubescheduler_user_configuration
2971+
29472972

29482973
# pylint: disable=too-many-public-methods
29492974
class AKSPreviewManagedClusterCreateDecorator(AKSManagedClusterCreateDecorator):
@@ -3721,6 +3746,22 @@ def set_up_imds_restriction(self, mc: ManagedCluster) -> ManagedCluster:
37213746
mc.network_profile.pod_link_local_access = CONST_IMDS_RESTRICTION_ENABLED
37223747
return mc
37233748

3749+
def set_up_upstream_kubescheduler_user_configuration(self, mc: ManagedCluster) -> ManagedCluster:
3750+
self._ensure_mc(mc)
3751+
3752+
if self.context.get_enable_upstream_kubescheduler_user_configuration():
3753+
if mc.scheduler_profile is None:
3754+
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
3755+
if mc.scheduler_profile.scheduler_instance_profiles is None:
3756+
mc.scheduler_profile.scheduler_instance_profiles = (
3757+
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
3758+
)
3759+
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
3760+
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
3761+
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = 'ManagedByCRD'
3762+
3763+
return mc
3764+
37243765
# pylint: disable=unused-argument
37253766
def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) -> ManagedCluster:
37263767
"""The overall controller used to construct the default ManagedCluster profile.
@@ -3781,6 +3822,8 @@ def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) ->
37813822
mc = self.set_up_static_egress_gateway(mc)
37823823
# set up imds restriction(a property in network profile)
37833824
mc = self.set_up_imds_restriction(mc)
3825+
# set up user-defined scheduler configuration for kube-scheduler upstream
3826+
mc = self.set_up_upstream_kubescheduler_user_configuration(mc)
37843827

37853828
# validate the azure cli core version
37863829
self.verify_cli_core_version()
@@ -5539,6 +5582,37 @@ def update_http_proxy_enabled(self, mc: ManagedCluster) -> ManagedCluster:
55395582

55405583
return mc
55415584

5585+
def update_upstream_kubescheduler_user_configuration(self, mc: ManagedCluster) -> ManagedCluster:
5586+
"""Update user-defined scheduler configuration for kube-scheduler upstream for the ManagedCluster object.
5587+
5588+
:return: the ManagedCluster object
5589+
"""
5590+
self._ensure_mc(mc)
5591+
5592+
if self.context.get_enable_upstream_kubescheduler_user_configuration():
5593+
if mc.scheduler_profile is None:
5594+
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
5595+
if mc.scheduler_profile.scheduler_instance_profiles is None:
5596+
mc.scheduler_profile.scheduler_instance_profiles = (
5597+
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
5598+
)
5599+
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
5600+
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
5601+
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = 'ManagedByCRD'
5602+
5603+
if self.context.get_disable_upstream_kubescheduler_user_configuration():
5604+
if mc.scheduler_profile is None:
5605+
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
5606+
if mc.scheduler_profile.scheduler_instance_profiles is None:
5607+
mc.scheduler_profile.scheduler_instance_profiles = (
5608+
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
5609+
)
5610+
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
5611+
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
5612+
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = 'Default'
5613+
5614+
return mc
5615+
55425616
def update_mc_profile_preview(self) -> ManagedCluster:
55435617
"""The overall controller used to update the preview ManagedCluster profile.
55445618
@@ -5616,6 +5690,8 @@ def update_mc_profile_preview(self) -> ManagedCluster:
56165690
mc = self.update_vmas_to_vms(mc)
56175691
# update http proxy config
56185692
mc = self.update_http_proxy_enabled(mc)
5693+
# update user-defined scheduler configuration for kube-scheduler upstream
5694+
mc = self.update_upstream_kubescheduler_user_configuration(mc)
56195695
# update ManagedSystem pools, must at end
56205696
mc = self.update_managed_system_pools(mc)
56215697

0 commit comments

Comments
 (0)