Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/aks-preview/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ Pending
+++++++
* Add framework for interactive AI-powered debugging tool.

18.0.0b27
+++++++
- Add `--enable-upstream-kubescheduler-user-configuration` to `az aks create` and `az aks update`.
- Add `--disable-upstream-kubescheduler-user-configuration` to `az aks update`.

18.0.0b26
+++++++
* Add `az aks identity-binding` command group for identity binding feature.
Expand Down
9 changes: 9 additions & 0 deletions src/aks-preview/azext_aks_preview/_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,9 @@
type: bool
short-summary: Create a default ManagedSystem mode that is fully managed by AKS.
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.
- name: --enable-upstream-kubescheduler-user-configuration
type: bool
short-summary: Enable user-defined scheduler configuration for kube-scheduler upstream on the cluster
examples:
- name: Create a Kubernetes cluster with an existing SSH public key.
text: az aks create -g MyResourceGroup -n MyManagedCluster --ssh-key-value /path/to/publickey
Expand Down Expand Up @@ -1298,6 +1301,12 @@
- name: --enable-http-proxy
type: bool
short-summary: Enable HTTP Proxy Configuration on the cluster.
- name: --enable-upstream-kubescheduler-user-configuration
type: bool
short-summary: Enable user-defined scheduler configuration for kube-scheduler upstream on the cluster
- name: --disable-upstream-kubescheduler-user-configuration
type: bool
short-summary: Disable user-defined scheduler configuration for kube-scheduler upstream on the cluster
examples:
- name: Reconcile the cluster back to its current state.
text: az aks update -g MyResourceGroup -n MyManagedCluster
Expand Down
3 changes: 3 additions & 0 deletions src/aks-preview/azext_aks_preview/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -1076,6 +1076,7 @@ def load_arguments(self, _):
c.argument("vm_sizes", is_preview=True)
c.argument("enable_imds_restriction", action="store_true", is_preview=True)
c.argument("enable_managed_system_pool", action="store_true", is_preview=True)
c.argument("enable_upstream_kubescheduler_user_configuration", action="store_true", is_preview=True)

with self.argument_context("aks update") as c:
# managed cluster paramerters
Expand Down Expand Up @@ -1521,6 +1522,8 @@ def load_arguments(self, _):
c.argument('migrate_vmas_to_vms', is_preview=True, action='store_true')
c.argument("disable_http_proxy", action="store_true", is_preview=True)
c.argument("enable_http_proxy", action="store_true", is_preview=True)
c.argument("enable_upstream_kubescheduler_user_configuration", action="store_true", is_preview=True)
c.argument("disable_upstream_kubescheduler_user_configuration", action="store_true", is_preview=True)

with self.argument_context("aks upgrade") as c:
c.argument("kubernetes_version", completer=get_k8s_upgrades_completion_list)
Expand Down
3 changes: 3 additions & 0 deletions src/aks-preview/azext_aks_preview/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -751,6 +751,7 @@ def aks_create(
enable_imds_restriction=False,
# managed system pool
enable_managed_system_pool=False,
enable_upstream_kubescheduler_user_configuration=False,
):
# DO NOT MOVE: get all the original parameters and save them as a dictionary
raw_parameters = locals()
Expand Down Expand Up @@ -966,6 +967,8 @@ def aks_update(
enable_imds_restriction=False,
disable_imds_restriction=False,
migrate_vmas_to_vms=False,
enable_upstream_kubescheduler_user_configuration=False,
disable_upstream_kubescheduler_user_configuration=False,
):
# DO NOT MOVE: get all the original parameters and save them as a dictionary
raw_parameters = locals()
Expand Down
82 changes: 82 additions & 0 deletions src/aks-preview/azext_aks_preview/managed_cluster_decorator.py
Original file line number Diff line number Diff line change
Expand Up @@ -2944,6 +2944,31 @@ def get_enable_http_proxy(self) -> bool:

return enable_http_proxy

def get_enable_upstream_kubescheduler_user_configuration(self) -> bool:
"""Obtain the value of enable_upstream_kubescheduler_user_configuration.

:return: bool
"""
return self.raw_param.get("enable_upstream_kubescheduler_user_configuration")

