Skip to content

Commit 56da24a

Browse files
authored
[AKS] implement enable/disable flags for user-defined scheduler configuration (#9066)
1 parent dbfd0ba commit 56da24a

12 files changed

+5397
-1
lines changed

src/aks-preview/HISTORY.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@ To release a new version, please select a new version number (usually plus 1 to
1111

1212
Pending
1313
+++++++
14+
15+
18.0.0b27
16+
+++++++
1417
* Add framework for interactive AI-powered debugging tool.
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`.
1520

1621
18.0.0b26
1722
+++++++

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: 82 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,24 @@ 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 = (
3762+
self.models.SchedulerConfigMode.MANAGED_BY_CRD # pylint: disable=no-member
3763+
)
3764+
3765+
return mc
3766+
37243767
# pylint: disable=unused-argument
37253768
def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) -> ManagedCluster:
37263769
"""The overall controller used to construct the default ManagedCluster profile.
@@ -3781,6 +3824,8 @@ def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) ->
37813824
mc = self.set_up_static_egress_gateway(mc)
37823825
# set up imds restriction(a property in network profile)
37833826
mc = self.set_up_imds_restriction(mc)
3827+
# set up user-defined scheduler configuration for kube-scheduler upstream
3828+
mc = self.set_up_upstream_kubescheduler_user_configuration(mc)
37843829

37853830
# validate the azure cli core version
37863831
self.verify_cli_core_version()
@@ -5539,6 +5584,41 @@ def update_http_proxy_enabled(self, mc: ManagedCluster) -> ManagedCluster:
55395584

55405585
return mc
55415586

5587+
def update_upstream_kubescheduler_user_configuration(self, mc: ManagedCluster) -> ManagedCluster:
5588+
"""Update user-defined scheduler configuration for kube-scheduler upstream for the ManagedCluster object.
5589+
5590+
:return: the ManagedCluster object
5591+
"""
5592+
self._ensure_mc(mc)
5593+
5594+
if self.context.get_enable_upstream_kubescheduler_user_configuration():
5595+
if mc.scheduler_profile is None:
5596+
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
5597+
if mc.scheduler_profile.scheduler_instance_profiles is None:
5598+
mc.scheduler_profile.scheduler_instance_profiles = (
5599+
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
5600+
)
5601+
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
5602+
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
5603+
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = (
5604+
self.models.SchedulerConfigMode.MANAGED_BY_CRD # pylint: disable=no-member
5605+
)
5606+
5607+
if self.context.get_disable_upstream_kubescheduler_user_configuration():
5608+
if mc.scheduler_profile is None:
5609+
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
5610+
if mc.scheduler_profile.scheduler_instance_profiles is None:
5611+
mc.scheduler_profile.scheduler_instance_profiles = (
5612+
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
5613+
)
5614+
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
5615+
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
5616+
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = (
5617+
self.models.SchedulerConfigMode.DEFAULT # pylint: disable=no-member
5618+
)
5619+
5620+
return mc
5621+
55425622
def update_mc_profile_preview(self) -> ManagedCluster:
55435623
"""The overall controller used to update the preview ManagedCluster profile.
55445624
@@ -5616,6 +5696,8 @@ def update_mc_profile_preview(self) -> ManagedCluster:
56165696
mc = self.update_vmas_to_vms(mc)
56175697
# update http proxy config
56185698
mc = self.update_http_proxy_enabled(mc)
5699+
# update user-defined scheduler configuration for kube-scheduler upstream
5700+
mc = self.update_upstream_kubescheduler_user_configuration(mc)
56195701
# update ManagedSystem pools, must at end
56205702
mc = self.update_managed_system_pools(mc)
56215703

0 commit comments

Comments
 (0)