## What?

Currently, in order to upgrade a cluster to a newer version, a set of checks are run validating that it's safe to upgrade. [One of these checks validates](https://github.com/elastic/elasticsearch/blob/main/x-pack/plugin/deprecation/src/main/java/org/elasticsearch/xpack/deprecation/ClusterDeprecationChecks.java#L23) that there's enough room in the cluster to create new shards for (potential) intermediate indices. 

## How

The main idea it creates a new indicator into the new [Health API](https://www.elastic.co/guide/en/elasticsearch/reference/master/health-api.html), in such a way it'll be displayed on the `Deployment Management > Monitoring > Health page`. Later, the Cluster Upgrade Tool should use this indicator to validate that upgrading the cluster is safe. Also, the check should be removed from the Deprecation API.

## Tasks

- [x] Talk with the UI team to confirm that the new indicator, once exposed in the UI, will automatically appear in the UI or it must be developed involved
- [x] Create all the machinery in Elasticsearch repo to expose the new Health API indicator (ticket tracking this work #91119)
- [x] Start the conversations with the Cloud team about the needed changes on their side to use this indicator –or any other new indicator– to block upgrades in case the cluster is Unhealthy.
- [x] Removes the old check from the Deprecation API #95177

### Related

* PR introducing the check https://github.com/elastic/elasticsearch/pull/85967
x-pack/plugin/deprecation/src/test/java/org/elasticsearch/xpack/deprecation/ClusterDeprecationChecksTests.java
public void testCheckShards() {
        /*
         * This test sets the number of allowed shards per node to 5 and creates 2 nodes. So we have room for 10 shards, which is the
         * number of shards that checkShards() is making sure we can add. The first time there are no indices, so the check passes. The
         * next time there is an index with one shard and one replica, leaving room for 8 shards. So the check fails.
         */
        final ClusterState state = ClusterState.builder(new ClusterName(randomAlphaOfLength(5)))
            .metadata(
                Metadata.builder()
                    .persistentSettings(Settings.builder().put(ShardLimitValidator.SETTING_CLUSTER_MAX_SHARDS_PER_NODE.getKey(), 5).build())
                    .build()
            )
            .nodes(
                DiscoveryNodes.builder()
                    .add(DiscoveryNodeUtils.create(UUID.randomUUID().toString()))
                    .add(DiscoveryNodeUtils.create(UUID.randomUUID().toString()))
            )
            .build();
        List<DeprecationIssue> issues = DeprecationChecks.filterChecks(CLUSTER_SETTINGS_CHECKS, c -> c.apply(state));
        assertThat(0, equalTo(issues.size()));
        final ClusterState stateWithProblems = ClusterState.builder(new ClusterName(randomAlphaOfLength(5)))
            .metadata(
                Metadata.builder()
                    .persistentSettings(Settings.builder().put(ShardLimitValidator.SETTING_CLUSTER_MAX_SHARDS_PER_NODE.getKey(), 4).build())