def get_disable_upstream_kubescheduler_user_configuration(self) -> bool:
"""Obtain the value of disable_upstream_kubescheduler_user_configuration.

:return: bool
"""
disable_upstream_kubescheduler_user_configuration = self.raw_param.get(
"disable_upstream_kubescheduler_user_configuration"
)
if (
disable_upstream_kubescheduler_user_configuration and
self.get_enable_upstream_kubescheduler_user_configuration()
):
raise MutuallyExclusiveArgumentError(
"Cannot specify --enable-upstream-kubescheduler-user-configuration and "
"--disable-upstream-kubescheduler-user-configuration at the same time."
)
return disable_upstream_kubescheduler_user_configuration


# pylint: disable=too-many-public-methods
class AKSPreviewManagedClusterCreateDecorator(AKSManagedClusterCreateDecorator):
Expand Down Expand Up @@ -3721,6 +3746,24 @@ def set_up_imds_restriction(self, mc: ManagedCluster) -> ManagedCluster:
mc.network_profile.pod_link_local_access = CONST_IMDS_RESTRICTION_ENABLED
return mc

def set_up_upstream_kubescheduler_user_configuration(self, mc: ManagedCluster) -> ManagedCluster:
self._ensure_mc(mc)

if self.context.get_enable_upstream_kubescheduler_user_configuration():
if mc.scheduler_profile is None:
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
if mc.scheduler_profile.scheduler_instance_profiles is None:
mc.scheduler_profile.scheduler_instance_profiles = (
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
)
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = (
self.models.SchedulerConfigMode.MANAGED_BY_CRD # pylint: disable=no-member
)

return mc

# pylint: disable=unused-argument
def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) -> ManagedCluster:
"""The overall controller used to construct the default ManagedCluster profile.
Expand Down Expand Up @@ -3781,6 +3824,8 @@ def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) ->
mc = self.set_up_static_egress_gateway(mc)
# set up imds restriction(a property in network profile)
mc = self.set_up_imds_restriction(mc)
# set up user-defined scheduler configuration for kube-scheduler upstream
mc = self.set_up_upstream_kubescheduler_user_configuration(mc)

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

return mc

def update_upstream_kubescheduler_user_configuration(self, mc: ManagedCluster) -> ManagedCluster:
"""Update user-defined scheduler configuration for kube-scheduler upstream for the ManagedCluster object.

:return: the ManagedCluster object
"""
self._ensure_mc(mc)

if self.context.get_enable_upstream_kubescheduler_user_configuration():
if mc.scheduler_profile is None:
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
if mc.scheduler_profile.scheduler_instance_profiles is None:
mc.scheduler_profile.scheduler_instance_profiles = (
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
)
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = (
self.models.SchedulerConfigMode.MANAGED_BY_CRD # pylint: disable=no-member
)

if self.context.get_disable_upstream_kubescheduler_user_configuration():
if mc.scheduler_profile is None:
mc.scheduler_profile = self.models.SchedulerProfile() # pylint: disable=no-member
if mc.scheduler_profile.scheduler_instance_profiles is None:
mc.scheduler_profile.scheduler_instance_profiles = (
self.models.SchedulerProfileSchedulerInstanceProfiles() # pylint: disable=no-member
)
if mc.scheduler_profile.scheduler_instance_profiles.upstream is None:
mc.scheduler_profile.scheduler_instance_profiles.upstream = self.models.SchedulerInstanceProfile() # pylint: disable=no-member
mc.scheduler_profile.scheduler_instance_profiles.upstream.scheduler_config_mode = (
self.models.SchedulerConfigMode.DEFAULT # pylint: disable=no-member
)

return mc

def update_mc_profile_preview(self) -> ManagedCluster:
"""The overall controller used to update the preview ManagedCluster profile.

Expand Down Expand Up @@ -5616,6 +5696,8 @@ def update_mc_profile_preview(self) -> ManagedCluster:
mc = self.update_vmas_to_vms(mc)
# update http proxy config
mc = self.update_http_proxy_enabled(mc)
# update user-defined scheduler configuration for kube-scheduler upstream
mc = self.update_upstream_kubescheduler_user_configuration(mc)
# update ManagedSystem pools, must at end
mc = self.update_managed_system_pools(mc)

Expand Down
Loading
Loading