From 7a6d154a2125f5955adf2b622e1b5d649b13d0e2 Mon Sep 17 00:00:00 2001 From: verrazzanobot <70212020+verrazzanobot@users.noreply.github.com> Date: Mon, 20 Nov 2023 20:00:58 +0000 Subject: [PATCH] Updates --- v1.7/404.html | 2 +- v1.7/docs/advanced/index.html | 1288 +++++ v1.7/docs/advanced/index.xml | 5030 +++++++++++++++++ v1.7/docs/advanced/ocne-azure/index.html | 3114 ++++++++++ v1.7/docs/advanced/ocne-vsphere/index.html | 4443 +++++++++++++++ .../about-applications/index.html | 21 +- .../applications/delivery/deploy/index.html | 21 +- .../applications/delivery/enable/index.html | 21 +- v1.7/docs/applications/delivery/index.html | 21 +- v1.7/docs/applications/index.html | 21 +- .../kubernetes/auth_policy/index.html | 21 +- .../kubernetes/certificate/index.html | 21 +- .../kubernetes/create_kubernetes/index.html | 21 +- .../gateway_virtual_service/index.html | 21 +- v1.7/docs/applications/kubernetes/index.html | 21 +- .../kubernetes/wiring-metrics/index.html | 21 +- .../docs/applications/multicluster/index.html | 21 +- .../multicluster/intro/index.html | 21 +- .../multicluster/mcresources/index.html | 21 +- .../verrazzanomanagedcluster/index.html | 21 +- .../index.html | 21 +- .../multiclusterresourcestatus/index.html | 21 +- .../placement/placement/index.html | 21 +- .../project/verrazzanoproject/index.html | 21 +- .../applications/oam/deploy-app/index.html | 21 +- v1.7/docs/applications/oam/index.html | 21 +- .../oam/traits/about-traits/index.html | 21 +- v1.7/docs/applications/oam/traits/index.html | 21 +- .../oam/traits/ingress/ingress/index.html | 21 +- .../oam/traits/logging/logging/index.html | 21 +- .../oam/traits/metrics/metrics/index.html | 21 +- .../oam/verrazzanoproject/index.html | 21 +- .../oam/workloads/about-workloads/index.html | 21 +- .../workloads/coherence/coherence/index.html | 21 +- .../oam/workloads/helidon/helidon/index.html | 21 +- .../applications/oam/workloads/index.html | 21 +- .../oam/workloads/weblogic/index.html | 21 +- .../index.html | 21 +- v1.7/docs/backup/argocd/index.html | 21 +- v1.7/docs/backup/index.html | 21 +- v1.7/docs/backup/keycloak/index.html | 21 +- v1.7/docs/backup/opensearch/index.html | 21 +- v1.7/docs/backup/rancher/index.html | 21 +- v1.7/docs/examples/argo-cd/index.html | 21 +- v1.7/docs/examples/helidon-config/index.html | 21 +- v1.7/docs/examples/hello-helidon/index.html | 21 +- v1.7/docs/examples/index.html | 21 +- .../microservices/hello-world/index.html | 21 +- v1.7/docs/examples/microservices/index.html | 21 +- .../microservices/sock-shop/index.html | 21 +- .../microservices/spring-boot/index.html | 21 +- .../multicluster/hello-helidon/index.html | 21 +- v1.7/docs/examples/multicluster/index.html | 21 +- .../multicluster/sock-shop/index.html | 21 +- .../multicluster/todo-list/index.html | 21 +- .../examples/wls-coh/bobs-books/index.html | 21 +- v1.7/docs/examples/wls-coh/index.html | 21 +- .../examples/wls-coh/todo-list/index.html | 21 +- v1.7/docs/guides/ha/ha/index.html | 21 +- v1.7/docs/guides/ha/index.html | 21 +- v1.7/docs/guides/ha/node-failure/index.html | 21 +- v1.7/docs/guides/ha/prod-upgrade/index.html | 21 +- v1.7/docs/guides/index.html | 21 +- .../lift-and-shift/lift-and-shift/index.html | 21 +- v1.7/docs/guides/sidecar/index.html | 21 +- v1.7/docs/index.html | 21 +- v1.7/docs/index.xml | 2293 +++++++- .../docs/introduction/architecture/index.html | 21 +- v1.7/docs/introduction/features/index.html | 21 +- v1.7/docs/introduction/index.html | 21 +- .../verrazzanomulticluster/index.html | 21 +- .../introduction/verrazzanooam/index.html | 21 +- v1.7/docs/networking/index.html | 21 +- v1.7/docs/networking/istio/index.html | 21 +- .../security/certificates/index.html | 21 +- v1.7/docs/networking/security/index.html | 21 +- v1.7/docs/networking/traffic/dns/index.html | 21 +- .../networking/traffic/externallbs/index.html | 21 +- v1.7/docs/networking/traffic/index.html | 21 +- .../networking/traffic/ingress/index.html | 21 +- .../traffic/ociloadbalancerips/index.html | 21 +- v1.7/docs/observability/index.html | 21 +- .../logging/configure-opensearch/index.html | 21 +- .../opensearch/index.html | 21 +- .../logging/fluent-operator/index.html | 21 +- .../logging/fluentd/fluentd/index.html | 21 +- .../observability/logging/fluentd/index.html | 21 +- v1.7/docs/observability/logging/index.html | 21 +- .../observability/logging/logs/index.html | 21 +- .../logging/oci-logging/index.html | 21 +- .../observability/logging/search/index.html | 21 +- .../logging/troubleshoot/index.html | 21 +- .../monitoring/configure-metrics/index.html | 21 +- .../configure/alertmanager/index.html | 21 +- .../configure/grafana/grafana/index.html | 21 +- .../monitoring/configure/grafana/index.html | 21 +- .../monitoring/configure/index.html | 21 +- .../configure/prometheus/index.html | 21 +- .../monitoring/configure/thanos/index.html | 21 +- v1.7/docs/observability/monitoring/index.html | 21 +- .../multicluster-metrics/index.html | 21 +- .../troubleshooting-prometheus/index.html | 21 +- v1.7/docs/observability/storage/index.html | 21 +- .../tracing/application-tracing/index.html | 21 +- .../tracing/capture-traces/index.html | 21 +- .../tracing/configure-tracing/index.html | 21 +- v1.7/docs/observability/tracing/index.html | 21 +- .../tracing/view-traces/index.html | 21 +- v1.7/docs/reference/index.html | 21 +- v1.7/docs/reference/migration/index.html | 21 +- .../vao-clusters-v1alpha1/index.html | 21 +- .../reference/vao-oam-v1alpha1/index.html | 21 +- .../vco-clusters-v1alpha1/index.html | 21 +- .../vpo-verrazzano-v1alpha1/index.html | 21 +- .../vpo-verrazzano-v1beta1/index.html | 21 +- v1.7/docs/releasenotes/index.html | 23 +- .../security/accounts/accounts/index.html | 21 +- v1.7/docs/security/appsec/appsec/index.html | 21 +- v1.7/docs/security/index.html | 21 +- v1.7/docs/security/keycloak/index.html | 21 +- .../security/keycloak/keycloak/index.html | 21 +- .../security/proxies/authproxy/index.html | 21 +- v1.7/docs/security/proxies/index.html | 21 +- v1.7/docs/security/rbac/rbac/index.html | 21 +- .../access/console-credentials/index.html | 21 +- .../docs/setup/access/console-urls/index.html | 21 +- v1.7/docs/setup/access/index.html | 21 +- v1.7/docs/setup/access/password/index.html | 21 +- v1.7/docs/setup/index.html | 21 +- v1.7/docs/setup/install/index.html | 21 +- .../perform/cli-installation/index.html | 21 +- .../perform/helm-installation/index.html | 21 +- v1.7/docs/setup/install/perform/index.html | 21 +- .../perform/kubectl-installation/index.html | 21 +- .../setup/install/perform/profiles/index.html | 21 +- .../install/prepare/cli-setup/index.html | 21 +- v1.7/docs/setup/install/prepare/index.html | 21 +- .../platforms/generic/generic/index.html | 21 +- .../install/prepare/platforms/index.html | 21 +- .../prepare/platforms/kind/kind/index.html | 21 +- .../prepare/platforms/oci/oci/index.html | 21 +- .../prepare/platforms/olcne/index.html | 21 +- .../prepare/platforms/olcne/nfs/index.html | 21 +- .../olcne/private-registry/index.html | 21 +- .../prepare/platforms/vcn-oci/index.html | 21 +- .../setup/install/prepare/prereqs/index.html | 21 +- .../install/verify/cli-verify/index.html | 21 +- v1.7/docs/setup/install/verify/index.html | 21 +- .../install/verify/kubectl-verify/index.html | 21 +- .../setup/install/verify/softwares/index.html | 21 +- .../setup/installationoverrides/index.html | 21 +- .../mc-install/advanced-mc-install/index.html | 21 +- .../mc-install/deregister-install/index.html | 21 +- v1.7/docs/setup/mc-install/index.html | 21 +- .../setup/mc-install/multicluster/index.html | 21 +- .../docs/setup/mc-install/register/index.html | 21 +- .../register/register-kubectl/index.html | 21 +- .../register/syncclusters/index.html | 21 +- .../register/ui-register/index.html | 21 +- .../troubleshooting-multicluster/index.html | 21 +- .../mc-install/verify-install/index.html | 21 +- .../docs/setup/modify-installation/index.html | 21 +- .../private-registry/index.html | 21 +- .../setup/provision-cluster/capi/index.html | 43 +- .../provision-cluster/clusterapi/index.html | 21 +- v1.7/docs/setup/provision-cluster/index.html | 21 +- v1.7/docs/setup/provision-cluster/index.xml | 16 +- .../managed-cluster-vz/index.html | 21 +- .../provision-cluster/ocne-oci/index.html | 21 +- .../provision-cluster/oke-oci/index.html | 21 +- v1.7/docs/setup/quickstart/index.html | 21 +- v1.7/docs/setup/uninstall/index.html | 21 +- v1.7/docs/setup/upgrade/index.html | 21 +- .../upgrade/kubernetes-upgrade/index.html | 21 +- v1.7/docs/setup/upgrade/perform/index.html | 21 +- v1.7/docs/setup/upgrade/prepare/index.html | 21 +- v1.7/docs/setup/upgrade/upgrade-mc/index.html | 21 +- v1.7/docs/setup/upgrade/verify/index.html | 21 +- v1.7/docs/support/index.html | 21 +- .../clusterapiclusterissues/index.html | 23 +- .../externaldnsconfiguration/index.html | 23 +- .../imagepullbackoff/index.html | 23 +- .../imagepullnotfound/index.html | 23 +- .../imagepullratelimit/index.html | 23 +- .../imagepullservice/index.html | 23 +- .../diagnostictools/analysisadvice/index.html | 23 +- .../ingressinstallfailure/index.html | 23 +- .../ingressinvalidshape/index.html | 23 +- .../ingresslblimitexceeded/index.html | 23 +- .../ingressnoloadbalancerip/index.html | 23 +- .../ingressociiplimitexceeded/index.html | 23 +- .../analysisadvice/installfailure/index.html | 23 +- .../analysisadvice/insufficientcpu/index.html | 23 +- .../insufficientmemory/index.html | 23 +- .../index.html | 23 +- .../istioloadbalancercreationissue/index.html | 23 +- .../keycloakdatamigrationfailure/index.html | 23 +- .../nginxloadbalancercreationissue/index.html | 23 +- .../analysisadvice/pendingpods/index.html | 23 +- .../podproblemsnotreported/index.html | 23 +- .../analysisadvice/rancherissues/index.html | 23 +- .../diagnostictools/index.html | 23 +- .../verrazzanoanalysistool/index.html | 23 +- .../diagnostictools/vzbugreportcli/index.html | 23 +- v1.7/docs/troubleshooting/faq/index.html | 23 +- v1.7/docs/troubleshooting/index.html | 33 +- v1.7/docs/troubleshooting/index.xml | 4 +- .../troubleshooting-clusterapi/index.html | 23 +- .../troubleshooting-fluentd/index.html | 23 +- .../troubleshooting-mysql/index.html | 23 +- v1.7/index.html | 2 +- ...dex.13ff848cfb3b604d1b98dbe4670a5f81.json} | 2 +- v1.7/search/index.html | 2 +- v1.7/sitemap.xml | 15 +- 214 files changed, 19609 insertions(+), 938 deletions(-) create mode 100644 v1.7/docs/advanced/index.html create mode 100644 v1.7/docs/advanced/index.xml create mode 100644 v1.7/docs/advanced/ocne-azure/index.html create mode 100644 v1.7/docs/advanced/ocne-vsphere/index.html rename v1.7/{offline-search-index.8a7cacfee38b8368de755719837c99b7.json => offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json} (53%) diff --git a/v1.7/404.html b/v1.7/404.html index 52de84e847..c05676ae84 100644 --- a/v1.7/404.html +++ b/v1.7/404.html @@ -90,7 +90,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="./offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="./offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="./" data-offline-search-max-results="10" > diff --git a/v1.7/docs/advanced/index.html b/v1.7/docs/advanced/index.html new file mode 100644 index 0000000000..ffb0800d8c --- /dev/null +++ b/v1.7/docs/advanced/index.html @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + +Advanced Features | Verrazzano Enterprise Container Platform + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ + +
+ + + + + +
+

Advanced Features

+ + + +
+ + + + + + + + +
+ + +
+
+ Create OCNE Clusters Running on Microsoft Azure +
+

Configure Oracle Cloud Native Environment self-managed clusters to run on Microsoft Azure

+
+ + +
+
+ Create OCNE Clusters Running on VMware vSphere +
+

Configure Oracle Cloud Native Environment self-managed clusters to run on VMware vSphere

+
+ + +
+ +
+ + + + + + +
+ +
+
+ +
+
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/v1.7/docs/advanced/index.xml b/v1.7/docs/advanced/index.xml new file mode 100644 index 0000000000..f6ff1109ee --- /dev/null +++ b/v1.7/docs/advanced/index.xml @@ -0,0 +1,5030 @@ + + + Verrazzano Enterprise Container Platform – Advanced Features + /docs/advanced/ + Recent content in Advanced Features on Verrazzano Enterprise Container Platform + Hugo -- gohugo.io + + + + + + + + + + + Docs: Create OCNE Clusters Running on Microsoft Azure + /docs/advanced/ocne-azure/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /docs/advanced/ocne-azure/ + + + + + +<div class="alert alert-danger" role="alert"> +<h4 class="alert-heading">NOTE</h4> + + This feature is experimental. It has not been thoroughly tested and is provided for informational purposes only. We make no guarantees about its safety or stability and do not recommend implementing this feature in production environments. + +</div> + +<p>The Cluster API project provides a standard set of Kubernetes-style APIs for cluster management. Officially, Verrazzano currently only supports using Cluster API to <a href="../../docs/setup/provision-cluster/">provision OCNE and OKE clusters on OCI</a>.</p> +<p>However, you can also experiment with using the features of the Cluster API project directly to deploy OCNE clusters on Microsoft Azure.</p> +<p>For more information on Cluster API or Cluster API with Azure, see:</p> +<ul> +<li><a href="https://cluster-api.sigs.k8s.io/introduction.html">Kubernetes Cluster API Documentation</a></li> +<li><a href="https://capz.sigs.k8s.io/introduction">The Cluster API Provider Azure Book</a> +<ul> +<li><a href="https://capz.sigs.k8s.io/topics/getting-started">Getting started with cluster-api-provider-azure</a></li> +</ul> +</li> +</ul> + + +<div class="alert alert-primary" role="alert"> +<h4 class="alert-heading">NOTE</h4> + + <p>Verrazzano and Cluster API use slightly different terminology for the same concepts:</p> +<ul> +<li>Admin cluster (Verrazzano) = management cluster (Cluster API)</li> +<li>Managed cluster (Verrazzano) = workload cluster (Cluster API)</li> +</ul> + + +</div> + +<h2 id="prepare-azure-resources">Prepare Azure resources</h2> +<p>Before you can deploy a Cluster API cluster, you need to set up a few resources in Azure.</p> +<ol> +<li>Install the Azure command-line interface (CLI) tool. For instructions, see <a href="https://learn.microsoft.com/en-us/cli/azure/install-azure-cli">How to install the Azure CLI</a> in the Microsoft Azure documentation.</li> +<li>Create an Azure resource group. In the Azure CLI, run the following command: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ az group create --name &lt;ResourceGroupName&gt; --location &lt;location&gt; +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +For more detailed instructions, see <a href="https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli">Manage Azure Resource Groups by using Azure CLI</a> in the Microsoft Azure documentation.</li> +<li>Create a service principal. Make sure it has the privileges it needs to create resources. This means a contributor role at minimum. The following example creates a service principal, assigns it the contributor role, and defines its scope. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ az ad sp create-for-rbac --name myServicePrincipalName \ + --role Contributor \ + --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +For more detailed instructions, see <a href="https://learn.microsoft.com/en-us/cli/azure/azure-cli-sp-tutorial-1">Create an Azure service principal with Azure CLI</a> in the Microsoft Azure documentation.</li> +</ol> +<h2 id="set-up-the-admin-cluster">Set up the admin cluster</h2> +<p>The Cluster API requires an initial cluster as a starting point to deploy its resources.</p> +<ol> +<li> +<p>Install kind. Follow the instructions at <a href="https://kind.sigs.k8s.io/docs/user/quick-start/#installation">Installation</a> in the kind documentation.</p> +</li> +<li> +<p>Create a Kubernetes cluster using kind. Follow the instructions at <a href="https://cluster-api.sigs.k8s.io/user/quick-start#install-andor-configure-a-kubernetes-cluster">Quick Start: Install and/or configure a Kubernetes cluster</a> in The Cluster API Book.</p> +</li> +<li> +<p>Install the clusterctl CLI tool. clusterctl manages the lifecycle operations of a cluster API admin cluster. Follow the instructions at <a href="https://cluster-api.sigs.k8s.io/user/quick-start.html#install-clusterctl">Quick Start: Install clusterctl</a> in the Cluster API Book.</p> +</li> +<li> +<p>Install the Verrazzano CLI tool using the instructions at <a href="../../docs/setup/install/prepare/cli-setup/">CLI Setup</a>.</p> +</li> +<li> +<p>Install Verrazzano on the cluster using either the <code>dev</code> or <code>prod</code> installation profile. Follow the instructions at <a href="../../docs/setup/install/perform/cli-installation/">Install with CLI</a>. The <code>certManager</code> and <code>clusterAPI</code> components are required and must remain enabled.</p> +</li> +<li> +<p>On the cluster, set environment variables for the following Azure resource IDs from your Azure account and from the service principal you created:</p> +<ul> +<li>Subscription ID</li> +<li>Tenant ID</li> +<li>Client ID</li> +<li>Client Secret</li> +</ul> +<p>For example: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code># Azure resource IDs +$ export AZURE_SUBSCRIPTION_ID=&#34;&lt;SubscriptionId&gt;&#34; +$ export AZURE_TENANT_ID=&#34;&lt;Tenant&gt;&#34; +$ export AZURE_CLIENT_ID=&#34;&lt;AppId&gt;&#34; +$ export AZURE_CLIENT_SECRET=&#34;&lt;Password&gt;&#34; + +# Base64 encode the Azure Resource IDs +$ export AZURE_SUBSCRIPTION_ID_B64=&#34;$(echo -n &#34;$AZURE_SUBSCRIPTION_ID&#34; | base64 | tr -d &#39;\n&#39;)&#34; +$ export AZURE_TENANT_ID_B64=&#34;$(echo -n &#34;$AZURE_TENANT_ID&#34; | base64 | tr -d &#39;\n&#39;)&#34; +$ export AZURE_CLIENT_ID_B64=&#34;$(echo -n &#34;$AZURE_CLIENT_ID&#34; | base64 | tr -d &#39;\n&#39;)&#34; +$ export AZURE_CLIENT_SECRET_B64=&#34;$(echo -n &#34;$AZURE_CLIENT_SECRET&#34; | base64 | tr -d &#39;\n&#39;)&#34; + +# Settings needed for AzureClusterIdentity used by the AzureCluster +$ export AZURE_CLUSTER_IDENTITY_SECRET_NAME=&#34;&lt;cluster-identity-secret&gt;&#34; +$ export CLUSTER_IDENTITY_NAME=&#34;&lt;cluster-identity&gt;&#34; +$ export AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE=&#34;default&#34; +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Create a secret that includes the password of the service principal identity created in Azure. This secret is referenced by the AzureClusterIdentity used by the AzureCluster. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kubectl create secret generic &#34;${AZURE_CLUSTER_IDENTITY_SECRET_NAME}&#34; --from-literal=clientSecret=&#34;${AZURE_CLIENT_SECRET}&#34; --namespace &#34;${AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE}&#34; +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Install the Cluster API Azure infrastructure provider. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl init -n verrazzano-capi -i azure +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<p>clusterctl will report when the admin cluster was successfully initialized.</p> +</li> +</ol> +<h2 id="create-a-managed-cluster">Create a managed cluster</h2> +<p>The Cluster API uses a cluster template to deploy a predefined set of Cluster API objects and create a managed cluster.</p> +<ol> +<li> +<p>Set the following environment variables so they are available to the cluster template. Update the values to reflect your own environment. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code># Base64 encoded SSH key for node access +$ export AZURE_SSH_PUBLIC_KEY_B64=&#34;&lt;sshKey&gt;&#34; + +# Select VM types. +$ export AZURE_CONTROL_PLANE_MACHINE_TYPE=&#34;Standard_D2s_v3&#34; +$ export AZURE_NODE_MACHINE_TYPE=&#34;Standard_D2s_v3&#34; + +# [Optional] Select resource group. The default value is ${CLUSTER_NAME}. +$ export AZURE_RESOURCE_GROUP=&#34;&lt;resourceGroupName&gt; + +# Name of the Azure datacenter location. Change this value to your desired location. +$ export AZURE_LOCATION=&#34;&lt;location&gt;&#34; + +# Cluster name info +$ export CLUSTER_NAME=&#34;capi-quickstart&#34; +$ export KUBERNETES_VERSION=&#34;&lt;k8sVersion&gt;&#34; +$ export NAMESPACE=&#34;default&#34; +$ export CONTROL_PLANE_MACHINE_COUNT=&#34;1&#34; +$ export WORKER_MACHINE_COUNT=&#34;1&#34; +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Copy the cluster template and save it locally as <code>azure-capi.yaml</code>.</p> + <details> + <summary><b>Click here for the cluster template</b></summary> + <style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>apiVersion: cluster.x-k8s.io/v1beta1 +kind: Cluster +metadata: + name: ${CLUSTER_NAME} + namespace: default +spec: + clusterNetwork: + pods: + cidrBlocks: + - 192.168.0.0/16 + controlPlaneRef: + apiVersion: controlplane.cluster.x-k8s.io/v1beta1 + kind: OCNEControlPlane + name: ${CLUSTER_NAME}-control-plane + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: AzureCluster + name: ${CLUSTER_NAME} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: AzureCluster +metadata: + name: ${CLUSTER_NAME} + namespace: default +spec: + identityRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: AzureClusterIdentity + name: ${CLUSTER_IDENTITY_NAME} + location: ${AZURE_LOCATION} + networkSpec: + subnets: + - name: control-plane-subnet + role: control-plane + - name: node-subnet + role: node + vnet: + name: ${AZURE_VNET_NAME:=${CLUSTER_NAME}-vnet} + resourceGroup: ${AZURE_RESOURCE_GROUP:=${CLUSTER_NAME}} + subscriptionID: ${AZURE_SUBSCRIPTION_ID} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: AzureMachineTemplate +metadata: + name: ${CLUSTER_NAME}-control-plane + namespace: default +spec: + template: + spec: + image: + marketplace: + publisher: &#34;Oracle&#34; + offer: &#34;Oracle-Linux&#34; + sku: &#34;ol88-lvm-gen2&#34; + version: &#34;8.8.3&#34; + dataDisks: + - diskSizeGB: 256 + lun: 0 + nameSuffix: etcddisk + osDisk: + diskSizeGB: 128 + osType: Linux + sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=&#34;&#34;} + vmSize: ${AZURE_CONTROL_PLANE_MACHINE_TYPE} +--- +apiVersion: cluster.x-k8s.io/v1beta1 +kind: MachineDeployment +metadata: + name: ${CLUSTER_NAME}-md-0 + namespace: default +spec: + clusterName: ${CLUSTER_NAME} + replicas: ${WORKER_MACHINE_COUNT} + selector: + matchLabels: null + template: + spec: + bootstrap: + configRef: + apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 + kind: OCNEConfigTemplate + name: ${CLUSTER_NAME}-md-0 + clusterName: ${CLUSTER_NAME} + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: AzureMachineTemplate + name: ${CLUSTER_NAME}-md-0 + version: ${KUBERNETES_VERSION} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: AzureMachineTemplate +metadata: + name: ${CLUSTER_NAME}-md-0 + namespace: default +spec: + template: + spec: + image: + marketplace: + publisher: &#34;Oracle&#34; + offer: &#34;Oracle-Linux&#34; + sku: &#34;ol88-lvm-gen2&#34; + version: &#34;8.8.3&#34; + osDisk: + diskSizeGB: 128 + osType: Linux + sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=&#34;&#34;} + vmSize: ${AZURE_NODE_MACHINE_TYPE} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: AzureClusterIdentity +metadata: + labels: + clusterctl.cluster.x-k8s.io/move-hierarchy: &#34;true&#34; + name: ${CLUSTER_IDENTITY_NAME} + namespace: default +spec: + allowedNamespaces: {} + clientID: ${AZURE_CLIENT_ID} + clientSecret: + name: ${AZURE_CLUSTER_IDENTITY_SECRET_NAME} + namespace: ${AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE} + tenantID: ${AZURE_TENANT_ID} + type: ServicePrincipal +--- +apiVersion: controlplane.cluster.x-k8s.io/v1alpha1 +kind: OCNEControlPlane +metadata: + name: ${CLUSTER_NAME}-control-plane + namespace: default +spec: + moduleOperator: + enabled: true + verrazzanoPlatformOperator: + enabled: true + controlPlaneConfig: + clusterConfiguration: + apiServer: + extraArgs: + cloud-provider: external + certSANs: + - localhost + - 127.0.0.1 + dns: + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + imageTag: ${DNS_TAG=v1.9.3} + etcd: + local: + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + imageTag: ${ETCD_TAG=3.5.6} + controllerManager: + extraArgs: + cloud-provider: external + networking: {} + scheduler: {} + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + files: + - contentFrom: + secret: + key: control-plane-azure.json + name: ${CLUSTER_NAME}-control-plane-azure-json + owner: root:root + path: /etc/kubernetes/azure.json + permissions: &#34;0644&#34; + initConfiguration: + nodeRegistration: + criSocket: /var/run/crio/crio.sock + kubeletExtraArgs: + cloud-provider: external + name: &#39;{{ local_hostname }}&#39; + joinConfiguration: + discovery: {} + nodeRegistration: + criSocket: /var/run/crio/crio.sock + kubeletExtraArgs: + cloud-provider: external + name: &#39;{{ local_hostname }}&#39; + preOCNECommands: + - hostnamectl set-hostname &#34;{{ ds.meta_data.hostname }}&#34; + - echo &#34;::1 ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6&#34; + &gt;/etc/hosts + - echo &#34;127.0.0.1 {{ ds.meta_data.hostname }} {{ local_hostname }} localhost + localhost.localdomain localhost4 localhost4.localdomain4&#34; &gt;&gt;/etc/hosts + users: + - name: opc + sudo: ALL=(ALL) NOPASSWD:ALL + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: AzureMachineTemplate + name: ${CLUSTER_NAME}-control-plane + namespace: default + replicas: ${CONTROL_PLANE_MACHINE_COUNT} + version: ${KUBERNETES_VERSION} +--- +apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1 +kind: OCNEConfigTemplate +metadata: + name: ${CLUSTER_NAME}-md-0 + namespace: default +spec: + template: + spec: + clusterConfiguration: + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + joinConfiguration: + nodeRegistration: + kubeletExtraArgs: + cloud-provider: external + name: &#39;{{ local_hostname }}&#39; + preOCNECommands: + - hostnamectl set-hostname &#34;{{ ds.meta_data.hostname }}&#34; + - echo &#34;::1 ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6&#34; + &gt;/etc/hosts + - echo &#34;127.0.0.1 {{ ds.meta_data.hostname }} {{ local_hostname }} localhost + localhost.localdomain localhost4 localhost4.localdomain4&#34; &gt;&gt;/etc/hosts + users: + - name: opc + sudo: ALL=(ALL) NOPASSWD:ALL +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> + </details> +</li> +<li> +<p>Generate and apply the template by running the following command: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl generate yaml --from azure-capi.yaml | kubectl apply -f - +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +</ol> +<p>To view the status of the cluster and its resources, run: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl describe cluster $CLUSTER_NAME +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<p>To get the <code>kubeconfig</code> file, run: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl get kubeconfig ${CLUSTER_NAME} &gt; ${CLUSTER_NAME}.kubeconfig +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<h2 id="finish-cluster-configuration">Finish cluster configuration</h2> +<p>After the cluster resources are created, you must perform some additional steps to finish the configuration of the cluster.</p> +<ol> +<li>Install a cloud controller manager (CCM). A CCM is necessary when deploying cloud resources such as load balancers. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ helm install --kubeconfig=./${CLUSTER_NAME}.kubeconfig --repo https://raw.githubusercontent.com/kubernetes-sigs/cloud-provider-azure/master/helm/repo cloud-provider-azure --generate-name --set infra.clusterName=clusterName --set cloudControllerManager.clusterCIDR=&#34;192.168.0.0/16&#34; --set cloudControllerManager.caCertDir=/etc/pki/ca-trust +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></li> +<li>Install a container network interface (CNI). The following example uses the Calico CNI. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ helm repo add projectcalico https://docs.tigera.io/calico/charts --kubeconfig=./${CLUSTER_NAME}.kubeconfig &amp;&amp; \ +$ helm install calico projectcalico/tigera-operator --kubeconfig=./${CLUSTER_NAME}.kubeconfig -f https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/main/templates/addons/calico/values.yaml --namespace tigera-operator --create-namespace +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></li> +</ol> +<p>Your admin cluster and first managed cluster are now up and running and ready to deploy applications. You can add more managed clusters as needed.</p> +<p>For more information, refer to the documentation for Cluster API and Cluster API Azure:</p> +<ul> +<li><a href="https://cluster-api.sigs.k8s.io/introduction.html">Kubernetes Cluster API Documentation</a></li> +<li><a href="https://capz.sigs.k8s.io/introduction">The Cluster API Provider Azure Book</a></li> +</ul> +<h2 id="troubleshoot-the-deployment">Troubleshoot the deployment</h2> +<p>If the deployment of the Azure resources fails, then you can check the following log files to diagnose the issue:</p> +<p>The Azure cluster controller provider logs: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=infrastructure-azure +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +The OCNE control plane provider logs: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=control-plane-ocne +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<p><strong>NOTE</strong>: If a pod enters a <code>CrashLoopBackOff</code> state, then you can either restart the deployment or wait for the state to run its course. This is a known issue that should not affect the deployment of your cluster.</p> +<h2 id="delete-the-clusters">Delete the clusters</h2> +<ol> +<li>Delete the managed clusters. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kubectl delete cluster $CLUSTER_NAME +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></li> +<li>Delete the admin cluster. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kind delete cluster +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></li> +</ol> +<p>Do not use <code>kubectl delete -f capi-quickstart.yaml</code> to delete the entire cluster template at once because it might leave behind pending resources that you need to clean up manually.</p> + + + + + + Docs: Create OCNE Clusters Running on VMware vSphere + /docs/advanced/ocne-vsphere/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /docs/advanced/ocne-vsphere/ + + + + + +<div class="alert alert-danger" role="alert"> +<h4 class="alert-heading">NOTE</h4> + + This feature is experimental. It has not been thoroughly tested and is provided for informational purposes only. We make no guarantees about its safety or stability and do not recommend implementing this feature in production environments. + +</div> + +<p>The Cluster API project provides a standard set of Kubernetes-style APIs for cluster management. Officially, Verrazzano currently only supports using Cluster API to <a href="../../docs/setup/provision-cluster/">provision OCNE and OKE clusters on OCI</a>.</p> +<p>However, you can also experiment with using the features of the Cluster API project directly to deploy OCNE clusters on VMware vSphere.</p> +<p>For more information on Cluster API or Cluster API with vSphere, see:</p> +<ul> +<li><a href="https://cluster-api.sigs.k8s.io/introduction.html">Kubernetes Cluster API Documentation</a></li> +<li><a href="https://github.com/kubernetes-sigs/cluster-api-provider-vsphere">Kubernetes Cluster API Provider vSphere</a> +<ul> +<li><a href="https://github.com/kubernetes-sigs/cluster-api-provider-vsphere/blob/main/docs/getting_started.md">Getting started with Cluster API Provider vSphere</a></li> +</ul> +</li> +</ul> + + +<div class="alert alert-primary" role="alert"> +<h4 class="alert-heading">NOTE</h4> + + <p>Verrazzano and Cluster API use slightly different terminology for the same concepts:</p> +<ul> +<li>Admin cluster (Verrazzano) = management cluster (Cluster API)</li> +<li>Managed cluster (Verrazzano) = workload cluster (Cluster API)</li> +</ul> + + +</div> + +<h2 id="before-you-begin">Before you begin</h2> +<p>If you have an existing vSphere environment, you can ignore <a href="#set-up-a-vmware-software-defined-data-center">Set up a VMware Software-Defined Data Center</a> and start from <a href="#prepare-the-vm-environment">Prepare the VM environment</a>. Confirm that your environment meets the requirements as specified at <a href="https://github.com/kubernetes-sigs/cluster-api-provider-vsphere/blob/main/docs/getting_started.md#install-requirements">Cluster API Provider vSphere: Install Requirements</a>.</p> +<p>Otherwise, create a vSphere environment. We recommend using the Oracle Cloud VMware Solution as described in <a href="#set-up-a-vmware-software-defined-data-center">Set up a VMware Software-Defined Data Center</a>. It deploys a VMware software-defined data center (SDDC) on Oracle Cloud Infrastructure (OCI) and then integrates it with other Oracle services running on Oracle Cloud. This solution was developed in partnership with VMware to provide an environment that adheres to best practices recommended by VMware.</p> +<p>For more information on the Oracle Cloud VMware Solution, see <a href="https://docs.oracle.com/en/solutions/deploy-vmware-sddc-oci/index.html#GUID-860B8193-4612-4589-81DB-A8F63ADBD0F4">Deploy a highly available VMware-based SDDC to the cloud</a> in the Oracle Help Architecture Center.</p> +<h2 id="set-up-a-vmware-software-defined-data-center">Set up a VMware Software-Defined Data Center</h2> + + +<div class="alert alert-primary" role="alert"> +<h4 class="alert-heading">NOTE</h4> + + Skip this section if you have configured a vSphere environment or a VMware SDDC already. + +</div> + +<p>Use the Oracle Cloud VMware Solution to rapidly create a VMware SDDC.</p> +<ol> +<li> +<p>Set up a virtual cloud network (VCN). You can choose to use an existing VCN or let the Oracle Cloud VMware Solution create its own VCN as part of the SDDC provisioning process. If you use an existing VCN, then make sure it meets the requirements defined in <a href="https://docs.oracle.com/en/solutions/deploy-vmware-sddc-oci/deploy-sddc-cloud1.html#GUID-EC84353E-01A8-4F41-A43A-10A47C66611C">Prepare Your Deployment</a> in the Oracle Help Architecture Center.</p> +</li> +<li> +<p>Deploy the SDDC. To request a new VMware SDDC on OCI, follow the instructions at <a href="https://docs.oracle.com/en/solutions/deploy-vmware-sddc-oci/deploy-sddc-cloud1.html#GUID-8D3BD5B0-F603-4529-903F-641C24935720">Deploy the SDDC</a> in the Oracle Help Architecture Center.</p> +</li> +<li> +<p>Ensure that the various components were created successfully. Follow the instructions at <a href="https://docs.oracle.com/en/solutions/deploy-vmware-sddc-oci/deploy-sddc-cloud1.html#GUID-E170AD8F-7E51-44C6-93D9-DC332F3D8025">Monitor the SDDC Creation Process</a> in the Oracle Help Architecture Center.</p> +</li> +</ol> +<h2 id="prepare-the-vm-environment">Prepare the VM environment</h2> +<ol> +<li> +<p>Download an Oracle Linux 8 ISO image from <a href="https://yum.oracle.com/oracle-linux-isos.html">Oracle Linux Installation Media</a>.</p> +</li> +<li> +<p>Upload the Oracle Linux 8 ISO image to vSphere. Use the steps at <a href="https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-492D6904-7471-4D66-9555-9466CCCA6931.html">Upload ISO Image Installation Media for a Guest Operating System</a> in the vSphere documentation.</p> +</li> +<li> +<p>Deploy a VM by following the instructions at <a href="https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AE8AFBF1-75D1-4172-988C-378C35C9FAF2.html?hWord=N4IghgNiBcIEZgM4FMAEA3AtiAvkA">Create a Virtual Machine with the New Virtual Machine Wizard</a> in the vSphere documentation.</p> +</li> +<li> +<p>Install cloud-init on the VM. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ sudo yum install -y cloud-init +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Initialize cloud-init. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ cloud-init init --local +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +When cloud-init is successfully configured, it returns a message similar to the following: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ cloud-init v. 20.1.0011 running &#39;init-local&#39; at Fri, 01 Apr 2022 01:26:11 +0000. Up 38.70 seconds. +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Shut down the VM.</p> +</li> +<li> +<p>Convert the VM into a template and name it <code>OL8-Base-Template</code>. Follow the instructions at <a href="https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-5B3737CC-28DB-4334-BD18-6E12011CDC9F.html">Clone a Virtual Machine to a Template</a> in the vSphere documentation.</p> +</li> +</ol> +<h2 id="set-up-the-admin-cluster">Set up the admin cluster</h2> +<p>The Cluster API requires an initial cluster as a starting point to deploy its resources.</p> +<ol> +<li> +<p>Install kind. Follow the instructions at <a href="https://kind.sigs.k8s.io/docs/user/quick-start/#installation">Installation</a> in the kind documentation.</p> +</li> +<li> +<p>Create a Kubernetes cluster using kind. This cluster must be accessible by the VMware SDDC. Follow the instructions at <a href="https://cluster-api.sigs.k8s.io/user/quick-start#install-andor-configure-a-kubernetes-cluster">Quick Start: Install and/or configure a Kubernetes cluster</a> in The Cluster API Book.</p> +</li> +<li> +<p>Install the clusterctl CLI tool. clusterctl manages the lifecycle operations of a cluster API admin cluster. Follow instructions at <a href="https://cluster-api.sigs.k8s.io/user/quick-start.html#install-clusterctl">Quick Start: Install clusterctl</a> in the Cluster API Book.</p> +</li> +<li> +<p>Install the Verrazzano CLI tool using the instructions at <a href="../../docs/setup/install/prepare/cli-setup/">CLI Setup</a>.</p> +</li> +<li> +<p>Install Verrazzano on the cluster using either the <code>dev</code> or <code>prod</code> profile. Follow the instructions at <a href="../../docs/setup/install/perform/cli-installation/">Install with CLI</a>.</p> +</li> +<li> +<p>On the cluster, set the following vSphere environment variables. Update the values to reflect your own environment. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ export VSPHERE_PASSWORD=&#34;&lt;vmware-password&gt;&#34; +$ export VSPHERE_USERNAME=&#34;administrator@vsphere.local&#34; +$ export VSPHERE_SERVER=&#34;&lt;IP address or FQDN&gt;&#34; +$ export VSPHERE_DATACENTER=&#34;&lt;SDDC-Datacenter&gt;&#34; +$ export VSPHERE_DATASTORE=&#34;&lt;vSAN-Datastore&gt;&#34; +$ export VSPHERE_NETWORK=&#34;workload&#34; +$ export VSPHERE_RESOURCE_POOL=&#34;*/Resources/Workload&#34; +$ export VSPHERE_FOLDER=&#34;&lt;folder-name&gt;&#34; +$ export VSPHERE_TEMPLATE=&#34;OL8-Base-Template&#34; +$ export VSPHERE_SSH_AUTHORIZED_KEY=&#34;&lt;Public-SSH-Authorized-Key&gt;&#34; +$ export VSPHERE_TLS_THUMBPRINT=&#34;&lt;SHA1 thumbprint of vCenter certificate&gt;&#34; +$ export VSPHERE_STORAGE_POLICY=&#34;&#34; +$ export CONTROL_PLANE_ENDPOINT_IP=&#34;&lt;IP address or FQDN&gt;&#34; +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +For information on the values of the environment variables, see <a href="https://github.com/kubernetes-sigs/cluster-api-provider-vsphere/blob/main/docs/getting_started.md#configuring-and-installing-cluster-api-provider-vsphere-in-a-management-cluster">Configuring and installing Cluster API Provider vSphere in a management cluster</a> in the Cluster API Provider vSphere documentation.</p> +</li> +<li> +<p>Install the Cluster API Provider vSphere to initialize the admin cluster. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl init -n verrazzano-capi -i vsphere +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<p>clusterctl will report when the admin cluster was successfully initialized.</p> +</li> +</ol> +<h2 id="create-a-managed-cluster">Create a managed cluster</h2> +<p>The Cluster API uses a cluster template to deploy a predefined set of Cluster API objects and create a managed cluster.</p> +<ol> +<li> +<p>Copy the cluster template and save it locally as <code>vsphere-capi.yaml</code>.</p> + <details> + <summary><b>Click here for the cluster template</b></summary> + <style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>apiVersion: cluster.x-k8s.io/v1beta1 +kind: Cluster +metadata: + labels: + cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME} + name: ${CLUSTER_NAME} + namespace: ${NAMESPACE} +spec: + clusterNetwork: + pods: + cidrBlocks: + - ${POD_CIDR=192.168.0.0/16} + serviceDomain: cluster.local + services: + cidrBlocks: + - ${CLUSTER_CIDR=10.128.0.0/12} + controlPlaneRef: + apiVersion: controlplane.cluster.x-k8s.io/v1alpha1 + kind: OCNEControlPlane + name: ${CLUSTER_NAME}-control-plane + namespace: ${NAMESPACE} + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: VSphereCluster + name: ${CLUSTER_NAME} + namespace: ${NAMESPACE} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: VSphereCluster +metadata: + name: ${CLUSTER_NAME} + namespace: ${NAMESPACE} +spec: + controlPlaneEndpoint: + host: ${CONTROL_PLANE_ENDPOINT_IP} + port: 6443 + identityRef: + kind: Secret + name: ${CLUSTER_NAME} + server: ${VSPHERE_SERVER} + thumbprint: &#39;${VSPHERE_TLS_THUMBPRINT}&#39; +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: VSphereMachineTemplate +metadata: + name: ${CLUSTER_NAME}-control-plane + namespace: ${NAMESPACE} +spec: + template: + spec: + cloneMode: linkedClone + datacenter: ${VSPHERE_DATACENTER=oci-w01dc} + datastore: ${VSPHERE_DATASTORE=vsanDatastore} + diskGiB: ${VSPHERE_DISK=200} + folder: ${VSPHERE_FOLDER=CAPI} + memoryMiB: ${VSPHERE_MEMORY=32384} + network: + devices: + - dhcp4: true + networkName: &#34;${VSPHERE_NETWORK=workload}&#34; + numCPUs: ${VSPHERE_CPU=4} + os: Linux + resourcePool: &#39;${VSPHERE_RESOURCE_POOL=*/Resources/Workload}&#39; + server: &#39;${VSPHERE_SERVER=11.0.11.130}&#39; + storagePolicyName: ${VSPHERE_STORAGE_POLICY=&#34;&#34;} + template: ${VSPHERE_TEMPLATE=OL8-Base-Template} + thumbprint: &#39;${VSPHERE_TLS_THUMBPRINT}&#39; +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: VSphereMachineTemplate +metadata: + name: ${CLUSTER_NAME}-md-0 + namespace: ${NAMESPACE} +spec: + template: + spec: + cloneMode: linkedClone + datacenter: ${VSPHERE_DATACENTER=oci-w01dc} + datastore: ${VSPHERE_DATASTORE=vsanDatastore} + diskGiB: ${VSPHERE_DISK=200} + folder: ${VSPHERE_FOLDER=CAPI} + memoryMiB: ${VSPHERE_MEMORY=32384} + network: + devices: + - dhcp4: true + networkName: &#34;${VSPHERE_NETWORK=workload}&#34; + numCPUs: ${VSPHERE_CPU=4} + os: Linux + resourcePool: &#39;${VSPHERE_RESOURCE_POOL=*/Resources/Workload}&#39; + server: &#39;${VSPHERE_SERVER=11.0.11.130}&#39; + storagePolicyName: ${VSPHERE_STORAGE_POLICY=&#34;&#34;} + template: ${VSPHERE_TEMPLATE=OL8-Base-Template} + thumbprint: &#39;${VSPHERE_TLS_THUMBPRINT}&#39; +--- +apiVersion: controlplane.cluster.x-k8s.io/v1alpha1 +kind: OCNEControlPlane +metadata: + name: ${CLUSTER_NAME}-control-plane + namespace: ${NAMESPACE} +spec: + moduleOperator: + enabled: true + verrazzanoPlatformOperator: + enabled: true + controlPlaneConfig: + clusterConfiguration: + apiServer: + extraArgs: + cloud-provider: external + certSANs: + - localhost + - 127.0.0.1 + dns: + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + imageTag: ${DNS_TAG=v1.9.3} + etcd: + local: + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + imageTag: ${ETCD_TAG=3.5.6} + controllerManager: + extraArgs: + cloud-provider: external + networking: {} + scheduler: {} + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + files: + - content: | + apiVersion: v1 + kind: Pod + metadata: + creationTimestamp: null + name: kube-vip + namespace: kube-system + spec: + containers: + - args: + - manager + env: + - name: cp_enable + value: &#34;true&#34; + - name: vip_interface + value: &#34;&#34; + - name: address + value: ${CONTROL_PLANE_ENDPOINT_IP} + - name: port + value: &#34;6443&#34; + - name: vip_arp + value: &#34;true&#34; + - name: vip_leaderelection + value: &#34;true&#34; + - name: vip_leaseduration + value: &#34;15&#34; + - name: vip_renewdeadline + value: &#34;10&#34; + - name: vip_retryperiod + value: &#34;2&#34; + image: ghcr.io/kube-vip/kube-vip:v0.5.11 + imagePullPolicy: IfNotPresent + name: kube-vip + resources: {} + securityContext: + capabilities: + add: + - NET_ADMIN + - NET_RAW + volumeMounts: + - mountPath: /etc/kubernetes/admin.conf + name: kubeconfig + hostAliases: + - hostnames: + - kubernetes + ip: 127.0.0.1 + hostNetwork: true + volumes: + - hostPath: + path: /etc/kubernetes/admin.conf + type: FileOrCreate + name: kubeconfig + status: {} + owner: root:root + path: /etc/kubernetes/manifests/kube-vip.yaml + initConfiguration: + nodeRegistration: + criSocket: /var/run/crio/crio.sock + kubeletExtraArgs: + cloud-provider: external + name: &#39;{{ local_hostname }}&#39; + joinConfiguration: + discovery: {} + nodeRegistration: + criSocket: /var/run/crio/crio.sock + kubeletExtraArgs: + cloud-provider: external + name: &#39;{{ local_hostname }}&#39; + verbosity: 9 + preOCNECommands: + - hostnamectl set-hostname &#34;{{ ds.meta_data.hostname }}&#34; + - echo &#34;::1 ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6&#34; + &gt;/etc/hosts + - echo &#34;127.0.0.1 {{ ds.meta_data.hostname }} {{ local_hostname }} localhost + localhost.localdomain localhost4 localhost4.localdomain4&#34; &gt;&gt;/etc/hosts + users: + - name: opc + sshAuthorizedKeys: + - ${VSPHERE_SSH_AUTHORIZED_KEY} + sudo: ALL=(ALL) NOPASSWD:ALL + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: VSphereMachineTemplate + name: ${CLUSTER_NAME}-control-plane + namespace: ${NAMESPACE} + replicas: ${CONTROL_PLANE_MACHINE_COUNT=1} + version: ${KUBERNETES_VERSION=v1.26.6} +--- +apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1 +kind: OCNEConfigTemplate +metadata: + name: ${CLUSTER_NAME}-md-0 + namespace: ${NAMESPACE} +spec: + template: + spec: + clusterConfiguration: + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + joinConfiguration: + nodeRegistration: + kubeletExtraArgs: + cloud-provider: external + name: &#39;{{ local_hostname }}&#39; + verbosity: 9 + preOCNECommands: + - hostnamectl set-hostname &#34;{{ ds.meta_data.hostname }}&#34; + - echo &#34;::1 ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6&#34; + &gt;/etc/hosts + - echo &#34;127.0.0.1 {{ ds.meta_data.hostname }} {{ local_hostname }} localhost + localhost.localdomain localhost4 localhost4.localdomain4&#34; &gt;&gt;/etc/hosts + users: + - name: opc + sshAuthorizedKeys: + - ${VSPHERE_SSH_AUTHORIZED_KEY} + sudo: ALL=(ALL) NOPASSWD:ALL +--- +apiVersion: cluster.x-k8s.io/v1beta1 +kind: MachineDeployment +metadata: + labels: + cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME} + name: ${CLUSTER_NAME}-md-0 + namespace: ${NAMESPACE} +spec: + clusterName: ${CLUSTER_NAME} + replicas: ${NODE_MACHINE_COUNT=3} + selector: + matchLabels: {} + template: + metadata: + labels: + cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME} + spec: + bootstrap: + configRef: + apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1 + kind: OCNEConfigTemplate + name: ${CLUSTER_NAME}-md-0 + clusterName: ${CLUSTER_NAME} + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: VSphereMachineTemplate + name: ${CLUSTER_NAME}-md-0 + version: ${KUBERNETES_VERSION=v1.26.6} +--- +apiVersion: addons.cluster.x-k8s.io/v1beta1 +kind: ClusterResourceSet +metadata: + name: ${CLUSTER_NAME}-crs-0 + namespace: ${NAMESPACE} +spec: + clusterSelector: + matchLabels: + cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME} + resources: + - kind: Secret + name: ${CLUSTER_NAME}-vsphere-csi-controller + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-controller-role + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-controller-binding + - kind: Secret + name: ${CLUSTER_NAME}-csi-vsphere-config + - kind: ConfigMap + name: csi.vsphere.vmware.com + - kind: ConfigMap + name: vsphere-csi-controller-sa + - kind: ConfigMap + name: vsphere-csi-node-sa + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-node-cluster-role + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-node-cluster-role-binding + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-node-role + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-node-binding + - kind: ConfigMap + name: ${CLUSTER_NAME}-internal-feature-states.csi.vsphere.vmware.com + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-controller-service + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-controller + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-node + - kind: ConfigMap + name: ${CLUSTER_NAME}-vsphere-csi-node-windows + - kind: Secret + name: ${CLUSTER_NAME}-cloud-controller-manager + - kind: Secret + name: ${CLUSTER_NAME}-cloud-provider-vsphere-credentials + - kind: ConfigMap + name: ${CLUSTER_NAME}-cpi-manifests + strategy: Reconcile +--- +apiVersion: v1 +kind: Secret +metadata: + name: ${CLUSTER_NAME} + namespace: ${NAMESPACE} +stringData: + password: ${VSPHERE_PASSWORD} + username: ${VSPHERE_USERNAME} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-controller + namespace: ${NAMESPACE} +data: + data: | + apiVersion: v1 + kind: ServiceAccount + metadata: + name: vsphere-csi-controller + namespace: kube-system +--- +apiVersion: v1 +data: + data: | + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRole + metadata: + name: vsphere-csi-controller-role + rules: + - apiGroups: [&#34;&#34;] + resources: [&#34;nodes&#34;, &#34;pods&#34;, &#34;configmaps&#34;] + verbs: [&#34;get&#34;, &#34;list&#34;, &#34;watch&#34;] + - apiGroups: [&#34;&#34;] + resources: [&#34;persistentvolumeclaims&#34;] + verbs: [&#34;get&#34;, &#34;list&#34;, &#34;watch&#34;, &#34;update&#34;] + - apiGroups: [&#34;&#34;] + resources: [&#34;persistentvolumeclaims/status&#34;] + verbs: [&#34;patch&#34;] + - apiGroups: [&#34;&#34;] + resources: [&#34;persistentvolumes&#34;] + verbs: [&#34;get&#34;, &#34;list&#34;, &#34;watch&#34;, &#34;create&#34;, &#34;update&#34;, &#34;delete&#34;, &#34;patch&#34;] + - apiGroups: [&#34;&#34;] + resources: [&#34;events&#34;] + verbs: [&#34;get&#34;, &#34;list&#34;, &#34;watch&#34;, &#34;create&#34;, &#34;update&#34;, &#34;patch&#34;] + - apiGroups: [&#34;coordination.k8s.io&#34;] + resources: [&#34;leases&#34;] + verbs: [&#34;get&#34;, &#34;watch&#34;, &#34;list&#34;, &#34;delete&#34;, &#34;update&#34;, &#34;create&#34;] + - apiGroups: [&#34;storage.k8s.io&#34;] + resources: [&#34;storageclasses&#34;, &#34;csinodes&#34;] + verbs: [&#34;get&#34;, &#34;list&#34;, &#34;watch&#34;] + - apiGroups: [&#34;storage.k8s.io&#34;] + resources: [&#34;volumeattachments&#34;] + verbs: [&#34;get&#34;, &#34;list&#34;, &#34;watch&#34;, &#34;patch&#34;] + - apiGroups: [&#34;cns.vmware.com&#34;] + resources: [&#34;triggercsifullsyncs&#34;] + verbs: [&#34;create&#34;, &#34;get&#34;, &#34;update&#34;, &#34;watch&#34;, &#34;list&#34;] + - apiGroups: [&#34;cns.vmware.com&#34;] + resources: [&#34;cnsvspherevolumemigrations&#34;] + verbs: [&#34;create&#34;, &#34;get&#34;, &#34;list&#34;, &#34;watch&#34;, &#34;update&#34;, &#34;delete&#34;] + - apiGroups: [&#34;apiextensions.k8s.io&#34;] + resources: [&#34;customresourcedefinitions&#34;] + verbs: [&#34;get&#34;, &#34;create&#34;, &#34;update&#34;] + - apiGroups: [&#34;storage.k8s.io&#34;] + resources: [&#34;volumeattachments/status&#34;] + verbs: [&#34;patch&#34;] + - apiGroups: [&#34;cns.vmware.com&#34;] + resources: [&#34;cnsvolumeoperationrequests&#34;] + verbs: [&#34;create&#34;, &#34;get&#34;, &#34;list&#34;, &#34;update&#34;, &#34;delete&#34;] + - apiGroups: [ &#34;snapshot.storage.k8s.io&#34; ] + resources: [ &#34;volumesnapshots&#34; ] + verbs: [ &#34;get&#34;, &#34;list&#34; ] + - apiGroups: [ &#34;snapshot.storage.k8s.io&#34; ] + resources: [ &#34;volumesnapshotclasses&#34; ] + verbs: [ &#34;watch&#34;, &#34;get&#34;, &#34;list&#34; ] + - apiGroups: [ &#34;snapshot.storage.k8s.io&#34; ] + resources: [ &#34;volumesnapshotcontents&#34; ] + verbs: [ &#34;create&#34;, &#34;get&#34;, &#34;list&#34;, &#34;watch&#34;, &#34;update&#34;, &#34;delete&#34;, &#34;patch&#34;] + - apiGroups: [ &#34;snapshot.storage.k8s.io&#34; ] + resources: [ &#34;volumesnapshotcontents/status&#34; ] + verbs: [ &#34;update&#34;, &#34;patch&#34; ] + - apiGroups: [ &#34;cns.vmware.com&#34; ] + resources: [ &#34;csinodetopologies&#34; ] + verbs: [&#34;get&#34;, &#34;update&#34;, &#34;watch&#34;, &#34;list&#34;] +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-controller-role + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: vsphere-csi-controller-binding + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: vsphere-csi-controller-role + subjects: + - kind: ServiceAccount + name: vsphere-csi-controller + namespace: kube-system +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-controller-binding + namespace: ${NAMESPACE} +--- +apiVersion: v1 +kind: Secret +metadata: + name: ${CLUSTER_NAME}-csi-vsphere-config + namespace: ${NAMESPACE} +stringData: + data: | + apiVersion: v1 + kind: Secret + metadata: + name: csi-vsphere-config + namespace: kube-system + stringData: + csi-vsphere.conf: |+ + [Global] + thumbprint = &#34;${VSPHERE_TLS_THUMBPRINT}&#34; + cluster-id = &#34;${NAMESPACE}/${CLUSTER_NAME}&#34; + + [VirtualCenter &#34;${VSPHERE_SERVER}&#34;] + insecure-flag = &#34;true&#34; + user = &#34;${VSPHERE_USERNAME}&#34; + password = &#34;${VSPHERE_PASSWORD}&#34; + datacenters = &#34;${VSPHERE_DATACENTER}&#34; + targetvSANFileShareDatastoreURLs = &#34;${VSPHERE_DATASTORE_URL_SAN}&#34; + + [Network] + public-network = &#34;${VSPHERE_NETWORK=workload}&#34; + + type: Opaque +type: addons.cluster.x-k8s.io/resource-set +--- +apiVersion: v1 +data: + data: | + apiVersion: storage.k8s.io/v1 + kind: CSIDriver + metadata: + name: csi.vsphere.vmware.com + spec: + attachRequired: true + podInfoOnMount: false +kind: ConfigMap +metadata: + name: csi.vsphere.vmware.com + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + kind: ServiceAccount + apiVersion: v1 + metadata: + name: vsphere-csi-controller + namespace: kube-system +kind: ConfigMap +metadata: + name: vsphere-csi-controller-sa + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + kind: ServiceAccount + apiVersion: v1 + metadata: + name: vsphere-csi-node + namespace: kube-system +kind: ConfigMap +metadata: + name: vsphere-csi-node-sa + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRole + metadata: + name: vsphere-csi-node-cluster-role + rules: + - apiGroups: [&#34;cns.vmware.com&#34;] + resources: [&#34;csinodetopologies&#34;] + verbs: [&#34;create&#34;, &#34;watch&#34;, &#34;get&#34;, &#34;patch&#34;] + - apiGroups: [&#34;&#34;] + resources: [&#34;nodes&#34;] + verbs: [&#34;get&#34;] +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-node-cluster-role + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + kind: ClusterRoleBinding + apiVersion: rbac.authorization.k8s.io/v1 + metadata: + name: vsphere-csi-node-cluster-role-binding + subjects: + - kind: ServiceAccount + name: vsphere-csi-node + namespace: kube-system + roleRef: + kind: ClusterRole + name: vsphere-csi-node-cluster-role + apiGroup: rbac.authorization.k8s.io +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-node-cluster-role-binding + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + kind: Role + apiVersion: rbac.authorization.k8s.io/v1 + metadata: + name: vsphere-csi-node-role + namespace: kube-system + rules: + - apiGroups: [&#34;&#34;] + resources: [&#34;configmaps&#34;] + verbs: [&#34;get&#34;, &#34;list&#34;, &#34;watch&#34;] +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-node-role + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + kind: RoleBinding + apiVersion: rbac.authorization.k8s.io/v1 + metadata: + name: vsphere-csi-node-binding + namespace: kube-system + subjects: + - kind: ServiceAccount + name: vsphere-csi-node + namespace: kube-system + roleRef: + kind: Role + name: vsphere-csi-node-role + apiGroup: rbac.authorization.k8s.io +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-node-binding + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + apiVersion: v1 + data: + &#34;csi-migration&#34;: &#34;true&#34; + &#34;csi-auth-check&#34;: &#34;true&#34; + &#34;online-volume-extend&#34;: &#34;true&#34; + &#34;trigger-csi-fullsync&#34;: &#34;false&#34; + &#34;async-query-volume&#34;: &#34;true&#34; + &#34;improved-csi-idempotency&#34;: &#34;true&#34; + &#34;improved-volume-topology&#34;: &#34;true&#34; + &#34;block-volume-snapshot&#34;: &#34;true&#34; + &#34;csi-windows-support&#34;: &#34;false&#34; + &#34;use-csinode-id&#34;: &#34;true&#34; + &#34;list-volumes&#34;: &#34;false&#34; + &#34;pv-to-backingdiskobjectid-mapping&#34;: &#34;false&#34; + &#34;cnsmgr-suspend-create-volume&#34;: &#34;true&#34; + &#34;topology-preferential-datastores&#34;: &#34;true&#34; + &#34;max-pvscsi-targets-per-vm&#34;: &#34;true&#34; + kind: ConfigMap + metadata: + name: internal-feature-states.csi.vsphere.vmware.com + namespace: kube-system +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-internal-feature-states.csi.vsphere.vmware.com + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + apiVersion: v1 + kind: Service + metadata: + name: vsphere-csi-controller + namespace: kube-system + labels: + app: vsphere-csi-controller + spec: + ports: + - name: ctlr + port: 2112 + targetPort: 2112 + protocol: TCP + - name: syncer + port: 2113 + targetPort: 2113 + protocol: TCP + selector: + app: vsphere-csi-controller +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-controller-service + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + kind: Deployment + apiVersion: apps/v1 + metadata: + name: vsphere-csi-controller + namespace: kube-system + spec: + replicas: 1 + strategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 1 + maxSurge: 0 + selector: + matchLabels: + app: vsphere-csi-controller + template: + metadata: + labels: + app: vsphere-csi-controller + role: vsphere-csi + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: &#34;app&#34; + operator: In + values: + - vsphere-csi-controller + topologyKey: &#34;kubernetes.io/hostname&#34; + serviceAccountName: vsphere-csi-controller + nodeSelector: + node-role.kubernetes.io/control-plane: &#34;&#34; + tolerations: + - key: node-role.kubernetes.io/master + operator: Exists + effect: NoSchedule + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule + # uncomment below toleration if you need an aggressive pod eviction in case when + # node becomes not-ready or unreachable. Default is 300 seconds if not specified. + #- key: node.kubernetes.io/not-ready + # operator: Exists + # effect: NoExecute + # tolerationSeconds: 30 + #- key: node.kubernetes.io/unreachable + # operator: Exists + # effect: NoExecute + # tolerationSeconds: 30 + dnsPolicy: &#34;Default&#34; + containers: + - name: csi-attacher + image: k8s.gcr.io/sig-storage/csi-attacher:v3.5.0 + args: + - &#34;--v=4&#34; + - &#34;--timeout=300s&#34; + - &#34;--csi-address=$(ADDRESS)&#34; + - &#34;--leader-election&#34; + - &#34;--kube-api-qps=100&#34; + - &#34;--kube-api-burst=100&#34; + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - mountPath: /csi + name: socket-dir + - name: csi-resizer + image: k8s.gcr.io/sig-storage/csi-resizer:v1.5.0 + args: + - &#34;--v=4&#34; + - &#34;--timeout=300s&#34; + - &#34;--handle-volume-inuse-error=false&#34; + - &#34;--csi-address=$(ADDRESS)&#34; + - &#34;--kube-api-qps=100&#34; + - &#34;--kube-api-burst=100&#34; + - &#34;--leader-election&#34; + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - mountPath: /csi + name: socket-dir + - name: vsphere-csi-controller + image: gcr.io/cloud-provider-vsphere/csi/release/driver:v2.7.0 + args: + - &#34;--fss-name=internal-feature-states.csi.vsphere.vmware.com&#34; + - &#34;--fss-namespace=$(CSI_NAMESPACE)&#34; + imagePullPolicy: &#34;Always&#34; + env: + - name: CSI_ENDPOINT + value: unix:///csi/csi.sock + - name: X_CSI_MODE + value: &#34;controller&#34; + - name: X_CSI_SPEC_DISABLE_LEN_CHECK + value: &#34;true&#34; + - name: X_CSI_SERIAL_VOL_ACCESS_TIMEOUT + value: 3m + - name: VSPHERE_CSI_CONFIG + value: &#34;/etc/cloud/csi-vsphere.conf&#34; + - name: LOGGER_LEVEL + value: &#34;PRODUCTION&#34; # Options: DEVELOPMENT, PRODUCTION + - name: INCLUSTER_CLIENT_QPS + value: &#34;100&#34; + - name: INCLUSTER_CLIENT_BURST + value: &#34;100&#34; + - name: CSI_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - mountPath: /etc/cloud + name: vsphere-config-volume + readOnly: true + - mountPath: /csi + name: socket-dir + ports: + - name: healthz + containerPort: 9808 + protocol: TCP + - name: prometheus + containerPort: 2112 + protocol: TCP + livenessProbe: + httpGet: + path: /healthz + port: healthz + initialDelaySeconds: 10 + timeoutSeconds: 3 + periodSeconds: 5 + failureThreshold: 3 + - name: liveness-probe + image: k8s.gcr.io/sig-storage/livenessprobe:v2.7.0 + args: + - &#34;--v=4&#34; + - &#34;--csi-address=/csi/csi.sock&#34; + volumeMounts: + - name: socket-dir + mountPath: /csi + - name: vsphere-syncer + image: gcr.io/cloud-provider-vsphere/csi/release/syncer:v2.7.0 + args: + - &#34;--leader-election&#34; + - &#34;--fss-name=internal-feature-states.csi.vsphere.vmware.com&#34; + - &#34;--fss-namespace=$(CSI_NAMESPACE)&#34; + imagePullPolicy: &#34;Always&#34; + ports: + - containerPort: 2113 + name: prometheus + protocol: TCP + env: + - name: FULL_SYNC_INTERVAL_MINUTES + value: &#34;30&#34; + - name: VSPHERE_CSI_CONFIG + value: &#34;/etc/cloud/csi-vsphere.conf&#34; + - name: LOGGER_LEVEL + value: &#34;PRODUCTION&#34; # Options: DEVELOPMENT, PRODUCTION + - name: INCLUSTER_CLIENT_QPS + value: &#34;100&#34; + - name: INCLUSTER_CLIENT_BURST + value: &#34;100&#34; + - name: GODEBUG + value: x509sha1=1 + - name: CSI_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - mountPath: /etc/cloud + name: vsphere-config-volume + readOnly: true + - name: csi-provisioner + image: k8s.gcr.io/sig-storage/csi-provisioner:v3.2.1 + args: + - &#34;--v=4&#34; + - &#34;--timeout=300s&#34; + - &#34;--csi-address=$(ADDRESS)&#34; + - &#34;--kube-api-qps=100&#34; + - &#34;--kube-api-burst=100&#34; + - &#34;--leader-election&#34; + - &#34;--default-fstype=ext4&#34; + # needed only for topology aware setup + #- &#34;--feature-gates=Topology=true&#34; + #- &#34;--strict-topology&#34; + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - mountPath: /csi + name: socket-dir + - name: csi-snapshotter + image: k8s.gcr.io/sig-storage/csi-snapshotter:v6.0.1 + args: + - &#34;--v=4&#34; + - &#34;--kube-api-qps=100&#34; + - &#34;--kube-api-burst=100&#34; + - &#34;--timeout=300s&#34; + - &#34;--csi-address=$(ADDRESS)&#34; + - &#34;--leader-election&#34; + env: + - name: ADDRESS + value: /csi/csi.sock + volumeMounts: + - mountPath: /csi + name: socket-dir + volumes: + - name: vsphere-config-volume + secret: + secretName: csi-vsphere-config + - name: socket-dir + emptyDir: {} + +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-controller + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + kind: DaemonSet + apiVersion: apps/v1 + metadata: + name: vsphere-csi-node + namespace: kube-system + spec: + selector: + matchLabels: + app: vsphere-csi-node + updateStrategy: + type: &#34;RollingUpdate&#34; + rollingUpdate: + maxUnavailable: 1 + template: + metadata: + labels: + app: vsphere-csi-node + role: vsphere-csi + spec: + nodeSelector: + kubernetes.io/os: linux + serviceAccountName: vsphere-csi-node + hostNetwork: true + dnsPolicy: &#34;ClusterFirstWithHostNet&#34; + containers: + - name: node-driver-registrar + image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.5.1 + args: + - &#34;--v=5&#34; + - &#34;--csi-address=$(ADDRESS)&#34; + - &#34;--kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)&#34; + env: + - name: ADDRESS + value: /csi/csi.sock + - name: DRIVER_REG_SOCK_PATH + value: /var/lib/kubelet/plugins/csi.vsphere.vmware.com/csi.sock + volumeMounts: + - name: plugin-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + livenessProbe: + exec: + command: + - /csi-node-driver-registrar + - --kubelet-registration-path=/var/lib/kubelet/plugins/csi.vsphere.vmware.com/csi.sock + - --mode=kubelet-registration-probe + initialDelaySeconds: 3 + - name: vsphere-csi-node + image: gcr.io/cloud-provider-vsphere/csi/release/driver:v2.7.0 + args: + - &#34;--fss-name=internal-feature-states.csi.vsphere.vmware.com&#34; + - &#34;--fss-namespace=$(CSI_NAMESPACE)&#34; + imagePullPolicy: &#34;Always&#34; + env: + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: CSI_ENDPOINT + value: unix:///csi/csi.sock + - name: MAX_VOLUMES_PER_NODE + value: &#34;59&#34; # Maximum number of volumes that controller can publish to the node. If value is not set or zero Kubernetes decide how many volumes can be published by the controller to the node. + - name: X_CSI_MODE + value: &#34;node&#34; + - name: X_CSI_SPEC_REQ_VALIDATION + value: &#34;false&#34; + - name: X_CSI_SPEC_DISABLE_LEN_CHECK + value: &#34;true&#34; + - name: LOGGER_LEVEL + value: &#34;PRODUCTION&#34; # Options: DEVELOPMENT, PRODUCTION + - name: GODEBUG + value: x509sha1=1 + - name: CSI_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODEGETINFO_WATCH_TIMEOUT_MINUTES + value: &#34;1&#34; + securityContext: + privileged: true + capabilities: + add: [&#34;SYS_ADMIN&#34;] + allowPrivilegeEscalation: true + volumeMounts: + - name: plugin-dir + mountPath: /csi + - name: pods-mount-dir + mountPath: /var/lib/kubelet + # needed so that any mounts setup inside this container are + # propagated back to the host machine. + mountPropagation: &#34;Bidirectional&#34; + - name: device-dir + mountPath: /dev + - name: blocks-dir + mountPath: /sys/block + - name: sys-devices-dir + mountPath: /sys/devices + ports: + - name: healthz + containerPort: 9808 + protocol: TCP + livenessProbe: + httpGet: + path: /healthz + port: healthz + initialDelaySeconds: 10 + timeoutSeconds: 5 + periodSeconds: 5 + failureThreshold: 3 + - name: liveness-probe + image: k8s.gcr.io/sig-storage/livenessprobe:v2.7.0 + args: + - &#34;--v=4&#34; + - &#34;--csi-address=/csi/csi.sock&#34; + volumeMounts: + - name: plugin-dir + mountPath: /csi + volumes: + - name: registration-dir + hostPath: + path: /var/lib/kubelet/plugins_registry + type: Directory + - name: plugin-dir + hostPath: + path: /var/lib/kubelet/plugins/csi.vsphere.vmware.com + type: DirectoryOrCreate + - name: pods-mount-dir + hostPath: + path: /var/lib/kubelet + type: Directory + - name: device-dir + hostPath: + path: /dev + - name: blocks-dir + hostPath: + path: /sys/block + type: Directory + - name: sys-devices-dir + hostPath: + path: /sys/devices + type: Directory + tolerations: + - effect: NoExecute + operator: Exists + - effect: NoSchedule + operator: Exists +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-node + namespace: ${NAMESPACE} +--- +apiVersion: v1 +data: + data: | + kind: DaemonSet + apiVersion: apps/v1 + metadata: + name: vsphere-csi-node-windows + namespace: kube-system + spec: + selector: + matchLabels: + app: vsphere-csi-node-windows + updateStrategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 1 + template: + metadata: + labels: + app: vsphere-csi-node-windows + role: vsphere-csi-windows + spec: + nodeSelector: + kubernetes.io/os: windows + serviceAccountName: vsphere-csi-node + containers: + - name: node-driver-registrar + image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.5.1 + args: + - &#34;--v=5&#34; + - &#34;--csi-address=$(ADDRESS)&#34; + - &#34;--kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)&#34; + env: + - name: ADDRESS + value: &#39;unix://C:\\csi\\csi.sock&#39; + - name: DRIVER_REG_SOCK_PATH + value: &#39;C:\\var\\lib\\kubelet\\plugins\\csi.vsphere.vmware.com\\csi.sock&#39; + volumeMounts: + - name: plugin-dir + mountPath: /csi + - name: registration-dir + mountPath: /registration + livenessProbe: + exec: + command: + - /csi-node-driver-registrar.exe + - --kubelet-registration-path=C:\\var\\lib\\kubelet\\plugins\\csi.vsphere.vmware.com\\csi.sock + - --mode=kubelet-registration-probe + initialDelaySeconds: 3 + - name: vsphere-csi-node + image: gcr.io/cloud-provider-vsphere/csi/release/driver:v2.7.0 + args: + - &#34;--fss-name=internal-feature-states.csi.vsphere.vmware.com&#34; + - &#34;--fss-namespace=$(CSI_NAMESPACE)&#34; + imagePullPolicy: &#34;Always&#34; + env: + - name: NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: CSI_ENDPOINT + value: &#39;unix://C:\\csi\\csi.sock&#39; + - name: MAX_VOLUMES_PER_NODE + value: &#34;59&#34; # Maximum number of volumes that controller can publish to the node. If value is not set or zero Kubernetes decide how many volumes can be published by the controller to the node. + - name: X_CSI_MODE + value: node + - name: X_CSI_SPEC_REQ_VALIDATION + value: &#39;false&#39; + - name: X_CSI_SPEC_DISABLE_LEN_CHECK + value: &#34;true&#34; + - name: LOGGER_LEVEL + value: &#34;PRODUCTION&#34; # Options: DEVELOPMENT, PRODUCTION + - name: X_CSI_LOG_LEVEL + value: DEBUG + - name: CSI_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NODEGETINFO_WATCH_TIMEOUT_MINUTES + value: &#34;1&#34; + volumeMounts: + - name: plugin-dir + mountPath: &#39;C:\csi&#39; + - name: pods-mount-dir + mountPath: &#39;C:\var\lib\kubelet&#39; + - name: csi-proxy-volume-v1 + mountPath: \\.\pipe\csi-proxy-volume-v1 + - name: csi-proxy-filesystem-v1 + mountPath: \\.\pipe\csi-proxy-filesystem-v1 + - name: csi-proxy-disk-v1 + mountPath: \\.\pipe\csi-proxy-disk-v1 + - name: csi-proxy-system-v1alpha1 + mountPath: \\.\pipe\csi-proxy-system-v1alpha1 + ports: + - name: healthz + containerPort: 9808 + protocol: TCP + livenessProbe: + httpGet: + path: /healthz + port: healthz + initialDelaySeconds: 10 + timeoutSeconds: 5 + periodSeconds: 5 + failureThreshold: 3 + - name: liveness-probe + image: k8s.gcr.io/sig-storage/livenessprobe:v2.7.0 + args: + - &#34;--v=4&#34; + - &#34;--csi-address=/csi/csi.sock&#34; + volumeMounts: + - name: plugin-dir + mountPath: /csi + volumes: + - name: registration-dir + hostPath: + path: &#39;C:\var\lib\kubelet\plugins_registry\&#39; + type: Directory + - name: plugin-dir + hostPath: + path: &#39;C:\var\lib\kubelet\plugins\csi.vsphere.vmware.com\&#39; + type: DirectoryOrCreate + - name: pods-mount-dir + hostPath: + path: \var\lib\kubelet + type: Directory + - name: csi-proxy-disk-v1 + hostPath: + path: \\.\pipe\csi-proxy-disk-v1 + type: &#39;&#39; + - name: csi-proxy-volume-v1 + hostPath: + path: \\.\pipe\csi-proxy-volume-v1 + type: &#39;&#39; + - name: csi-proxy-filesystem-v1 + hostPath: + path: \\.\pipe\csi-proxy-filesystem-v1 + type: &#39;&#39; + - name: csi-proxy-system-v1alpha1 + hostPath: + path: \\.\pipe\csi-proxy-system-v1alpha1 + type: &#39;&#39; + tolerations: + - effect: NoExecute + operator: Exists + - effect: NoSchedule + operator: Exists +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-vsphere-csi-node-windows + namespace: ${NAMESPACE} +--- +apiVersion: v1 +kind: Secret +metadata: + name: ${CLUSTER_NAME}-cloud-controller-manager + namespace: ${NAMESPACE} +stringData: + data: | + apiVersion: v1 + kind: ServiceAccount + metadata: + labels: + component: cloud-controller-manager + vsphere-cpi-infra: service-account + name: cloud-controller-manager + namespace: kube-system +type: addons.cluster.x-k8s.io/resource-set +--- +apiVersion: v1 +kind: Secret +metadata: + name: ${CLUSTER_NAME}-cloud-provider-vsphere-credentials + namespace: ${NAMESPACE} +stringData: + data: | + apiVersion: v1 + kind: Secret + metadata: + labels: + component: cloud-controller-manager + vsphere-cpi-infra: secret + name: cloud-provider-vsphere-credentials + namespace: kube-system + stringData: + ${VSPHERE_SERVER}.password: ${VSPHERE_PASSWORD} + ${VSPHERE_SERVER}.username: ${VSPHERE_USERNAME} + type: Opaque +type: addons.cluster.x-k8s.io/resource-set +--- +apiVersion: v1 +data: + data: | + --- + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRole + metadata: + labels: + component: cloud-controller-manager + vsphere-cpi-infra: role + name: system:cloud-controller-manager + rules: + - apiGroups: + - &#34;&#34; + resources: + - events + verbs: + - create + - patch + - update + - apiGroups: + - &#34;&#34; + resources: + - nodes + verbs: + - &#39;*&#39; + - apiGroups: + - &#34;&#34; + resources: + - nodes/status + verbs: + - patch + - apiGroups: + - &#34;&#34; + resources: + - services + verbs: + - list + - patch + - update + - watch + - apiGroups: + - &#34;&#34; + resources: + - services/status + verbs: + - patch + - apiGroups: + - &#34;&#34; + resources: + - serviceaccounts + verbs: + - create + - get + - list + - watch + - update + - apiGroups: + - &#34;&#34; + resources: + - persistentvolumes + verbs: + - get + - list + - watch + - update + - apiGroups: + - &#34;&#34; + resources: + - endpoints + verbs: + - create + - get + - list + - watch + - update + - apiGroups: + - &#34;&#34; + resources: + - secrets + verbs: + - get + - list + - watch + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - watch + - list + - update + - create + --- + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + labels: + component: cloud-controller-manager + vsphere-cpi-infra: cluster-role-binding + name: system:cloud-controller-manager + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:cloud-controller-manager + subjects: + - kind: ServiceAccount + name: cloud-controller-manager + namespace: kube-system + - kind: User + name: cloud-controller-manager + --- + apiVersion: v1 + data: + vsphere.conf: | + global: + port: 443 + secretName: cloud-provider-vsphere-credentials + secretNamespace: kube-system + thumbprint: &#39;${VSPHERE_TLS_THUMBPRINT}&#39; + vcenter: + ${VSPHERE_SERVER}: + datacenters: + - &#39;${VSPHERE_DATACENTER}&#39; + server: &#39;${VSPHERE_SERVER}&#39; + kind: ConfigMap + metadata: + name: vsphere-cloud-config + namespace: kube-system + --- + apiVersion: rbac.authorization.k8s.io/v1 + kind: RoleBinding + metadata: + labels: + component: cloud-controller-manager + vsphere-cpi-infra: role-binding + name: servicecatalog.k8s.io:apiserver-authentication-reader + namespace: kube-system + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: extension-apiserver-authentication-reader + subjects: + - kind: ServiceAccount + name: cloud-controller-manager + namespace: kube-system + - kind: User + name: cloud-controller-manager + --- + apiVersion: apps/v1 + kind: DaemonSet + metadata: + labels: + component: cloud-controller-manager + tier: control-plane + name: vsphere-cloud-controller-manager + namespace: kube-system + spec: + selector: + matchLabels: + name: vsphere-cloud-controller-manager + template: + metadata: + labels: + component: cloud-controller-manager + name: vsphere-cloud-controller-manager + tier: control-plane + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: node-role.kubernetes.io/control-plane + operator: Exists + - matchExpressions: + - key: node-role.kubernetes.io/master + operator: Exists + containers: + - args: + - --v=2 + - --cloud-provider=vsphere + - --cloud-config=/etc/cloud/vsphere.conf + image: gcr.io/cloud-provider-vsphere/cpi/release/manager:v1.25.3 + name: vsphere-cloud-controller-manager + resources: + requests: + cpu: 200m + volumeMounts: + - mountPath: /etc/cloud + name: vsphere-config-volume + readOnly: true + hostNetwork: true + priorityClassName: system-node-critical + securityContext: + runAsUser: 1001 + serviceAccountName: cloud-controller-manager + tolerations: + - effect: NoSchedule + key: node.cloudprovider.kubernetes.io/uninitialized + value: &#34;true&#34; + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Exists + - effect: NoSchedule + key: node.kubernetes.io/not-ready + operator: Exists + volumes: + - configMap: + name: vsphere-cloud-config + name: vsphere-config-volume + updateStrategy: + type: RollingUpdate +kind: ConfigMap +metadata: + name: ${CLUSTER_NAME}-cpi-manifests + namespace: ${NAMESPACE} + + + + +--- +apiVersion: addons.cluster.x-k8s.io/v1beta1 +kind: ClusterResourceSet +metadata: + name: ${CLUSTER_NAME}-calico-module-resource + namespace: ${NAMESPACE} +spec: + clusterSelector: + matchLabels: + cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME} + resources: + - kind: ConfigMap + name: ${CLUSTER_NAME}-calico-module-cr + strategy: Reconcile +--- +apiVersion: v1 +data: + calico.yaml: | + apiVersion: platform.verrazzano.io/v1alpha1 + kind: Module + metadata: + name: calico + namespace: default + spec: + moduleName: calico + targetNamespace: default + values: + tigeraOperator: + version: ${TIGERA_TAG=v1.29.0} + installation: + cni: + type: Calico + calicoNetwork: + bgp: Disabled + ipPools: + - cidr: ${POD_CIDR=192.168.0.0/16} + encapsulation: VXLAN + registry: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com} + imagePath: ${OCNE_IMAGE_PATH=olcne} +kind: ConfigMap +metadata: + annotations: + note: generated + labels: + type: generated + name: ${CLUSTER_NAME}-calico-module-cr + namespace: ${NAMESPACE} +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> + </details> +</li> +<li> +<p>Generate and apply the template by running the following command: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl generate yaml --from vsphere-capi.yaml | kubectl apply -f - +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +</ol> +<p>To get the <code>kubeconfig</code> file, run: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl get kubeconfig kluster1 -n kluster1 &gt; kluster1 +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<h2 id="finish-cluster-configuration">Finish cluster configuration</h2> +<p>After the cluster resources are created, you must perform some additional steps to finish the configuration of the cluster.</p> +<ol> +<li> +<p>If vSphere does not have a load balancer, then you can deploy MetalLB. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ export KUBECONFIG=kluster1 + +ADDRESS_RANGE=${1:-&#34;subnet-from-vSphere-network&#34;}; + +$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml --wait=true; +$ kubectl rollout status deployment -n metallb-system controller -w; +$ kubectl apply -f - &lt;&lt;EOF1 + apiVersion: metallb.io/v1beta1 + kind: IPAddressPool + metadata: + name: vzlocalpool + namespace: metallb-system + spec: + addresses: + - ${ADDRESS_RANGE} +EOF1 + +$ kubectl apply -f - &lt;&lt;-EOF2 + apiVersion: metallb.io/v1beta1 + kind: L2Advertisement + metadata: + name: vzmetallb + namespace: metallb-system + spec: + ipAddressPools: + - vzlocalpool +EOF2 + +$ sleep 10; +$ kubectl wait --namespace metallb-system --for=condition=ready pod --all --timeout=300s +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Create a default storage class on the cluster. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ export KUBECONFIG=kluster1 +$ kubectl apply -f - &lt;&lt;-EOF + kind: StorageClass + apiVersion: storage.k8s.io/v1 + metadata: + name: vmware-sc + annotations: + storageclass.kubernetes.io/is-default-class: &#34;true&#34; + provisioner: csi.vsphere.vmware.com + volumeBindingMode: WaitForFirstConsumer +EOF +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Install Verrazzano on the managed cluster. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ export KUBECONFIG=kluster1 + +$ vz install -f - &lt;&lt;EOF + apiVersion: install.verrazzano.io/v1beta1 + kind: Verrazzano + metadata: + name: example-verrazzano + spec: + profile: dev + defaultVolumeSource: + persistentVolumeClaim: + claimName: verrazzano-storage + volumeClaimSpecTemplates: + - metadata: + name: verrazzano-storage + spec: + resources: + requests: + storage: 2Gi +EOF +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +</ol> +<p>Your admin cluster and first managed cluster are now up and running and ready to deploy applications. You can also add more managed clusters.</p> +<p>For more information, refer to the documentation for Cluster API and Cluster API vSphere:</p> +<ul> +<li><a href="https://cluster-api.sigs.k8s.io/introduction.html">Kubernetes Cluster API Documentation</a></li> +<li><a href="https://github.com/kubernetes-sigs/cluster-api-provider-vsphere">Kubernetes Cluster API Provider vSphere</a></li> +</ul> +<h2 id="troubleshoot-the-deployment">Troubleshoot the deployment</h2> +<p>If the deployment of the vSphere resources fails, then you can check the log files to diagnose the issue.</p> +<p>The vSphere cluster controller provider logs: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=infrastructure-vsphere +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<p>The OCNE control plane provider logs: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=control-plane-ocne +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<p><strong>NOTE</strong>: If the CSI pod deploys before Calico, then the pod may enter a <code>CrashLoop</code> state. Restart the pod to fix the issue.</p> +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kubectl --kubeconfig kluster1 scale deploy -n kube-system vsphere-csi-controller --replicas=0 +$ kubectl --kubeconfig kluster1 scale deploy -n kube-system vsphere-csi-controller --replicas=1 +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +<h2 id="delete-the-clusters">Delete the clusters</h2> +<ol> +<li>Delete the managed clusters. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kubectl delete cluster $CLUSTER_NAME +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></li> +<li>Delete the admin cluster. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kind delete cluster +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></li> +</ol> +<p>Do not use <code>kubectl delete -f capi-quickstart.yaml</code> to delete the entire cluster template at once because it might leave behind pending resources that you need to clean up manually.</p> + + + + + + diff --git a/v1.7/docs/advanced/ocne-azure/index.html b/v1.7/docs/advanced/ocne-azure/index.html new file mode 100644 index 0000000000..ad7a7e8682 --- /dev/null +++ b/v1.7/docs/advanced/ocne-azure/index.html @@ -0,0 +1,3114 @@ + + + + + + + + + + + + + + + + + + + + +Create OCNE Clusters Running on Microsoft Azure | Verrazzano Enterprise Container Platform + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ + +
+ + + + + +
+

Create OCNE Clusters Running on Microsoft Azure

+
Configure Oracle Cloud Native Environment self-managed clusters to run on Microsoft Azure
+ + + + + +

The Cluster API project provides a standard set of Kubernetes-style APIs for cluster management. Officially, Verrazzano currently only supports using Cluster API to provision OCNE and OKE clusters on OCI.

+

However, you can also experiment with using the features of the Cluster API project directly to deploy OCNE clusters on Microsoft Azure.

+

For more information on Cluster API or Cluster API with Azure, see:

+ + + + + +

Prepare Azure resources

+

Before you can deploy a Cluster API cluster, you need to set up a few resources in Azure.

+
    +
  1. Install the Azure command-line interface (CLI) tool. For instructions, see How to install the Azure CLI in the Microsoft Azure documentation.
  2. +
  3. Create an Azure resource group. In the Azure CLI, run the following command: + + +
    +
    +
    $ az group create --name <ResourceGroupName> --location <location>
    +
    + +
    + + +For more detailed instructions, see Manage Azure Resource Groups by using Azure CLI in the Microsoft Azure documentation.
  4. +
  5. Create a service principal. Make sure it has the privileges it needs to create resources. This means a contributor role at minimum. The following example creates a service principal, assigns it the contributor role, and defines its scope. + + +
    +
    +
    $ az ad sp create-for-rbac  --name myServicePrincipalName \
    +                            --role Contributor \
    +                            --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
    +
    + +
    + + +For more detailed instructions, see Create an Azure service principal with Azure CLI in the Microsoft Azure documentation.
  6. +
+

Set up the admin cluster

+

The Cluster API requires an initial cluster as a starting point to deploy its resources.

+
    +
  1. +

    Install kind. Follow the instructions at Installation in the kind documentation.

    +
  2. +
  3. +

    Create a Kubernetes cluster using kind. Follow the instructions at Quick Start: Install and/or configure a Kubernetes cluster in The Cluster API Book.

    +
  4. +
  5. +

    Install the clusterctl CLI tool. clusterctl manages the lifecycle operations of a cluster API admin cluster. Follow the instructions at Quick Start: Install clusterctl in the Cluster API Book.

    +
  6. +
  7. +

    Install the Verrazzano CLI tool using the instructions at CLI Setup.

    +
  8. +
  9. +

    Install Verrazzano on the cluster using either the dev or prod installation profile. Follow the instructions at Install with CLI. The certManager and clusterAPI components are required and must remain enabled.

    +
  10. +
  11. +

    On the cluster, set environment variables for the following Azure resource IDs from your Azure account and from the service principal you created:

    +
      +
    • Subscription ID
    • +
    • Tenant ID
    • +
    • Client ID
    • +
    • Client Secret
    • +
    +

    For example: + + +

    +
    +
    # Azure resource  IDs
    +$ export AZURE_SUBSCRIPTION_ID="<SubscriptionId>"
    +$ export AZURE_TENANT_ID="<Tenant>"
    +$ export AZURE_CLIENT_ID="<AppId>"
    +$ export AZURE_CLIENT_SECRET="<Password>"
    +
    +# Base64 encode the Azure Resource IDs
    +$ export AZURE_SUBSCRIPTION_ID_B64="$(echo -n "$AZURE_SUBSCRIPTION_ID" | base64 | tr -d '\n')"
    +$ export AZURE_TENANT_ID_B64="$(echo -n "$AZURE_TENANT_ID" | base64 | tr -d '\n')"
    +$ export AZURE_CLIENT_ID_B64="$(echo -n "$AZURE_CLIENT_ID" | base64 | tr -d '\n')"
    +$ export AZURE_CLIENT_SECRET_B64="$(echo -n "$AZURE_CLIENT_SECRET" | base64 | tr -d '\n')"
    +
    +# Settings needed for AzureClusterIdentity used by the AzureCluster
    +$ export AZURE_CLUSTER_IDENTITY_SECRET_NAME="<cluster-identity-secret>"
    +$ export CLUSTER_IDENTITY_NAME="<cluster-identity>"
    +$ export AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE="default"
    +
    + +
    + +

    +
  12. +
  13. +

    Create a secret that includes the password of the service principal identity created in Azure. This secret is referenced by the AzureClusterIdentity used by the AzureCluster. + + +

    +
    +
    $ kubectl create secret generic "${AZURE_CLUSTER_IDENTITY_SECRET_NAME}" --from-literal=clientSecret="${AZURE_CLIENT_SECRET}" --namespace "${AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE}"
    +
    + +
    + +

    +
  14. +
  15. +

    Install the Cluster API Azure infrastructure provider. + + +

    +
    +
    $ clusterctl init -n verrazzano-capi -i azure
    +
    + +
    + +

    +

    clusterctl will report when the admin cluster was successfully initialized.

    +
  16. +
+

Create a managed cluster

+

The Cluster API uses a cluster template to deploy a predefined set of Cluster API objects and create a managed cluster.

+
    +
  1. +

    Set the following environment variables so they are available to the cluster template. Update the values to reflect your own environment. + + +

    +
    +
    # Base64 encoded SSH key for node access
    +$ export AZURE_SSH_PUBLIC_KEY_B64="<sshKey>"
    +  
    +# Select VM types.
    +$ export AZURE_CONTROL_PLANE_MACHINE_TYPE="Standard_D2s_v3"
    +$ export AZURE_NODE_MACHINE_TYPE="Standard_D2s_v3"
    + 
    +# [Optional] Select resource group. The default value is ${CLUSTER_NAME}.
    +$ export AZURE_RESOURCE_GROUP="<resourceGroupName>
    + 
    +# Name of the Azure datacenter location. Change this value to your desired location.
    +$ export AZURE_LOCATION="<location>"
    + 
    +# Cluster name info
    +$ export CLUSTER_NAME="capi-quickstart"
    +$ export KUBERNETES_VERSION="<k8sVersion>"
    +$ export NAMESPACE="default"
    +$ export CONTROL_PLANE_MACHINE_COUNT="1"
    +$ export WORKER_MACHINE_COUNT="1"
    +
    + +
    + +

    +
  2. +
  3. +

    Copy the cluster template and save it locally as azure-capi.yaml.

    +
    + Click here for the cluster template + + +
    +
    +
    apiVersion: cluster.x-k8s.io/v1beta1
    +kind: Cluster
    +metadata:
    +  name: ${CLUSTER_NAME}
    +  namespace: default
    +spec:
    +  clusterNetwork:
    +    pods:
    +      cidrBlocks:
    +        - 192.168.0.0/16
    +  controlPlaneRef:
    +    apiVersion: controlplane.cluster.x-k8s.io/v1beta1
    +    kind: OCNEControlPlane
    +    name: ${CLUSTER_NAME}-control-plane
    +  infrastructureRef:
    +    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +    kind: AzureCluster
    +    name: ${CLUSTER_NAME}
    +---
    +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +kind: AzureCluster
    +metadata:
    +  name: ${CLUSTER_NAME}
    +  namespace: default
    +spec:
    +  identityRef:
    +    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +    kind: AzureClusterIdentity
    +    name: ${CLUSTER_IDENTITY_NAME}
    +  location: ${AZURE_LOCATION}
    +  networkSpec:
    +    subnets:
    +      - name: control-plane-subnet
    +        role: control-plane
    +      - name: node-subnet
    +        role: node
    +    vnet:
    +      name: ${AZURE_VNET_NAME:=${CLUSTER_NAME}-vnet}
    +  resourceGroup: ${AZURE_RESOURCE_GROUP:=${CLUSTER_NAME}}
    +  subscriptionID: ${AZURE_SUBSCRIPTION_ID}
    +---
    +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +kind: AzureMachineTemplate
    +metadata:
    +  name: ${CLUSTER_NAME}-control-plane
    +  namespace: default
    +spec:
    +  template:
    +    spec:
    +      image:
    +        marketplace:
    +          publisher: "Oracle"
    +          offer: "Oracle-Linux"
    +          sku: "ol88-lvm-gen2"
    +          version: "8.8.3"
    +      dataDisks:
    +        - diskSizeGB: 256
    +          lun: 0
    +          nameSuffix: etcddisk
    +      osDisk:
    +        diskSizeGB: 128
    +        osType: Linux
    +      sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=""}
    +      vmSize: ${AZURE_CONTROL_PLANE_MACHINE_TYPE}
    +---
    +apiVersion: cluster.x-k8s.io/v1beta1
    +kind: MachineDeployment
    +metadata:
    +  name: ${CLUSTER_NAME}-md-0
    +  namespace: default
    +spec:
    +  clusterName: ${CLUSTER_NAME}
    +  replicas: ${WORKER_MACHINE_COUNT}
    +  selector:
    +    matchLabels: null
    +  template:
    +    spec:
    +      bootstrap:
    +        configRef:
    +          apiVersion: bootstrap.cluster.x-k8s.io/v1beta1
    +          kind: OCNEConfigTemplate
    +          name: ${CLUSTER_NAME}-md-0
    +      clusterName: ${CLUSTER_NAME}
    +      infrastructureRef:
    +        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +        kind: AzureMachineTemplate
    +        name: ${CLUSTER_NAME}-md-0
    +      version: ${KUBERNETES_VERSION}
    +---
    +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +kind: AzureMachineTemplate
    +metadata:
    +  name: ${CLUSTER_NAME}-md-0
    +  namespace: default
    +spec:
    +  template:
    +    spec:
    +      image:
    +        marketplace:
    +          publisher: "Oracle"
    +          offer: "Oracle-Linux"
    +          sku: "ol88-lvm-gen2"
    +          version: "8.8.3"
    +      osDisk:
    +        diskSizeGB: 128
    +        osType: Linux
    +      sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=""}
    +      vmSize: ${AZURE_NODE_MACHINE_TYPE}
    +---
    +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +kind: AzureClusterIdentity
    +metadata:
    +  labels:
    +    clusterctl.cluster.x-k8s.io/move-hierarchy: "true"
    +  name: ${CLUSTER_IDENTITY_NAME}
    +  namespace: default
    +spec:
    +  allowedNamespaces: {}
    +  clientID: ${AZURE_CLIENT_ID}
    +  clientSecret:
    +    name: ${AZURE_CLUSTER_IDENTITY_SECRET_NAME}
    +    namespace: ${AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE}
    +  tenantID: ${AZURE_TENANT_ID}
    +  type: ServicePrincipal
    +---
    +apiVersion: controlplane.cluster.x-k8s.io/v1alpha1
    +kind: OCNEControlPlane
    +metadata:
    +  name: ${CLUSTER_NAME}-control-plane
    +  namespace: default
    +spec:
    +  moduleOperator:
    +    enabled: true
    +  verrazzanoPlatformOperator:
    +    enabled: true
    +  controlPlaneConfig:
    +    clusterConfiguration:
    +      apiServer:
    +        extraArgs:
    +          cloud-provider: external
    +        certSANs:
    +          - localhost
    +          - 127.0.0.1
    +      dns:
    +        imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne}
    +        imageTag: ${DNS_TAG=v1.9.3}
    +      etcd:
    +        local:
    +          imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne}
    +          imageTag: ${ETCD_TAG=3.5.6}
    +      controllerManager:
    +        extraArgs:
    +          cloud-provider: external
    +      networking: {}
    +      scheduler: {}
    +      imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne}
    +    files:
    +      - contentFrom:
    +          secret:
    +            key: control-plane-azure.json
    +            name: ${CLUSTER_NAME}-control-plane-azure-json
    +        owner: root:root
    +        path: /etc/kubernetes/azure.json
    +        permissions: "0644"
    +    initConfiguration:
    +      nodeRegistration:
    +        criSocket: /var/run/crio/crio.sock
    +        kubeletExtraArgs:
    +          cloud-provider: external
    +        name: '{{ local_hostname }}'
    +    joinConfiguration:
    +      discovery: {}
    +      nodeRegistration:
    +        criSocket: /var/run/crio/crio.sock
    +        kubeletExtraArgs:
    +          cloud-provider: external
    +        name: '{{ local_hostname }}'
    +    preOCNECommands:
    +      - hostnamectl set-hostname "{{ ds.meta_data.hostname }}"
    +      - echo "::1         ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6"
    +        >/etc/hosts
    +      - echo "127.0.0.1   {{ ds.meta_data.hostname }} {{ local_hostname }} localhost
    +        localhost.localdomain localhost4 localhost4.localdomain4" >>/etc/hosts
    +    users:
    +      - name: opc
    +        sudo: ALL=(ALL) NOPASSWD:ALL
    +  machineTemplate:
    +    infrastructureRef:
    +      apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +      kind: AzureMachineTemplate
    +      name: ${CLUSTER_NAME}-control-plane
    +      namespace: default
    +  replicas: ${CONTROL_PLANE_MACHINE_COUNT}
    +  version: ${KUBERNETES_VERSION}
    +---
    +apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1
    +kind: OCNEConfigTemplate
    +metadata:
    +  name: ${CLUSTER_NAME}-md-0
    +  namespace: default
    +spec:
    +  template:
    +    spec:
    +      clusterConfiguration:
    +        imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne}
    +      joinConfiguration:
    +        nodeRegistration:
    +          kubeletExtraArgs:
    +            cloud-provider: external
    +          name: '{{ local_hostname }}'
    +      preOCNECommands:
    +        - hostnamectl set-hostname "{{ ds.meta_data.hostname }}"
    +        - echo "::1         ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6"
    +          >/etc/hosts
    +        - echo "127.0.0.1   {{ ds.meta_data.hostname }} {{ local_hostname }} localhost
    +          localhost.localdomain localhost4 localhost4.localdomain4" >>/etc/hosts
    +      users:
    +        - name: opc
    +          sudo: ALL=(ALL) NOPASSWD:ALL
    +
    + +
    + + +
    +
  4. +
  5. +

    Generate and apply the template by running the following command: + + +

    +
    +
    $ clusterctl generate yaml --from azure-capi.yaml | kubectl apply -f -
    +
    + +
    + +

    +
  6. +
+

To view the status of the cluster and its resources, run: + + +

+
+
$ clusterctl describe cluster $CLUSTER_NAME
+
+ +
+ +

+

To get the kubeconfig file, run: + + +

+
+
$ clusterctl get kubeconfig ${CLUSTER_NAME} > ${CLUSTER_NAME}.kubeconfig
+
+ +
+ +

+

Finish cluster configuration

+

After the cluster resources are created, you must perform some additional steps to finish the configuration of the cluster.

+
    +
  1. Install a cloud controller manager (CCM). A CCM is necessary when deploying cloud resources such as load balancers. + + +
    +
    +
    $ helm install --kubeconfig=./${CLUSTER_NAME}.kubeconfig --repo https://raw.githubusercontent.com/kubernetes-sigs/cloud-provider-azure/master/helm/repo cloud-provider-azure --generate-name --set infra.clusterName=clusterName --set cloudControllerManager.clusterCIDR="192.168.0.0/16" --set cloudControllerManager.caCertDir=/etc/pki/ca-trust
    +
    + +
    + +
  2. +
  3. Install a container network interface (CNI). The following example uses the Calico CNI. + + +
    +
    +
    $ helm repo add projectcalico https://docs.tigera.io/calico/charts --kubeconfig=./${CLUSTER_NAME}.kubeconfig && \
    +$ helm install calico projectcalico/tigera-operator --kubeconfig=./${CLUSTER_NAME}.kubeconfig -f https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/main/templates/addons/calico/values.yaml --namespace tigera-operator --create-namespace
    +
    + +
    + +
  4. +
+

Your admin cluster and first managed cluster are now up and running and ready to deploy applications. You can add more managed clusters as needed.

+

For more information, refer to the documentation for Cluster API and Cluster API Azure:

+ +

Troubleshoot the deployment

+

If the deployment of the Azure resources fails, then you can check the following log files to diagnose the issue:

+

The Azure cluster controller provider logs: + + +

+
+
$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=infrastructure-azure
+
+ +
+ + +The OCNE control plane provider logs: + + +
+
+
$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=control-plane-ocne
+
+ +
+ +

+

NOTE: If a pod enters a CrashLoopBackOff state, then you can either restart the deployment or wait for the state to run its course. This is a known issue that should not affect the deployment of your cluster.

+

Delete the clusters

+
    +
  1. Delete the managed clusters. + + +
    +
    +
    $ kubectl delete cluster $CLUSTER_NAME
    +
    + +
    + +
  2. +
  3. Delete the admin cluster. + + +
    +
    +
    $ kind delete cluster
    +
    + +
    + +
  4. +
+

Do not use kubectl delete -f capi-quickstart.yaml to delete the entire cluster template at once because it might leave behind pending resources that you need to clean up manually.

+ + +
+ + + + + + +
+ + +
+ +
+ + +
+
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/v1.7/docs/advanced/ocne-vsphere/index.html b/v1.7/docs/advanced/ocne-vsphere/index.html new file mode 100644 index 0000000000..af9246aac3 --- /dev/null +++ b/v1.7/docs/advanced/ocne-vsphere/index.html @@ -0,0 +1,4443 @@ + + + + + + + + + + + + + + + + + + + + +Create OCNE Clusters Running on VMware vSphere | Verrazzano Enterprise Container Platform + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ + +
+ + + + + +
+

Create OCNE Clusters Running on VMware vSphere

+
Configure Oracle Cloud Native Environment self-managed clusters to run on VMware vSphere
+ + + + + +

The Cluster API project provides a standard set of Kubernetes-style APIs for cluster management. Officially, Verrazzano currently only supports using Cluster API to provision OCNE and OKE clusters on OCI.

+

However, you can also experiment with using the features of the Cluster API project directly to deploy OCNE clusters on VMware vSphere.

+

For more information on Cluster API or Cluster API with vSphere, see:

+ + + + + +

Before you begin

+

If you have an existing vSphere environment, you can ignore Set up a VMware Software-Defined Data Center and start from Prepare the VM environment. Confirm that your environment meets the requirements as specified at Cluster API Provider vSphere: Install Requirements.

+

Otherwise, create a vSphere environment. We recommend using the Oracle Cloud VMware Solution as described in Set up a VMware Software-Defined Data Center. It deploys a VMware software-defined data center (SDDC) on Oracle Cloud Infrastructure (OCI) and then integrates it with other Oracle services running on Oracle Cloud. This solution was developed in partnership with VMware to provide an environment that adheres to best practices recommended by VMware.

+

For more information on the Oracle Cloud VMware Solution, see Deploy a highly available VMware-based SDDC to the cloud in the Oracle Help Architecture Center.

+

Set up a VMware Software-Defined Data Center

+ + + + +

Use the Oracle Cloud VMware Solution to rapidly create a VMware SDDC.

+
    +
  1. +

    Set up a virtual cloud network (VCN). You can choose to use an existing VCN or let the Oracle Cloud VMware Solution create its own VCN as part of the SDDC provisioning process. If you use an existing VCN, then make sure it meets the requirements defined in Prepare Your Deployment in the Oracle Help Architecture Center.

    +
  2. +
  3. +

    Deploy the SDDC. To request a new VMware SDDC on OCI, follow the instructions at Deploy the SDDC in the Oracle Help Architecture Center.

    +
  4. +
  5. +

    Ensure that the various components were created successfully. Follow the instructions at Monitor the SDDC Creation Process in the Oracle Help Architecture Center.

    +
  6. +
+

Prepare the VM environment

+
    +
  1. +

    Download an Oracle Linux 8 ISO image from Oracle Linux Installation Media.

    +
  2. +
  3. +

    Upload the Oracle Linux 8 ISO image to vSphere. Use the steps at Upload ISO Image Installation Media for a Guest Operating System in the vSphere documentation.

    +
  4. +
  5. +

    Deploy a VM by following the instructions at Create a Virtual Machine with the New Virtual Machine Wizard in the vSphere documentation.

    +
  6. +
  7. +

    Install cloud-init on the VM. + + +

    +
    +
    $ sudo yum install -y cloud-init
    +
    + +
    + +

    +
  8. +
  9. +

    Initialize cloud-init. + + +

    +
    +
    $ cloud-init init --local
    +
    + +
    + + +When cloud-init is successfully configured, it returns a message similar to the following: + + +
    +
    +
    $ cloud-init v. 20.1.0011 running 'init-local' at Fri, 01 Apr 2022 01:26:11 +0000. Up 38.70 seconds.
    +
    + +
    + +

    +
  10. +
  11. +

    Shut down the VM.

    +
  12. +
  13. +

    Convert the VM into a template and name it OL8-Base-Template. Follow the instructions at Clone a Virtual Machine to a Template in the vSphere documentation.

    +
  14. +
+

Set up the admin cluster

+

The Cluster API requires an initial cluster as a starting point to deploy its resources.

+
    +
  1. +

    Install kind. Follow the instructions at Installation in the kind documentation.

    +
  2. +
  3. +

    Create a Kubernetes cluster using kind. This cluster must be accessible by the VMware SDDC. Follow the instructions at Quick Start: Install and/or configure a Kubernetes cluster in The Cluster API Book.

    +
  4. +
  5. +

    Install the clusterctl CLI tool. clusterctl manages the lifecycle operations of a cluster API admin cluster. Follow instructions at Quick Start: Install clusterctl in the Cluster API Book.

    +
  6. +
  7. +

    Install the Verrazzano CLI tool using the instructions at CLI Setup.

    +
  8. +
  9. +

    Install Verrazzano on the cluster using either the dev or prod profile. Follow the instructions at Install with CLI.

    +
  10. +
  11. +

    On the cluster, set the following vSphere environment variables. Update the values to reflect your own environment. + + +

    +
    +
    $ export VSPHERE_PASSWORD="<vmware-password>"
    +$ export VSPHERE_USERNAME="administrator@vsphere.local"
    +$ export VSPHERE_SERVER="<IP address or FQDN>"
    +$ export VSPHERE_DATACENTER="<SDDC-Datacenter>"
    +$ export VSPHERE_DATASTORE="<vSAN-Datastore>"	
    +$ export VSPHERE_NETWORK="workload"
    +$ export VSPHERE_RESOURCE_POOL="*/Resources/Workload"
    +$ export VSPHERE_FOLDER="<folder-name>"
    +$ export VSPHERE_TEMPLATE="OL8-Base-Template"
    +$ export VSPHERE_SSH_AUTHORIZED_KEY="<Public-SSH-Authorized-Key>"
    +$ export VSPHERE_TLS_THUMBPRINT="<SHA1 thumbprint of vCenter certificate>"
    +$ export VSPHERE_STORAGE_POLICY=""
    +$ export CONTROL_PLANE_ENDPOINT_IP="<IP address or FQDN>"
    +
    + +
    + + +For information on the values of the environment variables, see Configuring and installing Cluster API Provider vSphere in a management cluster in the Cluster API Provider vSphere documentation.

    +
  12. +
  13. +

    Install the Cluster API Provider vSphere to initialize the admin cluster. + + +

    +
    +
    $ clusterctl init -n verrazzano-capi -i vsphere
    +
    + +
    + +

    +

    clusterctl will report when the admin cluster was successfully initialized.

    +
  14. +
+

Create a managed cluster

+

The Cluster API uses a cluster template to deploy a predefined set of Cluster API objects and create a managed cluster.

+
    +
  1. +

    Copy the cluster template and save it locally as vsphere-capi.yaml.

    +
    + Click here for the cluster template + + +
    +
    +
    apiVersion: cluster.x-k8s.io/v1beta1
    +kind: Cluster
    +metadata:
    +  labels:
    +    cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME}
    +  name: ${CLUSTER_NAME}
    +  namespace: ${NAMESPACE}
    +spec:
    +  clusterNetwork:
    +    pods:
    +      cidrBlocks:
    +        - ${POD_CIDR=192.168.0.0/16}
    +    serviceDomain: cluster.local
    +    services:
    +      cidrBlocks:
    +        - ${CLUSTER_CIDR=10.128.0.0/12}
    +  controlPlaneRef:
    +    apiVersion: controlplane.cluster.x-k8s.io/v1alpha1
    +    kind: OCNEControlPlane
    +    name: ${CLUSTER_NAME}-control-plane
    +    namespace: ${NAMESPACE}
    +  infrastructureRef:
    +    apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +    kind: VSphereCluster
    +    name: ${CLUSTER_NAME}
    +    namespace: ${NAMESPACE}
    +---
    +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +kind: VSphereCluster
    +metadata:
    +  name: ${CLUSTER_NAME}
    +  namespace: ${NAMESPACE}
    +spec:
    +  controlPlaneEndpoint:
    +    host: ${CONTROL_PLANE_ENDPOINT_IP}
    +    port: 6443
    +  identityRef:
    +    kind: Secret
    +    name: ${CLUSTER_NAME}
    +  server: ${VSPHERE_SERVER}
    +  thumbprint: '${VSPHERE_TLS_THUMBPRINT}'
    +---
    +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +kind: VSphereMachineTemplate
    +metadata:
    +  name: ${CLUSTER_NAME}-control-plane
    +  namespace: ${NAMESPACE}
    +spec:
    +  template:
    +    spec:
    +      cloneMode: linkedClone
    +      datacenter: ${VSPHERE_DATACENTER=oci-w01dc}
    +      datastore: ${VSPHERE_DATASTORE=vsanDatastore}
    +      diskGiB: ${VSPHERE_DISK=200}
    +      folder: ${VSPHERE_FOLDER=CAPI}
    +      memoryMiB: ${VSPHERE_MEMORY=32384}
    +      network:
    +        devices:
    +          - dhcp4: true
    +            networkName: "${VSPHERE_NETWORK=workload}"
    +      numCPUs: ${VSPHERE_CPU=4}
    +      os: Linux
    +      resourcePool: '${VSPHERE_RESOURCE_POOL=*/Resources/Workload}'
    +      server: '${VSPHERE_SERVER=11.0.11.130}'
    +      storagePolicyName: ${VSPHERE_STORAGE_POLICY=""}
    +      template: ${VSPHERE_TEMPLATE=OL8-Base-Template}
    +      thumbprint: '${VSPHERE_TLS_THUMBPRINT}'
    +---
    +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +kind: VSphereMachineTemplate
    +metadata:
    +  name: ${CLUSTER_NAME}-md-0
    +  namespace: ${NAMESPACE}
    +spec:
    +  template:
    +    spec:
    +      cloneMode: linkedClone
    +      datacenter: ${VSPHERE_DATACENTER=oci-w01dc}
    +      datastore: ${VSPHERE_DATASTORE=vsanDatastore}
    +      diskGiB: ${VSPHERE_DISK=200}
    +      folder: ${VSPHERE_FOLDER=CAPI}
    +      memoryMiB: ${VSPHERE_MEMORY=32384}
    +      network:
    +        devices:
    +          - dhcp4: true
    +            networkName: "${VSPHERE_NETWORK=workload}"
    +      numCPUs: ${VSPHERE_CPU=4}
    +      os: Linux
    +      resourcePool: '${VSPHERE_RESOURCE_POOL=*/Resources/Workload}'
    +      server: '${VSPHERE_SERVER=11.0.11.130}'
    +      storagePolicyName: ${VSPHERE_STORAGE_POLICY=""}
    +      template: ${VSPHERE_TEMPLATE=OL8-Base-Template}
    +      thumbprint: '${VSPHERE_TLS_THUMBPRINT}'
    +---
    +apiVersion: controlplane.cluster.x-k8s.io/v1alpha1
    +kind: OCNEControlPlane
    +metadata:
    +  name: ${CLUSTER_NAME}-control-plane
    +  namespace: ${NAMESPACE}
    +spec:
    +  moduleOperator:
    +    enabled: true
    +  verrazzanoPlatformOperator:
    +    enabled: true
    +  controlPlaneConfig:
    +    clusterConfiguration:
    +      apiServer:
    +        extraArgs:
    +          cloud-provider: external
    +        certSANs:
    +          - localhost
    +          - 127.0.0.1
    +      dns:
    +        imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne}
    +        imageTag: ${DNS_TAG=v1.9.3}
    +      etcd:
    +        local:
    +          imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne}
    +          imageTag: ${ETCD_TAG=3.5.6}
    +      controllerManager:
    +        extraArgs:
    +          cloud-provider: external
    +      networking: {}
    +      scheduler: {}
    +      imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne}
    +    files:
    +      - content: |
    +          apiVersion: v1
    +          kind: Pod
    +          metadata: 
    +            creationTimestamp: null
    +            name: kube-vip
    +            namespace: kube-system
    +          spec: 
    +            containers: 
    +            - args: 
    +              - manager
    +              env: 
    +              - name: cp_enable
    +                value: "true"
    +              - name: vip_interface
    +                value: ""
    +              - name: address
    +                value: ${CONTROL_PLANE_ENDPOINT_IP}
    +              - name: port
    +                value: "6443"
    +              - name: vip_arp
    +                value: "true"
    +              - name: vip_leaderelection
    +                value: "true"
    +              - name: vip_leaseduration
    +                value: "15"
    +              - name: vip_renewdeadline
    +                value: "10"
    +              - name: vip_retryperiod
    +                value: "2"
    +              image: ghcr.io/kube-vip/kube-vip:v0.5.11
    +              imagePullPolicy: IfNotPresent
    +              name: kube-vip
    +              resources: {}
    +              securityContext: 
    +                capabilities: 
    +                  add: 
    +                  - NET_ADMIN
    +                  - NET_RAW
    +              volumeMounts: 
    +              - mountPath: /etc/kubernetes/admin.conf
    +                name: kubeconfig
    +            hostAliases: 
    +            - hostnames: 
    +              - kubernetes
    +              ip: 127.0.0.1
    +            hostNetwork: true
    +            volumes: 
    +            - hostPath: 
    +                path: /etc/kubernetes/admin.conf
    +                type: FileOrCreate
    +              name: kubeconfig
    +          status: {}
    +        owner: root:root
    +        path: /etc/kubernetes/manifests/kube-vip.yaml
    +    initConfiguration:
    +      nodeRegistration:
    +        criSocket: /var/run/crio/crio.sock
    +        kubeletExtraArgs:
    +          cloud-provider: external
    +        name: '{{ local_hostname }}'
    +    joinConfiguration:
    +      discovery: {}
    +      nodeRegistration:
    +        criSocket: /var/run/crio/crio.sock
    +        kubeletExtraArgs:
    +          cloud-provider: external
    +        name: '{{ local_hostname }}'
    +    verbosity: 9
    +    preOCNECommands:
    +      - hostnamectl set-hostname "{{ ds.meta_data.hostname }}"
    +      - echo "::1         ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6"
    +        >/etc/hosts
    +      - echo "127.0.0.1   {{ ds.meta_data.hostname }} {{ local_hostname }} localhost
    +        localhost.localdomain localhost4 localhost4.localdomain4" >>/etc/hosts
    +    users:
    +      - name: opc
    +        sshAuthorizedKeys:
    +          - ${VSPHERE_SSH_AUTHORIZED_KEY}
    +        sudo: ALL=(ALL) NOPASSWD:ALL
    +  machineTemplate:
    +    infrastructureRef:
    +      apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +      kind: VSphereMachineTemplate
    +      name: ${CLUSTER_NAME}-control-plane
    +      namespace: ${NAMESPACE}
    +  replicas: ${CONTROL_PLANE_MACHINE_COUNT=1}
    +  version: ${KUBERNETES_VERSION=v1.26.6}
    +---
    +apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1
    +kind: OCNEConfigTemplate
    +metadata:
    +  name: ${CLUSTER_NAME}-md-0
    +  namespace: ${NAMESPACE}
    +spec:
    +  template:
    +    spec:
    +      clusterConfiguration:
    +        imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne}
    +      joinConfiguration:
    +        nodeRegistration:
    +          kubeletExtraArgs:
    +            cloud-provider: external
    +          name: '{{ local_hostname }}'
    +      verbosity: 9
    +      preOCNECommands:
    +        - hostnamectl set-hostname "{{ ds.meta_data.hostname }}"
    +        - echo "::1         ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6"
    +          >/etc/hosts
    +        - echo "127.0.0.1   {{ ds.meta_data.hostname }} {{ local_hostname }} localhost
    +          localhost.localdomain localhost4 localhost4.localdomain4" >>/etc/hosts
    +      users:
    +        - name: opc
    +          sshAuthorizedKeys:
    +            - ${VSPHERE_SSH_AUTHORIZED_KEY}
    +          sudo: ALL=(ALL) NOPASSWD:ALL
    +---
    +apiVersion: cluster.x-k8s.io/v1beta1
    +kind: MachineDeployment
    +metadata:
    +  labels:
    +    cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME}
    +  name: ${CLUSTER_NAME}-md-0
    +  namespace: ${NAMESPACE}
    +spec:
    +  clusterName: ${CLUSTER_NAME}
    +  replicas: ${NODE_MACHINE_COUNT=3}
    +  selector:
    +    matchLabels: {}
    +  template:
    +    metadata:
    +      labels:
    +        cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME}
    +    spec:
    +      bootstrap:
    +        configRef:
    +          apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1
    +          kind: OCNEConfigTemplate
    +          name: ${CLUSTER_NAME}-md-0
    +      clusterName: ${CLUSTER_NAME}
    +      infrastructureRef:
    +        apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
    +        kind: VSphereMachineTemplate
    +        name: ${CLUSTER_NAME}-md-0
    +      version: ${KUBERNETES_VERSION=v1.26.6}
    +---
    +apiVersion: addons.cluster.x-k8s.io/v1beta1
    +kind: ClusterResourceSet
    +metadata:
    +  name: ${CLUSTER_NAME}-crs-0
    +  namespace: ${NAMESPACE}
    +spec:
    +  clusterSelector:
    +    matchLabels:
    +      cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME}
    +  resources:
    +    - kind: Secret
    +      name: ${CLUSTER_NAME}-vsphere-csi-controller
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-controller-role
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-controller-binding
    +    - kind: Secret
    +      name: ${CLUSTER_NAME}-csi-vsphere-config
    +    - kind: ConfigMap
    +      name: csi.vsphere.vmware.com
    +    - kind: ConfigMap
    +      name: vsphere-csi-controller-sa
    +    - kind: ConfigMap
    +      name: vsphere-csi-node-sa
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-node-cluster-role
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-node-cluster-role-binding
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-node-role
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-node-binding
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-internal-feature-states.csi.vsphere.vmware.com
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-controller-service
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-controller
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-node
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-vsphere-csi-node-windows
    +    - kind: Secret
    +      name: ${CLUSTER_NAME}-cloud-controller-manager
    +    - kind: Secret
    +      name: ${CLUSTER_NAME}-cloud-provider-vsphere-credentials
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-cpi-manifests
    +  strategy: Reconcile
    +---
    +apiVersion: v1
    +kind: Secret
    +metadata:
    +  name: ${CLUSTER_NAME}
    +  namespace: ${NAMESPACE}
    +stringData:
    +  password: ${VSPHERE_PASSWORD}
    +  username: ${VSPHERE_USERNAME}
    +---
    +apiVersion: v1
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-controller
    +  namespace: ${NAMESPACE}
    +data:
    +  data: |
    +    apiVersion: v1
    +    kind: ServiceAccount
    +    metadata: 
    +      name: vsphere-csi-controller
    +      namespace: kube-system
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    apiVersion: rbac.authorization.k8s.io/v1
    +    kind: ClusterRole
    +    metadata: 
    +      name: vsphere-csi-controller-role
    +    rules: 
    +    - apiGroups: [""]
    +      resources: ["nodes", "pods", "configmaps"]
    +      verbs: ["get", "list", "watch"]
    +    - apiGroups: [""]
    +      resources: ["persistentvolumeclaims"]
    +      verbs: ["get", "list", "watch", "update"]
    +    - apiGroups: [""]
    +      resources: ["persistentvolumeclaims/status"]
    +      verbs: ["patch"]
    +    - apiGroups: [""]
    +      resources: ["persistentvolumes"]
    +      verbs: ["get", "list", "watch", "create", "update", "delete", "patch"]
    +    - apiGroups: [""]
    +      resources: ["events"]
    +      verbs: ["get", "list", "watch", "create", "update", "patch"]
    +    - apiGroups: ["coordination.k8s.io"]
    +      resources: ["leases"]
    +      verbs: ["get", "watch", "list", "delete", "update", "create"]
    +    - apiGroups: ["storage.k8s.io"]
    +      resources: ["storageclasses", "csinodes"]
    +      verbs: ["get", "list", "watch"]
    +    - apiGroups: ["storage.k8s.io"]
    +      resources: ["volumeattachments"]
    +      verbs: ["get", "list", "watch", "patch"]
    +    - apiGroups: ["cns.vmware.com"]
    +      resources: ["triggercsifullsyncs"]
    +      verbs: ["create", "get", "update", "watch", "list"]
    +    - apiGroups: ["cns.vmware.com"]
    +      resources: ["cnsvspherevolumemigrations"]
    +      verbs: ["create", "get", "list", "watch", "update", "delete"]
    +    - apiGroups: ["apiextensions.k8s.io"]
    +      resources: ["customresourcedefinitions"]
    +      verbs: ["get", "create", "update"]
    +    - apiGroups: ["storage.k8s.io"]
    +      resources: ["volumeattachments/status"]
    +      verbs: ["patch"]
    +    - apiGroups: ["cns.vmware.com"]
    +      resources: ["cnsvolumeoperationrequests"]
    +      verbs: ["create", "get", "list", "update", "delete"]
    +    - apiGroups: [ "snapshot.storage.k8s.io" ]
    +      resources: [ "volumesnapshots" ]
    +      verbs: [ "get", "list" ]
    +    - apiGroups: [ "snapshot.storage.k8s.io" ]
    +      resources: [ "volumesnapshotclasses" ]
    +      verbs: [ "watch", "get", "list" ]
    +    - apiGroups: [ "snapshot.storage.k8s.io" ]
    +      resources: [ "volumesnapshotcontents" ]
    +      verbs: [ "create", "get", "list", "watch", "update", "delete", "patch"]
    +    - apiGroups: [ "snapshot.storage.k8s.io" ]
    +      resources: [ "volumesnapshotcontents/status" ]
    +      verbs: [ "update", "patch" ]
    +    - apiGroups: [ "cns.vmware.com" ]
    +      resources: [ "csinodetopologies" ]
    +      verbs: ["get", "update", "watch", "list"]
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-controller-role
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    apiVersion: rbac.authorization.k8s.io/v1
    +    kind: ClusterRoleBinding
    +    metadata: 
    +      name: vsphere-csi-controller-binding
    +    roleRef: 
    +      apiGroup: rbac.authorization.k8s.io
    +      kind: ClusterRole
    +      name: vsphere-csi-controller-role
    +    subjects: 
    +    - kind: ServiceAccount
    +      name: vsphere-csi-controller
    +      namespace: kube-system
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-controller-binding
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +kind: Secret
    +metadata:
    +  name: ${CLUSTER_NAME}-csi-vsphere-config
    +  namespace: ${NAMESPACE}
    +stringData:
    +  data: |
    +    apiVersion: v1
    +    kind: Secret
    +    metadata: 
    +      name: csi-vsphere-config
    +      namespace: kube-system
    +    stringData: 
    +      csi-vsphere.conf: |+
    +        [Global]
    +        thumbprint = "${VSPHERE_TLS_THUMBPRINT}"
    +        cluster-id = "${NAMESPACE}/${CLUSTER_NAME}"
    +
    +        [VirtualCenter "${VSPHERE_SERVER}"]
    +        insecure-flag = "true"
    +        user = "${VSPHERE_USERNAME}"
    +        password = "${VSPHERE_PASSWORD}"
    +        datacenters = "${VSPHERE_DATACENTER}"
    +        targetvSANFileShareDatastoreURLs = "${VSPHERE_DATASTORE_URL_SAN}"
    +
    +        [Network]
    +        public-network = "${VSPHERE_NETWORK=workload}"
    +
    +    type: Opaque
    +type: addons.cluster.x-k8s.io/resource-set
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    apiVersion: storage.k8s.io/v1
    +    kind: CSIDriver
    +    metadata:
    +      name: csi.vsphere.vmware.com
    +    spec:
    +      attachRequired: true
    +      podInfoOnMount: false
    +kind: ConfigMap
    +metadata:
    +  name: csi.vsphere.vmware.com
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    kind: ServiceAccount
    +    apiVersion: v1
    +    metadata:
    +      name: vsphere-csi-controller
    +      namespace: kube-system
    +kind: ConfigMap
    +metadata:
    +  name: vsphere-csi-controller-sa
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    kind: ServiceAccount
    +    apiVersion: v1
    +    metadata:
    +      name: vsphere-csi-node
    +      namespace: kube-system
    +kind: ConfigMap
    +metadata:
    +  name: vsphere-csi-node-sa
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    apiVersion: rbac.authorization.k8s.io/v1
    +    kind: ClusterRole
    +    metadata: 
    +      name: vsphere-csi-node-cluster-role
    +    rules: 
    +      - apiGroups: ["cns.vmware.com"]
    +        resources: ["csinodetopologies"]
    +        verbs: ["create", "watch", "get", "patch"]
    +      - apiGroups: [""]
    +        resources: ["nodes"]
    +        verbs: ["get"]
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-node-cluster-role
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    kind: ClusterRoleBinding
    +    apiVersion: rbac.authorization.k8s.io/v1
    +    metadata:
    +      name: vsphere-csi-node-cluster-role-binding
    +    subjects:
    +      - kind: ServiceAccount
    +        name: vsphere-csi-node
    +        namespace: kube-system
    +    roleRef:
    +      kind: ClusterRole
    +      name: vsphere-csi-node-cluster-role
    +      apiGroup: rbac.authorization.k8s.io
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-node-cluster-role-binding
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    kind: Role
    +    apiVersion: rbac.authorization.k8s.io/v1
    +    metadata:
    +      name: vsphere-csi-node-role
    +      namespace: kube-system
    +    rules:
    +      - apiGroups: [""]
    +        resources: ["configmaps"]
    +        verbs: ["get", "list", "watch"]
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-node-role
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    kind: RoleBinding
    +    apiVersion: rbac.authorization.k8s.io/v1
    +    metadata:
    +      name: vsphere-csi-node-binding
    +      namespace: kube-system
    +    subjects:
    +      - kind: ServiceAccount
    +        name: vsphere-csi-node
    +        namespace: kube-system
    +    roleRef:
    +      kind: Role
    +      name: vsphere-csi-node-role
    +      apiGroup: rbac.authorization.k8s.io
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-node-binding
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    apiVersion: v1
    +    data:
    +      "csi-migration": "true"
    +      "csi-auth-check": "true"
    +      "online-volume-extend": "true"
    +      "trigger-csi-fullsync": "false"
    +      "async-query-volume": "true"
    +      "improved-csi-idempotency": "true"
    +      "improved-volume-topology": "true"
    +      "block-volume-snapshot": "true"
    +      "csi-windows-support": "false"
    +      "use-csinode-id": "true"
    +      "list-volumes": "false"
    +      "pv-to-backingdiskobjectid-mapping": "false"
    +      "cnsmgr-suspend-create-volume": "true"
    +      "topology-preferential-datastores": "true"
    +      "max-pvscsi-targets-per-vm": "true"
    +    kind: ConfigMap
    +    metadata:
    +      name: internal-feature-states.csi.vsphere.vmware.com
    +      namespace: kube-system
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-internal-feature-states.csi.vsphere.vmware.com
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    apiVersion: v1
    +    kind: Service
    +    metadata:
    +      name: vsphere-csi-controller
    +      namespace: kube-system
    +      labels:
    +        app: vsphere-csi-controller
    +    spec:
    +      ports:
    +        - name: ctlr
    +          port: 2112
    +          targetPort: 2112
    +          protocol: TCP
    +        - name: syncer
    +          port: 2113
    +          targetPort: 2113
    +          protocol: TCP
    +      selector:
    +        app: vsphere-csi-controller
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-controller-service
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    kind: Deployment
    +    apiVersion: apps/v1
    +    metadata:
    +      name: vsphere-csi-controller
    +      namespace: kube-system
    +    spec:
    +      replicas: 1
    +      strategy:
    +        type: RollingUpdate
    +        rollingUpdate:
    +          maxUnavailable: 1
    +          maxSurge: 0
    +      selector:
    +        matchLabels:
    +          app: vsphere-csi-controller
    +      template:
    +        metadata:
    +          labels:
    +            app: vsphere-csi-controller
    +            role: vsphere-csi
    +        spec:
    +          affinity:
    +            podAntiAffinity:
    +              requiredDuringSchedulingIgnoredDuringExecution:
    +                - labelSelector:
    +                    matchExpressions:
    +                      - key: "app"
    +                        operator: In
    +                        values:
    +                          - vsphere-csi-controller
    +                  topologyKey: "kubernetes.io/hostname"
    +          serviceAccountName: vsphere-csi-controller
    +          nodeSelector:
    +            node-role.kubernetes.io/control-plane: ""
    +          tolerations:
    +            - key: node-role.kubernetes.io/master
    +              operator: Exists
    +              effect: NoSchedule
    +            - key: node-role.kubernetes.io/control-plane
    +              operator: Exists
    +              effect: NoSchedule
    +            # uncomment below toleration if you need an aggressive pod eviction in case when
    +            # node becomes not-ready or unreachable. Default is 300 seconds if not specified.
    +            #- key: node.kubernetes.io/not-ready
    +            #  operator: Exists
    +            #  effect: NoExecute
    +            #  tolerationSeconds: 30
    +            #- key: node.kubernetes.io/unreachable
    +            #  operator: Exists
    +            #  effect: NoExecute
    +            #  tolerationSeconds: 30
    +          dnsPolicy: "Default"
    +          containers:
    +            - name: csi-attacher
    +              image: k8s.gcr.io/sig-storage/csi-attacher:v3.5.0
    +              args:
    +                - "--v=4"
    +                - "--timeout=300s"
    +                - "--csi-address=$(ADDRESS)"
    +                - "--leader-election"
    +                - "--kube-api-qps=100"
    +                - "--kube-api-burst=100"
    +              env:
    +                - name: ADDRESS
    +                  value: /csi/csi.sock
    +              volumeMounts:
    +                - mountPath: /csi
    +                  name: socket-dir
    +            - name: csi-resizer
    +              image: k8s.gcr.io/sig-storage/csi-resizer:v1.5.0
    +              args:
    +                - "--v=4"
    +                - "--timeout=300s"
    +                - "--handle-volume-inuse-error=false"
    +                - "--csi-address=$(ADDRESS)"
    +                - "--kube-api-qps=100"
    +                - "--kube-api-burst=100"
    +                - "--leader-election"
    +              env:
    +                - name: ADDRESS
    +                  value: /csi/csi.sock
    +              volumeMounts:
    +                - mountPath: /csi
    +                  name: socket-dir
    +            - name: vsphere-csi-controller
    +              image: gcr.io/cloud-provider-vsphere/csi/release/driver:v2.7.0
    +              args:
    +                - "--fss-name=internal-feature-states.csi.vsphere.vmware.com"
    +                - "--fss-namespace=$(CSI_NAMESPACE)"
    +              imagePullPolicy: "Always"
    +              env:
    +                - name: CSI_ENDPOINT
    +                  value: unix:///csi/csi.sock
    +                - name: X_CSI_MODE
    +                  value: "controller"
    +                - name: X_CSI_SPEC_DISABLE_LEN_CHECK
    +                  value: "true"
    +                - name: X_CSI_SERIAL_VOL_ACCESS_TIMEOUT
    +                  value: 3m
    +                - name: VSPHERE_CSI_CONFIG
    +                  value: "/etc/cloud/csi-vsphere.conf"
    +                - name: LOGGER_LEVEL
    +                  value: "PRODUCTION" # Options: DEVELOPMENT, PRODUCTION
    +                - name: INCLUSTER_CLIENT_QPS
    +                  value: "100"
    +                - name: INCLUSTER_CLIENT_BURST
    +                  value: "100"
    +                - name: CSI_NAMESPACE
    +                  valueFrom:
    +                    fieldRef:
    +                      fieldPath: metadata.namespace
    +              volumeMounts:
    +                - mountPath: /etc/cloud
    +                  name: vsphere-config-volume
    +                  readOnly: true
    +                - mountPath: /csi
    +                  name: socket-dir
    +              ports:
    +                - name: healthz
    +                  containerPort: 9808
    +                  protocol: TCP
    +                - name: prometheus
    +                  containerPort: 2112
    +                  protocol: TCP
    +              livenessProbe:
    +                httpGet:
    +                  path: /healthz
    +                  port: healthz
    +                initialDelaySeconds: 10
    +                timeoutSeconds: 3
    +                periodSeconds: 5
    +                failureThreshold: 3
    +            - name: liveness-probe
    +              image: k8s.gcr.io/sig-storage/livenessprobe:v2.7.0
    +              args:
    +                - "--v=4"
    +                - "--csi-address=/csi/csi.sock"
    +              volumeMounts:
    +                - name: socket-dir
    +                  mountPath: /csi
    +            - name: vsphere-syncer
    +              image: gcr.io/cloud-provider-vsphere/csi/release/syncer:v2.7.0
    +              args:
    +                - "--leader-election"
    +                - "--fss-name=internal-feature-states.csi.vsphere.vmware.com"
    +                - "--fss-namespace=$(CSI_NAMESPACE)"
    +              imagePullPolicy: "Always"
    +              ports:
    +                - containerPort: 2113
    +                  name: prometheus
    +                  protocol: TCP
    +              env:
    +                - name: FULL_SYNC_INTERVAL_MINUTES
    +                  value: "30"
    +                - name: VSPHERE_CSI_CONFIG
    +                  value: "/etc/cloud/csi-vsphere.conf"
    +                - name: LOGGER_LEVEL
    +                  value: "PRODUCTION" # Options: DEVELOPMENT, PRODUCTION
    +                - name: INCLUSTER_CLIENT_QPS
    +                  value: "100"
    +                - name: INCLUSTER_CLIENT_BURST
    +                  value: "100"
    +                - name: GODEBUG
    +                  value: x509sha1=1
    +                - name: CSI_NAMESPACE
    +                  valueFrom:
    +                    fieldRef:
    +                      fieldPath: metadata.namespace
    +              volumeMounts:
    +                - mountPath: /etc/cloud
    +                  name: vsphere-config-volume
    +                  readOnly: true
    +            - name: csi-provisioner
    +              image: k8s.gcr.io/sig-storage/csi-provisioner:v3.2.1
    +              args:
    +                - "--v=4"
    +                - "--timeout=300s"
    +                - "--csi-address=$(ADDRESS)"
    +                - "--kube-api-qps=100"
    +                - "--kube-api-burst=100"
    +                - "--leader-election"
    +                - "--default-fstype=ext4"
    +                # needed only for topology aware setup
    +                #- "--feature-gates=Topology=true"
    +                #- "--strict-topology"
    +              env:
    +                - name: ADDRESS
    +                  value: /csi/csi.sock
    +              volumeMounts:
    +                - mountPath: /csi
    +                  name: socket-dir
    +            - name: csi-snapshotter
    +              image: k8s.gcr.io/sig-storage/csi-snapshotter:v6.0.1
    +              args:
    +                - "--v=4"
    +                - "--kube-api-qps=100"
    +                - "--kube-api-burst=100"
    +                - "--timeout=300s"
    +                - "--csi-address=$(ADDRESS)"
    +                - "--leader-election"
    +              env:
    +                - name: ADDRESS
    +                  value: /csi/csi.sock
    +              volumeMounts:
    +                - mountPath: /csi
    +                  name: socket-dir
    +          volumes:
    +            - name: vsphere-config-volume
    +              secret:
    +                secretName: csi-vsphere-config
    +            - name: socket-dir
    +              emptyDir: {}
    +
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-controller
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    kind: DaemonSet
    +    apiVersion: apps/v1
    +    metadata:
    +      name: vsphere-csi-node
    +      namespace: kube-system
    +    spec:
    +      selector:
    +        matchLabels:
    +          app: vsphere-csi-node
    +      updateStrategy:
    +        type: "RollingUpdate"
    +        rollingUpdate:
    +          maxUnavailable: 1
    +      template:
    +        metadata:
    +          labels:
    +            app: vsphere-csi-node
    +            role: vsphere-csi
    +        spec:
    +          nodeSelector:
    +            kubernetes.io/os: linux
    +          serviceAccountName: vsphere-csi-node
    +          hostNetwork: true
    +          dnsPolicy: "ClusterFirstWithHostNet"
    +          containers:
    +            - name: node-driver-registrar
    +              image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.5.1
    +              args:
    +                - "--v=5"
    +                - "--csi-address=$(ADDRESS)"
    +                - "--kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)"
    +              env:
    +                - name: ADDRESS
    +                  value: /csi/csi.sock
    +                - name: DRIVER_REG_SOCK_PATH
    +                  value: /var/lib/kubelet/plugins/csi.vsphere.vmware.com/csi.sock
    +              volumeMounts:
    +                - name: plugin-dir
    +                  mountPath: /csi
    +                - name: registration-dir
    +                  mountPath: /registration
    +              livenessProbe:
    +                exec:
    +                  command:
    +                    - /csi-node-driver-registrar
    +                    - --kubelet-registration-path=/var/lib/kubelet/plugins/csi.vsphere.vmware.com/csi.sock
    +                    - --mode=kubelet-registration-probe
    +                initialDelaySeconds: 3
    +            - name: vsphere-csi-node
    +              image: gcr.io/cloud-provider-vsphere/csi/release/driver:v2.7.0
    +              args:
    +                - "--fss-name=internal-feature-states.csi.vsphere.vmware.com"
    +                - "--fss-namespace=$(CSI_NAMESPACE)"
    +              imagePullPolicy: "Always"
    +              env:
    +                - name: NODE_NAME
    +                  valueFrom:
    +                    fieldRef:
    +                      fieldPath: spec.nodeName
    +                - name: CSI_ENDPOINT
    +                  value: unix:///csi/csi.sock
    +                - name: MAX_VOLUMES_PER_NODE
    +                  value: "59" # Maximum number of volumes that controller can publish to the node. If value is not set or zero Kubernetes decide how many volumes can be published by the controller to the node.
    +                - name: X_CSI_MODE
    +                  value: "node"
    +                - name: X_CSI_SPEC_REQ_VALIDATION
    +                  value: "false"
    +                - name: X_CSI_SPEC_DISABLE_LEN_CHECK
    +                  value: "true"
    +                - name: LOGGER_LEVEL
    +                  value: "PRODUCTION" # Options: DEVELOPMENT, PRODUCTION
    +                - name: GODEBUG
    +                  value: x509sha1=1
    +                - name: CSI_NAMESPACE
    +                  valueFrom:
    +                    fieldRef:
    +                      fieldPath: metadata.namespace
    +                - name: NODEGETINFO_WATCH_TIMEOUT_MINUTES
    +                  value: "1"
    +              securityContext:
    +                privileged: true
    +                capabilities:
    +                  add: ["SYS_ADMIN"]
    +                allowPrivilegeEscalation: true
    +              volumeMounts:
    +                - name: plugin-dir
    +                  mountPath: /csi
    +                - name: pods-mount-dir
    +                  mountPath: /var/lib/kubelet
    +                  # needed so that any mounts setup inside this container are
    +                  # propagated back to the host machine.
    +                  mountPropagation: "Bidirectional"
    +                - name: device-dir
    +                  mountPath: /dev
    +                - name: blocks-dir
    +                  mountPath: /sys/block
    +                - name: sys-devices-dir
    +                  mountPath: /sys/devices
    +              ports:
    +                - name: healthz
    +                  containerPort: 9808
    +                  protocol: TCP
    +              livenessProbe:
    +                httpGet:
    +                  path: /healthz
    +                  port: healthz
    +                initialDelaySeconds: 10
    +                timeoutSeconds: 5
    +                periodSeconds: 5
    +                failureThreshold: 3
    +            - name: liveness-probe
    +              image: k8s.gcr.io/sig-storage/livenessprobe:v2.7.0
    +              args:
    +                - "--v=4"
    +                - "--csi-address=/csi/csi.sock"
    +              volumeMounts:
    +                - name: plugin-dir
    +                  mountPath: /csi
    +          volumes:
    +            - name: registration-dir
    +              hostPath:
    +                path: /var/lib/kubelet/plugins_registry
    +                type: Directory
    +            - name: plugin-dir
    +              hostPath:
    +                path: /var/lib/kubelet/plugins/csi.vsphere.vmware.com
    +                type: DirectoryOrCreate
    +            - name: pods-mount-dir
    +              hostPath:
    +                path: /var/lib/kubelet
    +                type: Directory
    +            - name: device-dir
    +              hostPath:
    +                path: /dev
    +            - name: blocks-dir
    +              hostPath:
    +                path: /sys/block
    +                type: Directory
    +            - name: sys-devices-dir
    +              hostPath:
    +                path: /sys/devices
    +                type: Directory
    +          tolerations:
    +            - effect: NoExecute
    +              operator: Exists
    +            - effect: NoSchedule
    +              operator: Exists
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-node
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    kind: DaemonSet
    +    apiVersion: apps/v1
    +    metadata:
    +      name: vsphere-csi-node-windows
    +      namespace: kube-system
    +    spec:
    +      selector:
    +        matchLabels:
    +          app: vsphere-csi-node-windows
    +      updateStrategy:
    +        type: RollingUpdate
    +        rollingUpdate:
    +          maxUnavailable: 1
    +      template:
    +        metadata:
    +          labels:
    +            app: vsphere-csi-node-windows
    +            role: vsphere-csi-windows
    +        spec:
    +          nodeSelector:
    +            kubernetes.io/os: windows
    +          serviceAccountName: vsphere-csi-node
    +          containers:
    +            - name: node-driver-registrar
    +              image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.5.1
    +              args:
    +                - "--v=5"
    +                - "--csi-address=$(ADDRESS)"
    +                - "--kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)"
    +              env:
    +                - name: ADDRESS
    +                  value: 'unix://C:\\csi\\csi.sock'
    +                - name: DRIVER_REG_SOCK_PATH
    +                  value: 'C:\\var\\lib\\kubelet\\plugins\\csi.vsphere.vmware.com\\csi.sock'
    +              volumeMounts:
    +                - name: plugin-dir
    +                  mountPath: /csi
    +                - name: registration-dir
    +                  mountPath: /registration
    +              livenessProbe:
    +                exec:
    +                  command:
    +                    - /csi-node-driver-registrar.exe
    +                    - --kubelet-registration-path=C:\\var\\lib\\kubelet\\plugins\\csi.vsphere.vmware.com\\csi.sock
    +                    - --mode=kubelet-registration-probe
    +                initialDelaySeconds: 3
    +            - name: vsphere-csi-node
    +              image: gcr.io/cloud-provider-vsphere/csi/release/driver:v2.7.0
    +              args:
    +                - "--fss-name=internal-feature-states.csi.vsphere.vmware.com"
    +                - "--fss-namespace=$(CSI_NAMESPACE)"
    +              imagePullPolicy: "Always"
    +              env:
    +                - name: NODE_NAME
    +                  valueFrom:
    +                    fieldRef:
    +                      apiVersion: v1
    +                      fieldPath: spec.nodeName
    +                - name: CSI_ENDPOINT
    +                  value: 'unix://C:\\csi\\csi.sock'
    +                - name: MAX_VOLUMES_PER_NODE
    +                  value: "59" # Maximum number of volumes that controller can publish to the node. If value is not set or zero Kubernetes decide how many volumes can be published by the controller to the node.
    +                - name: X_CSI_MODE
    +                  value: node
    +                - name: X_CSI_SPEC_REQ_VALIDATION
    +                  value: 'false'
    +                - name: X_CSI_SPEC_DISABLE_LEN_CHECK
    +                  value: "true"
    +                - name: LOGGER_LEVEL
    +                  value: "PRODUCTION" # Options: DEVELOPMENT, PRODUCTION
    +                - name: X_CSI_LOG_LEVEL
    +                  value: DEBUG
    +                - name: CSI_NAMESPACE
    +                  valueFrom:
    +                    fieldRef:
    +                      fieldPath: metadata.namespace
    +                - name: NODEGETINFO_WATCH_TIMEOUT_MINUTES
    +                  value: "1"
    +              volumeMounts:
    +                - name: plugin-dir
    +                  mountPath: 'C:\csi'
    +                - name: pods-mount-dir
    +                  mountPath: 'C:\var\lib\kubelet'
    +                - name: csi-proxy-volume-v1
    +                  mountPath: \\.\pipe\csi-proxy-volume-v1
    +                - name: csi-proxy-filesystem-v1
    +                  mountPath: \\.\pipe\csi-proxy-filesystem-v1
    +                - name: csi-proxy-disk-v1
    +                  mountPath: \\.\pipe\csi-proxy-disk-v1
    +                - name: csi-proxy-system-v1alpha1
    +                  mountPath: \\.\pipe\csi-proxy-system-v1alpha1
    +              ports:
    +                - name: healthz
    +                  containerPort: 9808
    +                  protocol: TCP
    +              livenessProbe:
    +                httpGet:
    +                  path: /healthz
    +                  port: healthz
    +                initialDelaySeconds: 10
    +                timeoutSeconds: 5
    +                periodSeconds: 5
    +                failureThreshold: 3
    +            - name: liveness-probe
    +              image: k8s.gcr.io/sig-storage/livenessprobe:v2.7.0
    +              args:
    +                - "--v=4"
    +                - "--csi-address=/csi/csi.sock"
    +              volumeMounts:
    +                - name: plugin-dir
    +                  mountPath: /csi
    +          volumes:
    +            - name: registration-dir
    +              hostPath:
    +                path: 'C:\var\lib\kubelet\plugins_registry\'
    +                type: Directory
    +            - name: plugin-dir
    +              hostPath:
    +                path: 'C:\var\lib\kubelet\plugins\csi.vsphere.vmware.com\'
    +                type: DirectoryOrCreate
    +            - name: pods-mount-dir
    +              hostPath:
    +                path: \var\lib\kubelet
    +                type: Directory
    +            - name: csi-proxy-disk-v1
    +              hostPath:
    +                path: \\.\pipe\csi-proxy-disk-v1
    +                type: ''
    +            - name: csi-proxy-volume-v1
    +              hostPath:
    +                path: \\.\pipe\csi-proxy-volume-v1
    +                type: ''
    +            - name: csi-proxy-filesystem-v1
    +              hostPath:
    +                path: \\.\pipe\csi-proxy-filesystem-v1
    +                type: ''
    +            - name: csi-proxy-system-v1alpha1
    +              hostPath:
    +                path: \\.\pipe\csi-proxy-system-v1alpha1
    +                type: ''
    +          tolerations:
    +            - effect: NoExecute
    +              operator: Exists
    +            - effect: NoSchedule
    +              operator: Exists
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-vsphere-csi-node-windows
    +  namespace: ${NAMESPACE}
    +---
    +apiVersion: v1
    +kind: Secret
    +metadata:
    +  name: ${CLUSTER_NAME}-cloud-controller-manager
    +  namespace: ${NAMESPACE}
    +stringData:
    +  data: |
    +    apiVersion: v1
    +    kind: ServiceAccount
    +    metadata: 
    +      labels: 
    +        component: cloud-controller-manager
    +        vsphere-cpi-infra: service-account
    +      name: cloud-controller-manager
    +      namespace: kube-system
    +type: addons.cluster.x-k8s.io/resource-set
    +---
    +apiVersion: v1
    +kind: Secret
    +metadata:
    +  name: ${CLUSTER_NAME}-cloud-provider-vsphere-credentials
    +  namespace: ${NAMESPACE}
    +stringData:
    +  data: |
    +    apiVersion: v1
    +    kind: Secret
    +    metadata: 
    +      labels: 
    +        component: cloud-controller-manager
    +        vsphere-cpi-infra: secret
    +      name: cloud-provider-vsphere-credentials
    +      namespace: kube-system
    +    stringData: 
    +      ${VSPHERE_SERVER}.password: ${VSPHERE_PASSWORD}
    +      ${VSPHERE_SERVER}.username: ${VSPHERE_USERNAME}
    +    type: Opaque
    +type: addons.cluster.x-k8s.io/resource-set
    +---
    +apiVersion: v1
    +data:
    +  data: |
    +    ---
    +    apiVersion: rbac.authorization.k8s.io/v1
    +    kind: ClusterRole
    +    metadata: 
    +      labels: 
    +        component: cloud-controller-manager
    +        vsphere-cpi-infra: role
    +      name: system:cloud-controller-manager
    +    rules: 
    +    - apiGroups: 
    +      - ""
    +      resources: 
    +      - events
    +      verbs: 
    +      - create
    +      - patch
    +      - update
    +    - apiGroups: 
    +      - ""
    +      resources: 
    +      - nodes
    +      verbs: 
    +      - '*'
    +    - apiGroups: 
    +      - ""
    +      resources: 
    +      - nodes/status
    +      verbs: 
    +      - patch
    +    - apiGroups: 
    +      - ""
    +      resources: 
    +      - services
    +      verbs: 
    +      - list
    +      - patch
    +      - update
    +      - watch
    +    - apiGroups: 
    +      - ""
    +      resources: 
    +      - services/status
    +      verbs: 
    +      - patch
    +    - apiGroups: 
    +      - ""
    +      resources: 
    +      - serviceaccounts
    +      verbs: 
    +      - create
    +      - get
    +      - list
    +      - watch
    +      - update
    +    - apiGroups: 
    +      - ""
    +      resources: 
    +      - persistentvolumes
    +      verbs: 
    +      - get
    +      - list
    +      - watch
    +      - update
    +    - apiGroups: 
    +      - ""
    +      resources: 
    +      - endpoints
    +      verbs: 
    +      - create
    +      - get
    +      - list
    +      - watch
    +      - update
    +    - apiGroups: 
    +      - ""
    +      resources: 
    +      - secrets
    +      verbs: 
    +      - get
    +      - list
    +      - watch
    +    - apiGroups: 
    +      - coordination.k8s.io
    +      resources: 
    +      - leases
    +      verbs: 
    +      - get
    +      - watch
    +      - list
    +      - update
    +      - create
    +    ---
    +    apiVersion: rbac.authorization.k8s.io/v1
    +    kind: ClusterRoleBinding
    +    metadata: 
    +      labels: 
    +        component: cloud-controller-manager
    +        vsphere-cpi-infra: cluster-role-binding
    +      name: system:cloud-controller-manager
    +    roleRef: 
    +      apiGroup: rbac.authorization.k8s.io
    +      kind: ClusterRole
    +      name: system:cloud-controller-manager
    +    subjects: 
    +    - kind: ServiceAccount
    +      name: cloud-controller-manager
    +      namespace: kube-system
    +    - kind: User
    +      name: cloud-controller-manager
    +    ---
    +    apiVersion: v1
    +    data: 
    +      vsphere.conf: |
    +        global: 
    +          port: 443
    +          secretName: cloud-provider-vsphere-credentials
    +          secretNamespace: kube-system
    +          thumbprint: '${VSPHERE_TLS_THUMBPRINT}'
    +        vcenter: 
    +          ${VSPHERE_SERVER}:
    +            datacenters: 
    +            - '${VSPHERE_DATACENTER}'
    +            server: '${VSPHERE_SERVER}'
    +    kind: ConfigMap
    +    metadata: 
    +      name: vsphere-cloud-config
    +      namespace: kube-system
    +    ---
    +    apiVersion: rbac.authorization.k8s.io/v1
    +    kind: RoleBinding
    +    metadata: 
    +      labels: 
    +        component: cloud-controller-manager
    +        vsphere-cpi-infra: role-binding
    +      name: servicecatalog.k8s.io:apiserver-authentication-reader
    +      namespace: kube-system
    +    roleRef: 
    +      apiGroup: rbac.authorization.k8s.io
    +      kind: Role
    +      name: extension-apiserver-authentication-reader
    +    subjects: 
    +    - kind: ServiceAccount
    +      name: cloud-controller-manager
    +      namespace: kube-system
    +    - kind: User
    +      name: cloud-controller-manager
    +    ---
    +    apiVersion: apps/v1
    +    kind: DaemonSet
    +    metadata: 
    +      labels: 
    +        component: cloud-controller-manager
    +        tier: control-plane
    +      name: vsphere-cloud-controller-manager
    +      namespace: kube-system
    +    spec: 
    +      selector: 
    +        matchLabels: 
    +          name: vsphere-cloud-controller-manager
    +      template: 
    +        metadata: 
    +          labels: 
    +            component: cloud-controller-manager
    +            name: vsphere-cloud-controller-manager
    +            tier: control-plane
    +        spec: 
    +          affinity: 
    +            nodeAffinity: 
    +              requiredDuringSchedulingIgnoredDuringExecution: 
    +                nodeSelectorTerms: 
    +                - matchExpressions: 
    +                  - key: node-role.kubernetes.io/control-plane
    +                    operator: Exists
    +                - matchExpressions: 
    +                  - key: node-role.kubernetes.io/master
    +                    operator: Exists
    +          containers: 
    +          - args: 
    +            - --v=2
    +            - --cloud-provider=vsphere
    +            - --cloud-config=/etc/cloud/vsphere.conf
    +            image: gcr.io/cloud-provider-vsphere/cpi/release/manager:v1.25.3
    +            name: vsphere-cloud-controller-manager
    +            resources: 
    +              requests: 
    +                cpu: 200m
    +            volumeMounts: 
    +            - mountPath: /etc/cloud
    +              name: vsphere-config-volume
    +              readOnly: true
    +          hostNetwork: true
    +          priorityClassName: system-node-critical
    +          securityContext: 
    +            runAsUser: 1001
    +          serviceAccountName: cloud-controller-manager
    +          tolerations: 
    +          - effect: NoSchedule
    +            key: node.cloudprovider.kubernetes.io/uninitialized
    +            value: "true"
    +          - effect: NoSchedule
    +            key: node-role.kubernetes.io/master
    +            operator: Exists
    +          - effect: NoSchedule
    +            key: node-role.kubernetes.io/control-plane
    +            operator: Exists
    +          - effect: NoSchedule
    +            key: node.kubernetes.io/not-ready
    +            operator: Exists
    +          volumes: 
    +          - configMap: 
    +              name: vsphere-cloud-config
    +            name: vsphere-config-volume
    +      updateStrategy: 
    +        type: RollingUpdate
    +kind: ConfigMap
    +metadata:
    +  name: ${CLUSTER_NAME}-cpi-manifests
    +  namespace: ${NAMESPACE}
    +
    +
    +
    +
    +---
    +apiVersion: addons.cluster.x-k8s.io/v1beta1
    +kind: ClusterResourceSet
    +metadata:
    +  name: ${CLUSTER_NAME}-calico-module-resource
    +  namespace: ${NAMESPACE}
    +spec:
    +  clusterSelector:
    +    matchLabels:
    +      cluster.x-k8s.io/cluster-name: ${CLUSTER_NAME}
    +  resources:
    +    - kind: ConfigMap
    +      name: ${CLUSTER_NAME}-calico-module-cr
    +  strategy: Reconcile
    +---
    +apiVersion: v1
    +data:
    +  calico.yaml: |
    +    apiVersion: platform.verrazzano.io/v1alpha1
    +    kind: Module
    +    metadata:
    +      name: calico
    +      namespace: default
    +    spec:
    +      moduleName: calico
    +      targetNamespace: default
    +      values:
    +        tigeraOperator:
    +          version: ${TIGERA_TAG=v1.29.0}
    +        installation:
    +          cni:
    +            type: Calico
    +          calicoNetwork:
    +            bgp: Disabled
    +            ipPools:
    +              - cidr: ${POD_CIDR=192.168.0.0/16}
    +                encapsulation: VXLAN
    +          registry: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}
    +          imagePath: ${OCNE_IMAGE_PATH=olcne}
    +kind: ConfigMap
    +metadata:
    +  annotations:
    +    note: generated
    +  labels:
    +    type: generated
    +  name: ${CLUSTER_NAME}-calico-module-cr
    +  namespace: ${NAMESPACE}
    +
    + +
    + + +
    +
  2. +
  3. +

    Generate and apply the template by running the following command: + + +

    +
    +
    $ clusterctl generate yaml --from vsphere-capi.yaml | kubectl apply -f -
    +
    + +
    + +

    +
  4. +
+

To get the kubeconfig file, run: + + +

+
+
$ clusterctl get kubeconfig kluster1 -n kluster1 > kluster1
+
+ +
+ +

+

Finish cluster configuration

+

After the cluster resources are created, you must perform some additional steps to finish the configuration of the cluster.

+
    +
  1. +

    If vSphere does not have a load balancer, then you can deploy MetalLB. + + +

    +
    +
    $ export KUBECONFIG=kluster1
    + 
    +ADDRESS_RANGE=${1:-"subnet-from-vSphere-network"};
    + 
    +$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml --wait=true;
    +$ kubectl rollout status deployment -n metallb-system controller -w;
    +$ kubectl apply -f -  <<EOF1
    +  apiVersion: metallb.io/v1beta1
    +  kind: IPAddressPool
    +  metadata:
    +    name: vzlocalpool
    +    namespace: metallb-system
    +  spec:
    +    addresses:
    +    - ${ADDRESS_RANGE}
    +EOF1
    + 
    +$ kubectl apply -f -  <<-EOF2
    +  apiVersion: metallb.io/v1beta1
    +  kind: L2Advertisement
    +  metadata:
    +    name: vzmetallb
    +    namespace: metallb-system
    +  spec:
    +    ipAddressPools:
    +    - vzlocalpool
    +EOF2
    + 
    +$ sleep 10;
    +$ kubectl wait --namespace metallb-system --for=condition=ready pod --all --timeout=300s
    +
    + +
    + +

    +
  2. +
  3. +

    Create a default storage class on the cluster. + + +

    +
    +
    $ export KUBECONFIG=kluster1
    +$ kubectl apply -f -  <<-EOF
    +  kind: StorageClass
    +  apiVersion: storage.k8s.io/v1
    +  metadata:
    +    name: vmware-sc
    +    annotations:
    +      storageclass.kubernetes.io/is-default-class: "true"
    +  provisioner: csi.vsphere.vmware.com
    +  volumeBindingMode: WaitForFirstConsumer
    +EOF
    +
    + +
    + +

    +
  4. +
  5. +

    Install Verrazzano on the managed cluster. + + +

    +
    +
    $ export KUBECONFIG=kluster1 
    +
    +$ vz install -f - <<EOF
    +  apiVersion: install.verrazzano.io/v1beta1
    +  kind: Verrazzano
    +  metadata:
    +    name: example-verrazzano
    +  spec:
    +    profile: dev
    +    defaultVolumeSource:
    +      persistentVolumeClaim:
    +        claimName: verrazzano-storage
    +    volumeClaimSpecTemplates:
    +      - metadata:
    +          name: verrazzano-storage
    +        spec:
    +          resources:
    +            requests:
    +              storage: 2Gi
    +EOF
    +
    + +
    + +

    +
  6. +
+

Your admin cluster and first managed cluster are now up and running and ready to deploy applications. You can also add more managed clusters.

+

For more information, refer to the documentation for Cluster API and Cluster API vSphere:

+ +

Troubleshoot the deployment

+

If the deployment of the vSphere resources fails, then you can check the log files to diagnose the issue.

+

The vSphere cluster controller provider logs: + + +

+
+
$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=infrastructure-vsphere
+
+ +
+ +

+

The OCNE control plane provider logs: + + +

+
+
$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=control-plane-ocne
+
+ +
+ +

+

NOTE: If the CSI pod deploys before Calico, then the pod may enter a CrashLoop state. Restart the pod to fix the issue.

+ + +
+
+
$ kubectl --kubeconfig kluster1 scale deploy  -n kube-system vsphere-csi-controller --replicas=0
+$ kubectl --kubeconfig kluster1 scale deploy  -n kube-system vsphere-csi-controller --replicas=1
+
+ +
+ + +

Delete the clusters

+
    +
  1. Delete the managed clusters. + + +
    +
    +
    $ kubectl delete cluster $CLUSTER_NAME
    +
    + +
    + +
  2. +
  3. Delete the admin cluster. + + +
    +
    +
    $ kind delete cluster
    +
    + +
    + +
  4. +
+

Do not use kubectl delete -f capi-quickstart.yaml to delete the entire cluster template at once because it might leave behind pending resources that you need to clean up manually.

+ + +
+ + + + + + +
+ + +
+ +
+ + +
+
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/v1.7/docs/applications/about-applications/index.html b/v1.7/docs/applications/about-applications/index.html index 793d8eaf32..2392e94cf4 100644 --- a/v1.7/docs/applications/about-applications/index.html +++ b/v1.7/docs/applications/about-applications/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/delivery/deploy/index.html b/v1.7/docs/applications/delivery/deploy/index.html index db523bcc6d..81b5ab11d3 100644 --- a/v1.7/docs/applications/delivery/deploy/index.html +++ b/v1.7/docs/applications/delivery/deploy/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/delivery/enable/index.html b/v1.7/docs/applications/delivery/enable/index.html index 782c60ef3d..7f44da6a7d 100644 --- a/v1.7/docs/applications/delivery/enable/index.html +++ b/v1.7/docs/applications/delivery/enable/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/delivery/index.html b/v1.7/docs/applications/delivery/index.html index dbc8cc854e..a78235d8a5 100644 --- a/v1.7/docs/applications/delivery/index.html +++ b/v1.7/docs/applications/delivery/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/index.html b/v1.7/docs/applications/index.html index 62bdb96453..646e8f34ac 100644 --- a/v1.7/docs/applications/index.html +++ b/v1.7/docs/applications/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/kubernetes/auth_policy/index.html b/v1.7/docs/applications/kubernetes/auth_policy/index.html index c6a86d48aa..2a93ba964d 100644 --- a/v1.7/docs/applications/kubernetes/auth_policy/index.html +++ b/v1.7/docs/applications/kubernetes/auth_policy/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/kubernetes/certificate/index.html b/v1.7/docs/applications/kubernetes/certificate/index.html index 1d43211df6..91c293bc22 100644 --- a/v1.7/docs/applications/kubernetes/certificate/index.html +++ b/v1.7/docs/applications/kubernetes/certificate/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/kubernetes/create_kubernetes/index.html b/v1.7/docs/applications/kubernetes/create_kubernetes/index.html index 2ad3bff865..067ce3b3d6 100644 --- a/v1.7/docs/applications/kubernetes/create_kubernetes/index.html +++ b/v1.7/docs/applications/kubernetes/create_kubernetes/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/kubernetes/gateway_virtual_service/index.html b/v1.7/docs/applications/kubernetes/gateway_virtual_service/index.html index ffb9b9b7e0..c7d41a287a 100644 --- a/v1.7/docs/applications/kubernetes/gateway_virtual_service/index.html +++ b/v1.7/docs/applications/kubernetes/gateway_virtual_service/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/kubernetes/index.html b/v1.7/docs/applications/kubernetes/index.html index 5492bd917d..395340f060 100644 --- a/v1.7/docs/applications/kubernetes/index.html +++ b/v1.7/docs/applications/kubernetes/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/kubernetes/wiring-metrics/index.html b/v1.7/docs/applications/kubernetes/wiring-metrics/index.html index 2d05b807e3..68025db1fb 100644 --- a/v1.7/docs/applications/kubernetes/wiring-metrics/index.html +++ b/v1.7/docs/applications/kubernetes/wiring-metrics/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/multicluster/index.html b/v1.7/docs/applications/multicluster/index.html index 7e1483f8e3..c5c2ade198 100644 --- a/v1.7/docs/applications/multicluster/index.html +++ b/v1.7/docs/applications/multicluster/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/multicluster/intro/index.html b/v1.7/docs/applications/multicluster/intro/index.html index ed2a26677c..dc7f42eb85 100644 --- a/v1.7/docs/applications/multicluster/intro/index.html +++ b/v1.7/docs/applications/multicluster/intro/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/multicluster/mcresources/index.html b/v1.7/docs/applications/multicluster/mcresources/index.html index b385a247a5..9a74b40509 100644 --- a/v1.7/docs/applications/multicluster/mcresources/index.html +++ b/v1.7/docs/applications/multicluster/mcresources/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/multicluster/mcresources/managedcluster/verrazzanomanagedcluster/index.html b/v1.7/docs/applications/multicluster/mcresources/managedcluster/verrazzanomanagedcluster/index.html index 899c90c306..57546873d2 100644 --- a/v1.7/docs/applications/multicluster/mcresources/managedcluster/verrazzanomanagedcluster/index.html +++ b/v1.7/docs/applications/multicluster/mcresources/managedcluster/verrazzanomanagedcluster/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/multicluster/mcresources/multiclusterapplicationconfiguration/multiclusterapplicationconfiguration/index.html b/v1.7/docs/applications/multicluster/mcresources/multiclusterapplicationconfiguration/multiclusterapplicationconfiguration/index.html index d002e916cb..b921913392 100644 --- a/v1.7/docs/applications/multicluster/mcresources/multiclusterapplicationconfiguration/multiclusterapplicationconfiguration/index.html +++ b/v1.7/docs/applications/multicluster/mcresources/multiclusterapplicationconfiguration/multiclusterapplicationconfiguration/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/multicluster/mcresources/multiclusterresourcestatus/multiclusterresourcestatus/index.html b/v1.7/docs/applications/multicluster/mcresources/multiclusterresourcestatus/multiclusterresourcestatus/index.html index af5dabbd81..339609f181 100644 --- a/v1.7/docs/applications/multicluster/mcresources/multiclusterresourcestatus/multiclusterresourcestatus/index.html +++ b/v1.7/docs/applications/multicluster/mcresources/multiclusterresourcestatus/multiclusterresourcestatus/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/multicluster/mcresources/placement/placement/index.html b/v1.7/docs/applications/multicluster/mcresources/placement/placement/index.html index c2dcb5c733..44ed403a2e 100644 --- a/v1.7/docs/applications/multicluster/mcresources/placement/placement/index.html +++ b/v1.7/docs/applications/multicluster/mcresources/placement/placement/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/multicluster/mcresources/project/verrazzanoproject/index.html b/v1.7/docs/applications/multicluster/mcresources/project/verrazzanoproject/index.html index 3d330731f9..f25c4fcebb 100644 --- a/v1.7/docs/applications/multicluster/mcresources/project/verrazzanoproject/index.html +++ b/v1.7/docs/applications/multicluster/mcresources/project/verrazzanoproject/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/deploy-app/index.html b/v1.7/docs/applications/oam/deploy-app/index.html index 5ef0f4a6e8..fee19fc5fe 100644 --- a/v1.7/docs/applications/oam/deploy-app/index.html +++ b/v1.7/docs/applications/oam/deploy-app/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/index.html b/v1.7/docs/applications/oam/index.html index aa32b71d5c..66ec1f3351 100644 --- a/v1.7/docs/applications/oam/index.html +++ b/v1.7/docs/applications/oam/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/traits/about-traits/index.html b/v1.7/docs/applications/oam/traits/about-traits/index.html index dc7b29401e..ec460c7337 100644 --- a/v1.7/docs/applications/oam/traits/about-traits/index.html +++ b/v1.7/docs/applications/oam/traits/about-traits/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/traits/index.html b/v1.7/docs/applications/oam/traits/index.html index 0d9fba9b41..c9ad0bade1 100644 --- a/v1.7/docs/applications/oam/traits/index.html +++ b/v1.7/docs/applications/oam/traits/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/traits/ingress/ingress/index.html b/v1.7/docs/applications/oam/traits/ingress/ingress/index.html index da096280c5..df934c2ded 100644 --- a/v1.7/docs/applications/oam/traits/ingress/ingress/index.html +++ b/v1.7/docs/applications/oam/traits/ingress/ingress/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/traits/logging/logging/index.html b/v1.7/docs/applications/oam/traits/logging/logging/index.html index 8bb7c7c3d4..3237f64d25 100644 --- a/v1.7/docs/applications/oam/traits/logging/logging/index.html +++ b/v1.7/docs/applications/oam/traits/logging/logging/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/traits/metrics/metrics/index.html b/v1.7/docs/applications/oam/traits/metrics/metrics/index.html index 39bbb557b5..f686ebc79d 100644 --- a/v1.7/docs/applications/oam/traits/metrics/metrics/index.html +++ b/v1.7/docs/applications/oam/traits/metrics/metrics/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/verrazzanoproject/index.html b/v1.7/docs/applications/oam/verrazzanoproject/index.html index 4e1c4d59ab..10b111b885 100644 --- a/v1.7/docs/applications/oam/verrazzanoproject/index.html +++ b/v1.7/docs/applications/oam/verrazzanoproject/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/workloads/about-workloads/index.html b/v1.7/docs/applications/oam/workloads/about-workloads/index.html index 7d8232f47f..7c6e51e8d9 100644 --- a/v1.7/docs/applications/oam/workloads/about-workloads/index.html +++ b/v1.7/docs/applications/oam/workloads/about-workloads/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/workloads/coherence/coherence/index.html b/v1.7/docs/applications/oam/workloads/coherence/coherence/index.html index dbcce6442d..9061edaacd 100644 --- a/v1.7/docs/applications/oam/workloads/coherence/coherence/index.html +++ b/v1.7/docs/applications/oam/workloads/coherence/coherence/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/workloads/helidon/helidon/index.html b/v1.7/docs/applications/oam/workloads/helidon/helidon/index.html index f9901898c3..7a4eac083a 100644 --- a/v1.7/docs/applications/oam/workloads/helidon/helidon/index.html +++ b/v1.7/docs/applications/oam/workloads/helidon/helidon/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/workloads/index.html b/v1.7/docs/applications/oam/workloads/index.html index 5a9c2d4018..746191e2e0 100644 --- a/v1.7/docs/applications/oam/workloads/index.html +++ b/v1.7/docs/applications/oam/workloads/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/oam/workloads/weblogic/index.html b/v1.7/docs/applications/oam/workloads/weblogic/index.html index 522741bc4a..5135fece0e 100644 --- a/v1.7/docs/applications/oam/workloads/weblogic/index.html +++ b/v1.7/docs/applications/oam/workloads/weblogic/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/applications/troubleshooting-application-deployment/index.html b/v1.7/docs/applications/troubleshooting-application-deployment/index.html index 69e14c7eca..fed858e00a 100644 --- a/v1.7/docs/applications/troubleshooting-application-deployment/index.html +++ b/v1.7/docs/applications/troubleshooting-application-deployment/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/backup/argocd/index.html b/v1.7/docs/backup/argocd/index.html index b9aa658c81..ae9473628d 100644 --- a/v1.7/docs/backup/argocd/index.html +++ b/v1.7/docs/backup/argocd/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/backup/index.html b/v1.7/docs/backup/index.html index 16d48dd7af..e3edc24ae0 100644 --- a/v1.7/docs/backup/index.html +++ b/v1.7/docs/backup/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/backup/keycloak/index.html b/v1.7/docs/backup/keycloak/index.html index b88a421fde..8eca92fc83 100644 --- a/v1.7/docs/backup/keycloak/index.html +++ b/v1.7/docs/backup/keycloak/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/backup/opensearch/index.html b/v1.7/docs/backup/opensearch/index.html index bef25159ba..579f048b03 100644 --- a/v1.7/docs/backup/opensearch/index.html +++ b/v1.7/docs/backup/opensearch/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/backup/rancher/index.html b/v1.7/docs/backup/rancher/index.html index ebd6dd5c14..0d3bff100a 100644 --- a/v1.7/docs/backup/rancher/index.html +++ b/v1.7/docs/backup/rancher/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/argo-cd/index.html b/v1.7/docs/examples/argo-cd/index.html index 2ec6d74af5..7e3e713ec4 100644 --- a/v1.7/docs/examples/argo-cd/index.html +++ b/v1.7/docs/examples/argo-cd/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/helidon-config/index.html b/v1.7/docs/examples/helidon-config/index.html index dde0a64d7e..b961b57819 100644 --- a/v1.7/docs/examples/helidon-config/index.html +++ b/v1.7/docs/examples/helidon-config/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/hello-helidon/index.html b/v1.7/docs/examples/hello-helidon/index.html index e5c5ed60b1..096b823b5e 100644 --- a/v1.7/docs/examples/hello-helidon/index.html +++ b/v1.7/docs/examples/hello-helidon/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/index.html b/v1.7/docs/examples/index.html index 70d7591864..631ccef3ef 100644 --- a/v1.7/docs/examples/index.html +++ b/v1.7/docs/examples/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/microservices/hello-world/index.html b/v1.7/docs/examples/microservices/hello-world/index.html index 1a711e0ff4..c6b9d4a522 100644 --- a/v1.7/docs/examples/microservices/hello-world/index.html +++ b/v1.7/docs/examples/microservices/hello-world/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/microservices/index.html b/v1.7/docs/examples/microservices/index.html index ed4966dedd..0e6c7e6528 100644 --- a/v1.7/docs/examples/microservices/index.html +++ b/v1.7/docs/examples/microservices/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/microservices/sock-shop/index.html b/v1.7/docs/examples/microservices/sock-shop/index.html index d427e926dd..ec3a2095ce 100644 --- a/v1.7/docs/examples/microservices/sock-shop/index.html +++ b/v1.7/docs/examples/microservices/sock-shop/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/microservices/spring-boot/index.html b/v1.7/docs/examples/microservices/spring-boot/index.html index 23de7667ac..aed7a13b68 100644 --- a/v1.7/docs/examples/microservices/spring-boot/index.html +++ b/v1.7/docs/examples/microservices/spring-boot/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/multicluster/hello-helidon/index.html b/v1.7/docs/examples/multicluster/hello-helidon/index.html index 63f8a01a7f..d5af3da540 100644 --- a/v1.7/docs/examples/multicluster/hello-helidon/index.html +++ b/v1.7/docs/examples/multicluster/hello-helidon/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/multicluster/index.html b/v1.7/docs/examples/multicluster/index.html index b380c98ec9..413b2e6005 100644 --- a/v1.7/docs/examples/multicluster/index.html +++ b/v1.7/docs/examples/multicluster/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/multicluster/sock-shop/index.html b/v1.7/docs/examples/multicluster/sock-shop/index.html index 42663fe2b1..a38bdea770 100644 --- a/v1.7/docs/examples/multicluster/sock-shop/index.html +++ b/v1.7/docs/examples/multicluster/sock-shop/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/multicluster/todo-list/index.html b/v1.7/docs/examples/multicluster/todo-list/index.html index 49de2046f9..3a043075fd 100644 --- a/v1.7/docs/examples/multicluster/todo-list/index.html +++ b/v1.7/docs/examples/multicluster/todo-list/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/wls-coh/bobs-books/index.html b/v1.7/docs/examples/wls-coh/bobs-books/index.html index 5543f20568..8cac94b33e 100644 --- a/v1.7/docs/examples/wls-coh/bobs-books/index.html +++ b/v1.7/docs/examples/wls-coh/bobs-books/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/wls-coh/index.html b/v1.7/docs/examples/wls-coh/index.html index e4b6d3de10..0b68e76108 100644 --- a/v1.7/docs/examples/wls-coh/index.html +++ b/v1.7/docs/examples/wls-coh/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/examples/wls-coh/todo-list/index.html b/v1.7/docs/examples/wls-coh/todo-list/index.html index a17d75fd7f..1364d645af 100644 --- a/v1.7/docs/examples/wls-coh/todo-list/index.html +++ b/v1.7/docs/examples/wls-coh/todo-list/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/guides/ha/ha/index.html b/v1.7/docs/guides/ha/ha/index.html index 7908a8ab56..52c409b7ab 100644 --- a/v1.7/docs/guides/ha/ha/index.html +++ b/v1.7/docs/guides/ha/ha/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/guides/ha/index.html b/v1.7/docs/guides/ha/index.html index 82634c23ea..7e6a4dd664 100644 --- a/v1.7/docs/guides/ha/index.html +++ b/v1.7/docs/guides/ha/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/guides/ha/node-failure/index.html b/v1.7/docs/guides/ha/node-failure/index.html index eb1dbbf9db..b98cda6569 100644 --- a/v1.7/docs/guides/ha/node-failure/index.html +++ b/v1.7/docs/guides/ha/node-failure/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/guides/ha/prod-upgrade/index.html b/v1.7/docs/guides/ha/prod-upgrade/index.html index cce219f3aa..8410d44380 100644 --- a/v1.7/docs/guides/ha/prod-upgrade/index.html +++ b/v1.7/docs/guides/ha/prod-upgrade/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/guides/index.html b/v1.7/docs/guides/index.html index f1bec13b29..1782f3f423 100644 --- a/v1.7/docs/guides/index.html +++ b/v1.7/docs/guides/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/guides/lift-and-shift/lift-and-shift/index.html b/v1.7/docs/guides/lift-and-shift/lift-and-shift/index.html index ff8e698b62..3b2e9a047b 100644 --- a/v1.7/docs/guides/lift-and-shift/lift-and-shift/index.html +++ b/v1.7/docs/guides/lift-and-shift/lift-and-shift/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/guides/sidecar/index.html b/v1.7/docs/guides/sidecar/index.html index e57cdd3d40..ad8d2187e2 100644 --- a/v1.7/docs/guides/sidecar/index.html +++ b/v1.7/docs/guides/sidecar/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/index.html b/v1.7/docs/index.html index c8680ca614..3c3aed8fb3 100644 --- a/v1.7/docs/index.html +++ b/v1.7/docs/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/index.xml b/v1.7/docs/index.xml index 415a2b31e7..930712054d 100644 --- a/v1.7/docs/index.xml +++ b/v1.7/docs/index.xml @@ -3302,7 +3302,12 @@ $ kubectl delete -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7 <div class="alert alert-primary" role="alert"> <h4 class="alert-heading">NOTE</h4> - The terminology around clusters differs between CAPI and Verrazzano though the underlying concepts are the same. What CAPI calls Management and Workload clusters are equivalent to admin and managed clusters, respectively, in Verrazzano. + <p>Verrazzano and Cluster API use slightly different terminology for the same concepts:</p> +<ul> +<li>Admin cluster (Verrazzano) = management cluster (Cluster API)</li> +<li>Managed cluster (Verrazzano) = workload cluster (Cluster API)</li> +</ul> + </div> @@ -3323,6 +3328,15 @@ $ kubectl delete -f https://raw.githubusercontent.com/verrazzano/verrazzano/v1.7 <p>Next, a CAPI infrastructure provider will provision the first instance on the cloud provider and generate a provider ID, a unique identifier that any future nodes and clusters will use to associate with the instance. It will also create a kubeconfig file. The first control plane node is ready after these are created.</p> <p>After the admin cluster is up and running, you can use the clusterAPI component to create additional managed clusters.</p> + +<div class="alert alert-primary" role="alert"> +<h4 class="alert-heading">NOTE</h4> + + The Cluster API provides its own command line tool, <code>clusterctl</code>, to manage the lifecycle operations of a cluster API admin cluster. Do not use <code>clusterctl</code> to manage any OCNE or OKE clusters on OCI that you created in the console. You will create conflicts between changes made in the console and changes made with <code>clusterctl</code>. + +</div> + + @@ -8972,47 +8986,1964 @@ Velero documentation.</p> document .querySelectorAll(".highlight") .forEach((highlightDiv) => createCopyButton(highlightDiv)); -</script> -<pre tabindex="0"><code># Sample output showing just the status portion of the restore -status: - completionTimestamp: ... - phase: Completed - progress: - itemsRestored: 75 - totalItems: 75 - startTimestamp: ... -</code></pre></details> - - - - - - Docs: CLI Setup - /docs/setup/install/prepare/cli-setup/ - Mon, 01 Jan 0001 00:00:00 +0000 - - /docs/setup/install/prepare/cli-setup/ - - - - <p>The Verrazzano command-line tool, <code>vz</code>, is available for Linux and Mac systems. -Download the binary you want from the <a href="https://github.com/verrazzano/verrazzano/releases/">Releases</a> page.</p> - - -<div class="alert alert-primary" role="alert"> -<h4 class="alert-heading">NOTE</h4> - - <ul> -<li>Installing the command-line tool, <code>vz</code>, is optional.</li> -<li>For optimal functionality, install or upgrade the CLI version to match the desired Verrazzano version.</li> -</ul> - - -</div> - -<h2 id="install-the-vz-cli">Install the vz CLI</h2> -<p>These instructions demonstrate installing the CLI on Linux AMD64 machines.</p> -<h3 id="download-the-latest-release">Download the latest release</h3> +</script> +<pre tabindex="0"><code># Sample output showing just the status portion of the restore +status: + completionTimestamp: ... + phase: Completed + progress: + itemsRestored: 75 + totalItems: 75 + startTimestamp: ... +</code></pre></details> + + + + + + Docs: CLI Setup + /docs/setup/install/prepare/cli-setup/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /docs/setup/install/prepare/cli-setup/ + + + + <p>The Verrazzano command-line tool, <code>vz</code>, is available for Linux and Mac systems. +Download the binary you want from the <a href="https://github.com/verrazzano/verrazzano/releases/">Releases</a> page.</p> + + +<div class="alert alert-primary" role="alert"> +<h4 class="alert-heading">NOTE</h4> + + <ul> +<li>Installing the command-line tool, <code>vz</code>, is optional.</li> +<li>For optimal functionality, install or upgrade the CLI version to match the desired Verrazzano version.</li> +</ul> + + +</div> + +<h2 id="install-the-vz-cli">Install the vz CLI</h2> +<p>These instructions demonstrate installing the CLI on Linux AMD64 machines.</p> +<h3 id="download-the-latest-release">Download the latest release</h3> +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre><code> $ curl -LO https://github.com/verrazzano/verrazzano/releases/download/v1.7.0/verrazzano-1.7.0-linux-amd64.tar.gz +</code></pre> +</div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +<h3 id="validate-the-binary-optional">Validate the binary (optional)</h3> +<p>Download the <code>vz</code> checksum file. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre><code> $ curl -LO https://github.com/verrazzano/verrazzano/releases/download/v1.7.0/verrazzano-1.7.0-linux-amd64.tar.gz.sha256 +</code></pre> +</div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<p>Validate the <code>vz</code> binary against the checksum file. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre><code>$ sha256sum -c verrazzano-1.7.0-linux-amd64.tar.gz.sha256 +</code></pre> +</div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<h3 id="unpack-and-copy-the-vz-binary">Unpack and copy the vz binary</h3> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span> $ tar xvf verrazzano-1.7.0-linux-amd64.tar.gz +</span></span></code></pre></div><p>The following command needs to be run as root.</p> +<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span> $ sudo cp verrazzano-1.7.0/bin/vz /usr/local/bin +</span></span></code></pre></div><h3 id="test-to-ensure-that-the-version-you-installed-is-up-to-date">Test to ensure that the version you installed is up-to-date</h3> +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre><code> $ vz version +</code></pre> +</div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +<p>The resulting output should be similar to the following. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre><code>Version: v1.7.0 +BuildDate: 2023-02-12T21:07:26Z +GitCommit: cb0778bbf7a2cd90e1ae8458abd242f9da27a100 +</code></pre> +</div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<h2 id="use-the-vz-cli">Use the vz CLI</h2> +<p>Verrazzano provides a command-line tool for managing a Verrazzano environment using the Verrazzano and Kubernetes API.</p> +<p>Common use cases include installing, upgrading, and uninstalling Verrazzano, +as well as analyzing failures in a running Verrazzano environment.</p> +<h3 id="usage-information">Usage information</h3> +<p>Use the following syntax to run <code>vz</code> commands from your terminal window. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre><code>vz [command] [flags] +</code></pre> +</div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<h3 id="available-commands">Available commands</h3> +<table> +<thead> +<tr> +<th>Command</th> +<th>Definition</th> +</tr> +</thead> +<tbody> +<tr> +<td><code>analyze</code></td> +<td>Analyze cluster</td> +</tr> +<tr> +<td><code>bug-report</code></td> +<td>Collect information from the cluster to report an issue</td> +</tr> +<tr> +<td><code>completion</code></td> +<td>Generate the autocompletion script for the specified shell</td> +</tr> +<tr> +<td><code>help</code></td> +<td>Help about any command</td> +</tr> +<tr> +<td><code>install</code></td> +<td>Install Verrazzano</td> +</tr> +<tr> +<td><code>status</code></td> +<td>Status of the Verrazzano installation and access endpoints</td> +</tr> +<tr> +<td><code>uninstall</code></td> +<td>Uninstall Verrazzano</td> +</tr> +<tr> +<td><code>upgrade</code></td> +<td>Upgrade Verrazzano</td> +</tr> +<tr> +<td><code>version</code></td> +<td>Verrazzano version information</td> +</tr> +</tbody> +</table> +<h3 id="available-flags">Available Flags</h3> +<p>These flags apply to all the commands.</p> +<table> +<thead> +<tr> +<th>Flag</th> +<th>Definition</th> +</tr> +</thead> +<tbody> +<tr> +<td><code>--context string</code></td> +<td>The name of the kubeconfig file context to use.</td> +</tr> +<tr> +<td><code>-h</code>, <code>--help</code></td> +<td>Help for <code>vz</code>.</td> +</tr> +<tr> +<td><code>--kubeconfig string</code></td> +<td>Path to the kubeconfig file to use.</td> +</tr> +</tbody> +</table> + + + + + + Docs: Create OCNE Clusters Running on Microsoft Azure + /docs/advanced/ocne-azure/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /docs/advanced/ocne-azure/ + + + + + +<div class="alert alert-danger" role="alert"> +<h4 class="alert-heading">NOTE</h4> + + This feature is experimental. It has not been thoroughly tested and is provided for informational purposes only. We make no guarantees about its safety or stability and do not recommend implementing this feature in production environments. + +</div> + +<p>The Cluster API project provides a standard set of Kubernetes-style APIs for cluster management. Officially, Verrazzano currently only supports using Cluster API to <a href="../docs/setup/provision-cluster/">provision OCNE and OKE clusters on OCI</a>.</p> +<p>However, you can also experiment with using the features of the Cluster API project directly to deploy OCNE clusters on Microsoft Azure.</p> +<p>For more information on Cluster API or Cluster API with Azure, see:</p> +<ul> +<li><a href="https://cluster-api.sigs.k8s.io/introduction.html">Kubernetes Cluster API Documentation</a></li> +<li><a href="https://capz.sigs.k8s.io/introduction">The Cluster API Provider Azure Book</a> +<ul> +<li><a href="https://capz.sigs.k8s.io/topics/getting-started">Getting started with cluster-api-provider-azure</a></li> +</ul> +</li> +</ul> + + +<div class="alert alert-primary" role="alert"> +<h4 class="alert-heading">NOTE</h4> + + <p>Verrazzano and Cluster API use slightly different terminology for the same concepts:</p> +<ul> +<li>Admin cluster (Verrazzano) = management cluster (Cluster API)</li> +<li>Managed cluster (Verrazzano) = workload cluster (Cluster API)</li> +</ul> + + +</div> + +<h2 id="prepare-azure-resources">Prepare Azure resources</h2> +<p>Before you can deploy a Cluster API cluster, you need to set up a few resources in Azure.</p> +<ol> +<li>Install the Azure command-line interface (CLI) tool. For instructions, see <a href="https://learn.microsoft.com/en-us/cli/azure/install-azure-cli">How to install the Azure CLI</a> in the Microsoft Azure documentation.</li> +<li>Create an Azure resource group. In the Azure CLI, run the following command: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ az group create --name &lt;ResourceGroupName&gt; --location &lt;location&gt; +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +For more detailed instructions, see <a href="https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-cli">Manage Azure Resource Groups by using Azure CLI</a> in the Microsoft Azure documentation.</li> +<li>Create a service principal. Make sure it has the privileges it needs to create resources. This means a contributor role at minimum. The following example creates a service principal, assigns it the contributor role, and defines its scope. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ az ad sp create-for-rbac --name myServicePrincipalName \ + --role Contributor \ + --scopes /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> +For more detailed instructions, see <a href="https://learn.microsoft.com/en-us/cli/azure/azure-cli-sp-tutorial-1">Create an Azure service principal with Azure CLI</a> in the Microsoft Azure documentation.</li> +</ol> +<h2 id="set-up-the-admin-cluster">Set up the admin cluster</h2> +<p>The Cluster API requires an initial cluster as a starting point to deploy its resources.</p> +<ol> +<li> +<p>Install kind. Follow the instructions at <a href="https://kind.sigs.k8s.io/docs/user/quick-start/#installation">Installation</a> in the kind documentation.</p> +</li> +<li> +<p>Create a Kubernetes cluster using kind. Follow the instructions at <a href="https://cluster-api.sigs.k8s.io/user/quick-start#install-andor-configure-a-kubernetes-cluster">Quick Start: Install and/or configure a Kubernetes cluster</a> in The Cluster API Book.</p> +</li> +<li> +<p>Install the clusterctl CLI tool. clusterctl manages the lifecycle operations of a cluster API admin cluster. Follow the instructions at <a href="https://cluster-api.sigs.k8s.io/user/quick-start.html#install-clusterctl">Quick Start: Install clusterctl</a> in the Cluster API Book.</p> +</li> +<li> +<p>Install the Verrazzano CLI tool using the instructions at <a href="../docs/setup/install/prepare/cli-setup/">CLI Setup</a>.</p> +</li> +<li> +<p>Install Verrazzano on the cluster using either the <code>dev</code> or <code>prod</code> installation profile. Follow the instructions at <a href="../docs/setup/install/perform/cli-installation/">Install with CLI</a>. The <code>certManager</code> and <code>clusterAPI</code> components are required and must remain enabled.</p> +</li> +<li> +<p>On the cluster, set environment variables for the following Azure resource IDs from your Azure account and from the service principal you created:</p> +<ul> +<li>Subscription ID</li> +<li>Tenant ID</li> +<li>Client ID</li> +<li>Client Secret</li> +</ul> +<p>For example: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code># Azure resource IDs +$ export AZURE_SUBSCRIPTION_ID=&#34;&lt;SubscriptionId&gt;&#34; +$ export AZURE_TENANT_ID=&#34;&lt;Tenant&gt;&#34; +$ export AZURE_CLIENT_ID=&#34;&lt;AppId&gt;&#34; +$ export AZURE_CLIENT_SECRET=&#34;&lt;Password&gt;&#34; + +# Base64 encode the Azure Resource IDs +$ export AZURE_SUBSCRIPTION_ID_B64=&#34;$(echo -n &#34;$AZURE_SUBSCRIPTION_ID&#34; | base64 | tr -d &#39;\n&#39;)&#34; +$ export AZURE_TENANT_ID_B64=&#34;$(echo -n &#34;$AZURE_TENANT_ID&#34; | base64 | tr -d &#39;\n&#39;)&#34; +$ export AZURE_CLIENT_ID_B64=&#34;$(echo -n &#34;$AZURE_CLIENT_ID&#34; | base64 | tr -d &#39;\n&#39;)&#34; +$ export AZURE_CLIENT_SECRET_B64=&#34;$(echo -n &#34;$AZURE_CLIENT_SECRET&#34; | base64 | tr -d &#39;\n&#39;)&#34; + +# Settings needed for AzureClusterIdentity used by the AzureCluster +$ export AZURE_CLUSTER_IDENTITY_SECRET_NAME=&#34;&lt;cluster-identity-secret&gt;&#34; +$ export CLUSTER_IDENTITY_NAME=&#34;&lt;cluster-identity&gt;&#34; +$ export AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE=&#34;default&#34; +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Create a secret that includes the password of the service principal identity created in Azure. This secret is referenced by the AzureClusterIdentity used by the AzureCluster. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ kubectl create secret generic &#34;${AZURE_CLUSTER_IDENTITY_SECRET_NAME}&#34; --from-literal=clientSecret=&#34;${AZURE_CLIENT_SECRET}&#34; --namespace &#34;${AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE}&#34; +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Install the Cluster API Azure infrastructure provider. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl init -n verrazzano-capi -i azure +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<p>clusterctl will report when the admin cluster was successfully initialized.</p> +</li> +</ol> +<h2 id="create-a-managed-cluster">Create a managed cluster</h2> +<p>The Cluster API uses a cluster template to deploy a predefined set of Cluster API objects and create a managed cluster.</p> +<ol> +<li> +<p>Set the following environment variables so they are available to the cluster template. Update the values to reflect your own environment. +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code># Base64 encoded SSH key for node access +$ export AZURE_SSH_PUBLIC_KEY_B64=&#34;&lt;sshKey&gt;&#34; + +# Select VM types. +$ export AZURE_CONTROL_PLANE_MACHINE_TYPE=&#34;Standard_D2s_v3&#34; +$ export AZURE_NODE_MACHINE_TYPE=&#34;Standard_D2s_v3&#34; + +# [Optional] Select resource group. The default value is ${CLUSTER_NAME}. +$ export AZURE_RESOURCE_GROUP=&#34;&lt;resourceGroupName&gt; + +# Name of the Azure datacenter location. Change this value to your desired location. +$ export AZURE_LOCATION=&#34;&lt;location&gt;&#34; + +# Cluster name info +$ export CLUSTER_NAME=&#34;capi-quickstart&#34; +$ export KUBERNETES_VERSION=&#34;&lt;k8sVersion&gt;&#34; +$ export NAMESPACE=&#34;default&#34; +$ export CONTROL_PLANE_MACHINE_COUNT=&#34;1&#34; +$ export WORKER_MACHINE_COUNT=&#34;1&#34; +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +<li> +<p>Copy the cluster template and save it locally as <code>azure-capi.yaml</code>.</p> + <details> + <summary><b>Click here for the cluster template</b></summary> + <style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>apiVersion: cluster.x-k8s.io/v1beta1 +kind: Cluster +metadata: + name: ${CLUSTER_NAME} + namespace: default +spec: + clusterNetwork: + pods: + cidrBlocks: + - 192.168.0.0/16 + controlPlaneRef: + apiVersion: controlplane.cluster.x-k8s.io/v1beta1 + kind: OCNEControlPlane + name: ${CLUSTER_NAME}-control-plane + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: AzureCluster + name: ${CLUSTER_NAME} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: AzureCluster +metadata: + name: ${CLUSTER_NAME} + namespace: default +spec: + identityRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: AzureClusterIdentity + name: ${CLUSTER_IDENTITY_NAME} + location: ${AZURE_LOCATION} + networkSpec: + subnets: + - name: control-plane-subnet + role: control-plane + - name: node-subnet + role: node + vnet: + name: ${AZURE_VNET_NAME:=${CLUSTER_NAME}-vnet} + resourceGroup: ${AZURE_RESOURCE_GROUP:=${CLUSTER_NAME}} + subscriptionID: ${AZURE_SUBSCRIPTION_ID} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: AzureMachineTemplate +metadata: + name: ${CLUSTER_NAME}-control-plane + namespace: default +spec: + template: + spec: + image: + marketplace: + publisher: &#34;Oracle&#34; + offer: &#34;Oracle-Linux&#34; + sku: &#34;ol88-lvm-gen2&#34; + version: &#34;8.8.3&#34; + dataDisks: + - diskSizeGB: 256 + lun: 0 + nameSuffix: etcddisk + osDisk: + diskSizeGB: 128 + osType: Linux + sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=&#34;&#34;} + vmSize: ${AZURE_CONTROL_PLANE_MACHINE_TYPE} +--- +apiVersion: cluster.x-k8s.io/v1beta1 +kind: MachineDeployment +metadata: + name: ${CLUSTER_NAME}-md-0 + namespace: default +spec: + clusterName: ${CLUSTER_NAME} + replicas: ${WORKER_MACHINE_COUNT} + selector: + matchLabels: null + template: + spec: + bootstrap: + configRef: + apiVersion: bootstrap.cluster.x-k8s.io/v1beta1 + kind: OCNEConfigTemplate + name: ${CLUSTER_NAME}-md-0 + clusterName: ${CLUSTER_NAME} + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: AzureMachineTemplate + name: ${CLUSTER_NAME}-md-0 + version: ${KUBERNETES_VERSION} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: AzureMachineTemplate +metadata: + name: ${CLUSTER_NAME}-md-0 + namespace: default +spec: + template: + spec: + image: + marketplace: + publisher: &#34;Oracle&#34; + offer: &#34;Oracle-Linux&#34; + sku: &#34;ol88-lvm-gen2&#34; + version: &#34;8.8.3&#34; + osDisk: + diskSizeGB: 128 + osType: Linux + sshPublicKey: ${AZURE_SSH_PUBLIC_KEY_B64:=&#34;&#34;} + vmSize: ${AZURE_NODE_MACHINE_TYPE} +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 +kind: AzureClusterIdentity +metadata: + labels: + clusterctl.cluster.x-k8s.io/move-hierarchy: &#34;true&#34; + name: ${CLUSTER_IDENTITY_NAME} + namespace: default +spec: + allowedNamespaces: {} + clientID: ${AZURE_CLIENT_ID} + clientSecret: + name: ${AZURE_CLUSTER_IDENTITY_SECRET_NAME} + namespace: ${AZURE_CLUSTER_IDENTITY_SECRET_NAMESPACE} + tenantID: ${AZURE_TENANT_ID} + type: ServicePrincipal +--- +apiVersion: controlplane.cluster.x-k8s.io/v1alpha1 +kind: OCNEControlPlane +metadata: + name: ${CLUSTER_NAME}-control-plane + namespace: default +spec: + moduleOperator: + enabled: true + verrazzanoPlatformOperator: + enabled: true + controlPlaneConfig: + clusterConfiguration: + apiServer: + extraArgs: + cloud-provider: external + certSANs: + - localhost + - 127.0.0.1 + dns: + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + imageTag: ${DNS_TAG=v1.9.3} + etcd: + local: + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + imageTag: ${ETCD_TAG=3.5.6} + controllerManager: + extraArgs: + cloud-provider: external + networking: {} + scheduler: {} + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + files: + - contentFrom: + secret: + key: control-plane-azure.json + name: ${CLUSTER_NAME}-control-plane-azure-json + owner: root:root + path: /etc/kubernetes/azure.json + permissions: &#34;0644&#34; + initConfiguration: + nodeRegistration: + criSocket: /var/run/crio/crio.sock + kubeletExtraArgs: + cloud-provider: external + name: &#39;{{ local_hostname }}&#39; + joinConfiguration: + discovery: {} + nodeRegistration: + criSocket: /var/run/crio/crio.sock + kubeletExtraArgs: + cloud-provider: external + name: &#39;{{ local_hostname }}&#39; + preOCNECommands: + - hostnamectl set-hostname &#34;{{ ds.meta_data.hostname }}&#34; + - echo &#34;::1 ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6&#34; + &gt;/etc/hosts + - echo &#34;127.0.0.1 {{ ds.meta_data.hostname }} {{ local_hostname }} localhost + localhost.localdomain localhost4 localhost4.localdomain4&#34; &gt;&gt;/etc/hosts + users: + - name: opc + sudo: ALL=(ALL) NOPASSWD:ALL + machineTemplate: + infrastructureRef: + apiVersion: infrastructure.cluster.x-k8s.io/v1beta1 + kind: AzureMachineTemplate + name: ${CLUSTER_NAME}-control-plane + namespace: default + replicas: ${CONTROL_PLANE_MACHINE_COUNT} + version: ${KUBERNETES_VERSION} +--- +apiVersion: bootstrap.cluster.x-k8s.io/v1alpha1 +kind: OCNEConfigTemplate +metadata: + name: ${CLUSTER_NAME}-md-0 + namespace: default +spec: + template: + spec: + clusterConfiguration: + imageRepository: ${OCNE_IMAGE_REPOSITORY=container-registry.oracle.com}/${OCNE_IMAGE_PATH=olcne} + joinConfiguration: + nodeRegistration: + kubeletExtraArgs: + cloud-provider: external + name: &#39;{{ local_hostname }}&#39; + preOCNECommands: + - hostnamectl set-hostname &#34;{{ ds.meta_data.hostname }}&#34; + - echo &#34;::1 ipv6-localhost ipv6-loopback localhost6 localhost6.localdomain6&#34; + &gt;/etc/hosts + - echo &#34;127.0.0.1 {{ ds.meta_data.hostname }} {{ local_hostname }} localhost + localhost.localdomain localhost4 localhost4.localdomain4&#34; &gt;&gt;/etc/hosts + users: + - name: opc + sudo: ALL=(ALL) NOPASSWD:ALL +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script> + </details> +</li> +<li> +<p>Generate and apply the template by running the following command: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl generate yaml --from azure-capi.yaml | kubectl apply -f - +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +</li> +</ol> +<p>To view the status of the cluster and its resources, run: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl describe cluster $CLUSTER_NAME +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<p>To get the <code>kubeconfig</code> file, run: +<style type="text/css"> + code { + margin: 0; + padding: 0; + } + + .copy-code-button { + position: absolute; + right: 0; + top: -29px; + font-size: 12px; + line-height: 14px; + width: 65px; + color: white; + background-color: #30638E; + border: 1px solid #30638E; + white-space: nowrap; + padding: 6px 6px 7px 6px; + } + + .copy-code-button:hover, + .copy-code-button:focus{ + background-color: gray; + opacity: 1; + } + +</style> + +<div class="clipboard"> + <div class="highlight"> +<pre tabindex="0"><code>$ clusterctl get kubeconfig ${CLUSTER_NAME} &gt; ${CLUSTER_NAME}.kubeconfig +</code></pre></div> + +</div> + +<script> + function createCopyButton(highlightDiv) { + const button = document.createElement("button"); + button.innerText = "Copy"; + button.className = "copy-code-button"; + button.addEventListener("click", () => + copyCodeToClipboard(button, highlightDiv) + ); + addCopyButton(button, highlightDiv); + } + + function addCopyButton(button, highlightDiv) { + highlightDiv.insertBefore(button, highlightDiv.firstChild); + const wrapper = document.createElement("div"); + highlightDiv.parentNode.insertBefore(wrapper, highlightDiv); + wrapper.appendChild(highlightDiv); + } + + async function copyCodeToClipboard(button, highlightDiv) { + let codeToCopy = highlightDiv.querySelector(":last-child > code, pre").innerText; + + let codeBlock = codeToCopy.split("\n"); + let expectedLine = codeBlock.findIndex(line => line.toLowerCase().startsWith("# expected response") || line.toLowerCase().startsWith("# sample output")); + if (expectedLine !== -1) { + codeBlock.splice(expectedLine); + } + codeToCopy = codeBlock.join("\n"); + + codeToCopy = codeToCopy.replace(/^#(.*)$/gm, '').trim(); + + codeToCopy = codeToCopy.replace(/\$\s+/gm, '').trim(); + codeToCopy = codeToCopy.replace(/\n{2,}/g,'\n'); + console.log(codeToCopy); + try { + await navigator.clipboard.writeText(codeToCopy); + } catch (err) { + + const textarea = document.createElement('textarea'); + textarea.value = codeToCopy; + document.body.appendChild(textarea); + textarea.select(); + document.execCommand('copy'); + textarea.remove(); + } + button.blur(); + button.innerText = "Copied"; + setTimeout(function () { + button.innerText = "Copy"; + }, 2000); + } + + + document + .querySelectorAll(".highlight") + .forEach((highlightDiv) => createCopyButton(highlightDiv)); +</script></p> +<h2 id="finish-cluster-configuration">Finish cluster configuration</h2> +<p>After the cluster resources are created, you must perform some additional steps to finish the configuration of the cluster.</p> +<ol> +<li>Install a cloud controller manager (CCM). A CCM is necessary when deploying cloud resources such as load balancers. <style type="text/css"> code { margin: 0; @@ -9043,9 +10974,8 @@ Download the binary you want from the <a href="https://github.com/verrazz <div class="clipboard"> <div class="highlight"> -<pre><code> $ curl -LO https://github.com/verrazzano/verrazzano/releases/download/v1.7.0/verrazzano-1.7.0-linux-amd64.tar.gz -</code></pre> -</div> +<pre tabindex="0"><code>$ helm install --kubeconfig=./${CLUSTER_NAME}.kubeconfig --repo https://raw.githubusercontent.com/kubernetes-sigs/cloud-provider-azure/master/helm/repo cloud-provider-azure --generate-name --set infra.clusterName=clusterName --set cloudControllerManager.clusterCIDR=&#34;192.168.0.0/16&#34; --set cloudControllerManager.caCertDir=/etc/pki/ca-trust +</code></pre></div> </div> @@ -9104,9 +11034,8 @@ Download the binary you want from the <a href="https://github.com/verrazz document .querySelectorAll(".highlight") .forEach((highlightDiv) => createCopyButton(highlightDiv)); -</script> -<h3 id="validate-the-binary-optional">Validate the binary (optional)</h3> -<p>Download the <code>vz</code> checksum file. +</script></li> +<li>Install a container network interface (CNI). The following example uses the Calico CNI. <style type="text/css"> code { margin: 0; @@ -9137,9 +11066,9 @@ Download the binary you want from the <a href="https://github.com/verrazz <div class="clipboard"> <div class="highlight"> -<pre><code> $ curl -LO https://github.com/verrazzano/verrazzano/releases/download/v1.7.0/verrazzano-1.7.0-linux-amd64.tar.gz.sha256 -</code></pre> -</div> +<pre tabindex="0"><code>$ helm repo add projectcalico https://docs.tigera.io/calico/charts --kubeconfig=./${CLUSTER_NAME}.kubeconfig &amp;&amp; \ +$ helm install calico projectcalico/tigera-operator --kubeconfig=./${CLUSTER_NAME}.kubeconfig -f https://raw.githubusercontent.com/kubernetes-sigs/cluster-api-provider-azure/main/templates/addons/calico/values.yaml --namespace tigera-operator --create-namespace +</code></pre></div> </div> @@ -9198,8 +11127,17 @@ Download the binary you want from the <a href="https://github.com/verrazz document .querySelectorAll(".highlight") .forEach((highlightDiv) => createCopyButton(highlightDiv)); -</script></p> -<p>Validate the <code>vz</code> binary against the checksum file. +</script></li> +</ol> +<p>Your admin cluster and first managed cluster are now up and running and ready to deploy applications. You can add more managed clusters as needed.</p> +<p>For more information, refer to the documentation for Cluster API and Cluster API Azure:</p> +<ul> +<li><a href="https://cluster-api.sigs.k8s.io/introduction.html">Kubernetes Cluster API Documentation</a></li> +<li><a href="https://capz.sigs.k8s.io/introduction">The Cluster API Provider Azure Book</a></li> +</ul> +<h2 id="troubleshoot-the-deployment">Troubleshoot the deployment</h2> +<p>If the deployment of the Azure resources fails, then you can check the following log files to diagnose the issue:</p> +<p>The Azure cluster controller provider logs: <style type="text/css"> code { margin: 0; @@ -9230,9 +11168,8 @@ Download the binary you want from the <a href="https://github.com/verrazz <div class="clipboard"> <div class="highlight"> -<pre><code>$ sha256sum -c verrazzano-1.7.0-linux-amd64.tar.gz.sha256 -</code></pre> -</div> +<pre tabindex="0"><code>$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=infrastructure-azure +</code></pre></div> </div> @@ -9291,12 +11228,8 @@ Download the binary you want from the <a href="https://github.com/verrazz document .querySelectorAll(".highlight") .forEach((highlightDiv) => createCopyButton(highlightDiv)); -</script></p> -<h3 id="unpack-and-copy-the-vz-binary">Unpack and copy the vz binary</h3> -<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span> $ tar xvf verrazzano-1.7.0-linux-amd64.tar.gz -</span></span></code></pre></div><p>The following command needs to be run as root.</p> -<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span> $ sudo cp verrazzano-1.7.0/bin/vz /usr/local/bin -</span></span></code></pre></div><h3 id="test-to-ensure-that-the-version-you-installed-is-up-to-date">Test to ensure that the version you installed is up-to-date</h3> +</script> +The OCNE control plane provider logs: <style type="text/css"> code { margin: 0; @@ -9327,9 +11260,8 @@ Download the binary you want from the <a href="https://github.com/verrazz <div class="clipboard"> <div class="highlight"> -<pre><code> $ vz version -</code></pre> -</div> +<pre tabindex="0"><code>$ kubectl logs -n verrazzano-capi -l cluster.x-k8s.io/provider=control-plane-ocne +</code></pre></div> </div> @@ -9388,8 +11320,11 @@ Download the binary you want from the <a href="https://github.com/verrazz document .querySelectorAll(".highlight") .forEach((highlightDiv) => createCopyButton(highlightDiv)); -</script> -<p>The resulting output should be similar to the following. +</script></p> +<p><strong>NOTE</strong>: If a pod enters a <code>CrashLoopBackOff</code> state, then you can either restart the deployment or wait for the state to run its course. This is a known issue that should not affect the deployment of your cluster.</p> +<h2 id="delete-the-clusters">Delete the clusters</h2> +<ol> +<li>Delete the managed clusters. <style type="text/css"> code { margin: 0; @@ -9420,11 +11355,8 @@ Download the binary you want from the <a href="https://github.com/verrazz <div class="clipboard"> <div class="highlight"> -<pre><code>Version: v1.7.0 -BuildDate: 2023-02-12T21:07:26Z -GitCommit: cb0778bbf7a2cd90e1ae8458abd242f9da27a100 -</code></pre> -</div> +<pre tabindex="0"><code>$ kubectl delete cluster $CLUSTER_NAME +</code></pre></div> </div> @@ -9483,13 +11415,8 @@ GitCommit: cb0778bbf7a2cd90e1ae8458abd242f9da27a100 document .querySelectorAll(".highlight") .forEach((highlightDiv) => createCopyButton(highlightDiv)); -</script></p> -<h2 id="use-the-vz-cli">Use the vz CLI</h2> -<p>Verrazzano provides a command-line tool for managing a Verrazzano environment using the Verrazzano and Kubernetes API.</p> -<p>Common use cases include installing, upgrading, and uninstalling Verrazzano, -as well as analyzing failures in a running Verrazzano environment.</p> -<h3 id="usage-information">Usage information</h3> -<p>Use the following syntax to run <code>vz</code> commands from your terminal window. +</script></li> +<li>Delete the admin cluster. <style type="text/css"> code { margin: 0; @@ -9520,9 +11447,8 @@ as well as analyzing failures in a running Verrazzano environment.</p> <div class="clipboard"> <div class="highlight"> -<pre><code>vz [command] [flags] -</code></pre> -</div> +<pre tabindex="0"><code>$ kind delete cluster +</code></pre></div> </div> @@ -9581,78 +11507,9 @@ as well as analyzing failures in a running Verrazzano environment.</p> document .querySelectorAll(".highlight") .forEach((highlightDiv) => createCopyButton(highlightDiv)); -</script></p> -<h3 id="available-commands">Available commands</h3> -<table> -<thead> -<tr> -<th>Command</th> -<th>Definition</th> -</tr> -</thead> -<tbody> -<tr> -<td><code>analyze</code></td> -<td>Analyze cluster</td> -</tr> -<tr> -<td><code>bug-report</code></td> -<td>Collect information from the cluster to report an issue</td> -</tr> -<tr> -<td><code>completion</code></td> -<td>Generate the autocompletion script for the specified shell</td> -</tr> -<tr> -<td><code>help</code></td> -<td>Help about any command</td> -</tr> -<tr> -<td><code>install</code></td> -<td>Install Verrazzano</td> -</tr> -<tr> -<td><code>status</code></td> -<td>Status of the Verrazzano installation and access endpoints</td> -</tr> -<tr> -<td><code>uninstall</code></td> -<td>Uninstall Verrazzano</td> -</tr> -<tr> -<td><code>upgrade</code></td> -<td>Upgrade Verrazzano</td> -</tr> -<tr> -<td><code>version</code></td> -<td>Verrazzano version information</td> -</tr> -</tbody> -</table> -<h3 id="available-flags">Available Flags</h3> -<p>These flags apply to all the commands.</p> -<table> -<thead> -<tr> -<th>Flag</th> -<th>Definition</th> -</tr> -</thead> -<tbody> -<tr> -<td><code>--context string</code></td> -<td>The name of the kubeconfig file context to use.</td> -</tr> -<tr> -<td><code>-h</code>, <code>--help</code></td> -<td>Help for <code>vz</code>.</td> -</tr> -<tr> -<td><code>--kubeconfig string</code></td> -<td>Path to the kubeconfig file to use.</td> -</tr> -</tbody> -</table> +</script></li> +</ol> +<p>Do not use <code>kubectl delete -f capi-quickstart.yaml</code> to delete the entire cluster template at once because it might leave behind pending resources that you need to clean up manually.</p> @@ -27865,133 +29722,5 @@ spec: - - Docs: Create OCNE Clusters Running on OCI - /docs/setup/provision-cluster/ocne-oci/ - Mon, 01 Jan 0001 00:00:00 +0000 - - /docs/setup/provision-cluster/ocne-oci/ - - - - <h3 id="before-you-begin">Before you begin</h3> -<p>You&rsquo;ll need to:</p> -<ul> -<li>Set up an Oracle Cloud Infrastructure (OCI) account with -<ul> -<li>A compartment</li> -<li>An <a href="https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#two">API signing key</a></li> -</ul> -</li> -<li>Generate an SSH key pair to use for cluster authentication</li> -</ul> -<h3 id="create-a-new-ocne-cluster-on-oci">Create a new OCNE cluster on OCI</h3> -<p>To provision new Oracle Cloud Native Environment (OCNE) managed clusters on OCI, complete the following steps:</p> -<ol> -<li> -<p>Log in to the console. To find the console URL for your cluster, refer to <a href="../docs/setup/access/console-urls/">Get console URLs</a> and use the <code>rancherURL</code> value.</p> -</li> -<li> -<p>Open the navigation menu and select <strong>Cluster Management</strong>.</p> -</li> -<li> -<p>From the left menu, select <strong>Cloud Credentials</strong>, and then click <strong>Create</strong>. Cloud credentials store the credentials for your cloud infrastructure provider.</p> -</li> -<li> -<p>Choose <strong>Oracle</strong>.</p> -</li> -<li> -<p>Provide a name for the cloud credential and then fill in the rest of the fields with information from your OCI account and its API signing key.</p> -<ul> -<li> -<p><strong>fingerprint</strong>: The fingerprint of the public API key. <a href="https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#four">Find your key&rsquo;s fingerprint</a>.</p> -</li> -<li> -<p><strong>passphrase</strong>: The passphrase used for the API key, if it was encrypted.</p> -</li> -<li> -<p><strong>privateKeyContents</strong>: Copy the contents of the private key portion of the API key pair. <a href="https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#two">Generate an API Signing Key</a>.</p> -</li> -<li> -<p><strong>region</strong>: Enter the identifier for the current region of your tenancy. <a href="https://docs.oracle.com/en-us/iaas/Content/General/Concepts/regions.htm#About">Find your region identifier</a>.</p> -</li> -<li> -<p><strong>tenancyId</strong>: Enter the OCID of your tenancy. <a href="https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#five">Find your tenancy OCID</a>.</p> -</li> -<li> -<p><strong>userId</strong>: Enter the OCID of the user. <a href="https://docs.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm#five">Find your user OCID</a>.</p> -</li> -</ul> -</li> -<li> -<p>Click <strong>Create</strong> to save the new cloud credential.</p> -</li> -<li> -<p>From the left menu, select <strong>Clusters</strong>, and then click <strong>Create</strong>.</p> -</li> -<li> -<p>Select <strong>Oracle OCNE on OCI</strong> and provide a name for the cluster.</p> -</li> -<li> -<p>Expand <strong>Member Roles</strong> to add any users that you want grant access to this cluster and their permissions.</p> -</li> -<li> -<p>Expand <strong>Labels and Annotations</strong> to configure Kubernetes <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/">labels</a> and <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/">annotations</a> for the cluster.</p> -</li> -<li> -<p>Select the cloud credentials that you created. Ensure that the appropriate Region and Compartment are selected from their drop-down menus.</p> -</li> -<li> -<p>Click <strong>Next</strong>.</p> -</li> -<li> -<p>Set up your network. Choose <strong>Quick Create</strong> to create a new virtual cloud network (VCN) configured to the specifications required for an OCNE cluster or <strong>Existing Infrastructure</strong> to use a VCN that&rsquo;s already configured in your OCI account.</p> -<ul> -<li> -<p>If you choose the <strong>Existing Infrastructure</strong> option, then select the compartment where your VCN is located from the <strong>VCN Compartment</strong> drop-down menu, then the VCN itself from the <strong>Virtual Cloud Network</strong> drop-down menu. Next, select subnets within the VCN for each of the <strong>Cloud Plane Subnet</strong>, <strong>Load Balancer Subnet</strong>, and <strong>Worker Node Subnet</strong> drop-down menus. See <a href="../docs/setup/install/prepare/platforms/vcn-oci/">Configure a VCN in OCI</a> for requirements.</p> -</li> -<li> -<p>The VCN compartment does not need to match the compartment specified in the cloud credential.</p> -</li> -</ul> -</li> -<li> -<p>Click <strong>Next</strong>.</p> -</li> -<li> -<p>Choose a Node Image from the drop-down menu.</p> -<p>You can choose to override the default Node Image. Expand <strong>OCNE Image Configuration</strong> and provide a custom image OCID. If your custom image includes OCNE binaries, then you can select <strong>Skip OCNE Dependency Installation</strong> to avoid duplicates.</p> -</li> -<li> -<p>Copy or upload an SSH public key to manage authentication of the cluster. Your SSH public key is installed on the cluster nodes, enabling SSH after the cluster is created.</p> -</li> -<li> -<p>Configure the cluster control plane. Select the <strong>OCNE Version</strong> first because it determines which Kubernetes versions are available, then choose a <strong>Kubernetes Version</strong> and a <strong>Control Plane Shape</strong>. You can leave the rest of the options at their default setting or modify them as needed.</p> -<p>Under <strong>Advanced</strong>, you can choose to edit image tags for <strong>ETCD</strong>, <strong>CoreDNS</strong>, and <strong>Calico</strong>, or whether to install <strong>OCI CCM/CSI</strong> and <strong>Calico</strong>.</p> -</li> -<li> -<p>Add node pools to your cluster. Clusters without node pools will schedule pods on control plane nodes.</p> -</li> -<li> -<p>(Optional) Install Verrazzano on the cluster. Choose a <strong>Verrazzano version</strong> from the drop-down menu. You can also expand <strong>Advanced</strong> to make changes to the Verrazzano Resource YAML. By default, Verrazzano is installed using the <code>managed-cluster</code> profile which enables a limited set of components on the cluster.</p> -</li> -<li> -<p>Expand <strong>Advanced Settings</strong> to make additional modifications to the default settings of your new cluster.</p> -<ul> -<li><strong>YAML Manifests</strong>: Supply additional YAML manifests that are automatically installed after cluster creation. The total size of all additional YAML manifests may not exceed 500 KB.</li> -<li><strong>Cluster Networking</strong>: Configure cluster IP ranges and proxy settings.</li> -<li><strong>Container Registry</strong>: Specify a private registry for your container.</li> -</ul> -</li> -<li> -<p>Click <strong>Create</strong>. It can take up to 30 minutes to provision all of the resources for your cluster, particularly for multi-node clusters.</p> -</li> -</ol> -<p>When your cluster finishes provisioning, you can access it from the main <strong>Cluster Management</strong> page.</p> -<p>For help troubleshooting cluster creation, see <a href="../docs/troubleshooting/troubleshooting-clusterapi/">Cluster Creation Issues</a>.</p> - - - - diff --git a/v1.7/docs/introduction/architecture/index.html b/v1.7/docs/introduction/architecture/index.html index 184159aa6f..775af6c750 100644 --- a/v1.7/docs/introduction/architecture/index.html +++ b/v1.7/docs/introduction/architecture/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/introduction/features/index.html b/v1.7/docs/introduction/features/index.html index 10b9626f99..64c310abec 100644 --- a/v1.7/docs/introduction/features/index.html +++ b/v1.7/docs/introduction/features/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/introduction/index.html b/v1.7/docs/introduction/index.html index adb9863908..2779a87f2c 100644 --- a/v1.7/docs/introduction/index.html +++ b/v1.7/docs/introduction/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/introduction/verrazzanomulticluster/index.html b/v1.7/docs/introduction/verrazzanomulticluster/index.html index adc5ac6d20..06fe68b484 100644 --- a/v1.7/docs/introduction/verrazzanomulticluster/index.html +++ b/v1.7/docs/introduction/verrazzanomulticluster/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/introduction/verrazzanooam/index.html b/v1.7/docs/introduction/verrazzanooam/index.html index a41cd2a0ae..15217cb914 100644 --- a/v1.7/docs/introduction/verrazzanooam/index.html +++ b/v1.7/docs/introduction/verrazzanooam/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/networking/index.html b/v1.7/docs/networking/index.html index 1b46e783c0..7e5862abd6 100644 --- a/v1.7/docs/networking/index.html +++ b/v1.7/docs/networking/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/networking/istio/index.html b/v1.7/docs/networking/istio/index.html index 104563dafa..80d83371a6 100644 --- a/v1.7/docs/networking/istio/index.html +++ b/v1.7/docs/networking/istio/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/networking/security/certificates/index.html b/v1.7/docs/networking/security/certificates/index.html index 0fa8ed00dd..b8d3e7321c 100644 --- a/v1.7/docs/networking/security/certificates/index.html +++ b/v1.7/docs/networking/security/certificates/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/networking/security/index.html b/v1.7/docs/networking/security/index.html index a20dd222f9..47d6c1a12d 100644 --- a/v1.7/docs/networking/security/index.html +++ b/v1.7/docs/networking/security/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/networking/traffic/dns/index.html b/v1.7/docs/networking/traffic/dns/index.html index 9e832d117b..d9b369d2f8 100644 --- a/v1.7/docs/networking/traffic/dns/index.html +++ b/v1.7/docs/networking/traffic/dns/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/networking/traffic/externallbs/index.html b/v1.7/docs/networking/traffic/externallbs/index.html index f57234873b..8709498ba7 100644 --- a/v1.7/docs/networking/traffic/externallbs/index.html +++ b/v1.7/docs/networking/traffic/externallbs/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/networking/traffic/index.html b/v1.7/docs/networking/traffic/index.html index c761461cc1..0b60931df5 100644 --- a/v1.7/docs/networking/traffic/index.html +++ b/v1.7/docs/networking/traffic/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/networking/traffic/ingress/index.html b/v1.7/docs/networking/traffic/ingress/index.html index 0d583d418a..90112b9b25 100644 --- a/v1.7/docs/networking/traffic/ingress/index.html +++ b/v1.7/docs/networking/traffic/ingress/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/networking/traffic/ociloadbalancerips/index.html b/v1.7/docs/networking/traffic/ociloadbalancerips/index.html index 5be030d954..60d9341729 100644 --- a/v1.7/docs/networking/traffic/ociloadbalancerips/index.html +++ b/v1.7/docs/networking/traffic/ociloadbalancerips/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/index.html b/v1.7/docs/observability/index.html index 2dd207914f..556ae6aebe 100644 --- a/v1.7/docs/observability/index.html +++ b/v1.7/docs/observability/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/configure-opensearch/index.html b/v1.7/docs/observability/logging/configure-opensearch/index.html index 53cad9e7bb..6d0dff28a5 100644 --- a/v1.7/docs/observability/logging/configure-opensearch/index.html +++ b/v1.7/docs/observability/logging/configure-opensearch/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/configure-opensearch/opensearch/index.html b/v1.7/docs/observability/logging/configure-opensearch/opensearch/index.html index ea7d36c1e8..372fa9b11f 100644 --- a/v1.7/docs/observability/logging/configure-opensearch/opensearch/index.html +++ b/v1.7/docs/observability/logging/configure-opensearch/opensearch/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/fluent-operator/index.html b/v1.7/docs/observability/logging/fluent-operator/index.html index dabeefd572..daa6b82837 100644 --- a/v1.7/docs/observability/logging/fluent-operator/index.html +++ b/v1.7/docs/observability/logging/fluent-operator/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/fluentd/fluentd/index.html b/v1.7/docs/observability/logging/fluentd/fluentd/index.html index 7982d6ef61..5a70ded204 100644 --- a/v1.7/docs/observability/logging/fluentd/fluentd/index.html +++ b/v1.7/docs/observability/logging/fluentd/fluentd/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/fluentd/index.html b/v1.7/docs/observability/logging/fluentd/index.html index 3b409b1ca1..c6bcf41f77 100644 --- a/v1.7/docs/observability/logging/fluentd/index.html +++ b/v1.7/docs/observability/logging/fluentd/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/index.html b/v1.7/docs/observability/logging/index.html index 68882ae1ff..828b1146c8 100644 --- a/v1.7/docs/observability/logging/index.html +++ b/v1.7/docs/observability/logging/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/logs/index.html b/v1.7/docs/observability/logging/logs/index.html index 6ea6bf33a3..50d52c66c3 100644 --- a/v1.7/docs/observability/logging/logs/index.html +++ b/v1.7/docs/observability/logging/logs/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/oci-logging/index.html b/v1.7/docs/observability/logging/oci-logging/index.html index 3d2c02a9ea..02b65db51c 100644 --- a/v1.7/docs/observability/logging/oci-logging/index.html +++ b/v1.7/docs/observability/logging/oci-logging/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/search/index.html b/v1.7/docs/observability/logging/search/index.html index a26139032a..ecce1f6db1 100644 --- a/v1.7/docs/observability/logging/search/index.html +++ b/v1.7/docs/observability/logging/search/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/logging/troubleshoot/index.html b/v1.7/docs/observability/logging/troubleshoot/index.html index 7de9f1f358..f9ea836f5f 100644 --- a/v1.7/docs/observability/logging/troubleshoot/index.html +++ b/v1.7/docs/observability/logging/troubleshoot/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/configure-metrics/index.html b/v1.7/docs/observability/monitoring/configure-metrics/index.html index da1bb25ab6..e2a0fb1671 100644 --- a/v1.7/docs/observability/monitoring/configure-metrics/index.html +++ b/v1.7/docs/observability/monitoring/configure-metrics/index.html @@ -107,7 +107,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -133,7 +133,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -825,7 +825,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/configure/alertmanager/index.html b/v1.7/docs/observability/monitoring/configure/alertmanager/index.html index ad1299aee6..1f140de9b5 100644 --- a/v1.7/docs/observability/monitoring/configure/alertmanager/index.html +++ b/v1.7/docs/observability/monitoring/configure/alertmanager/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/configure/grafana/grafana/index.html b/v1.7/docs/observability/monitoring/configure/grafana/grafana/index.html index dddf02e972..56b311a6c5 100644 --- a/v1.7/docs/observability/monitoring/configure/grafana/grafana/index.html +++ b/v1.7/docs/observability/monitoring/configure/grafana/grafana/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/configure/grafana/index.html b/v1.7/docs/observability/monitoring/configure/grafana/index.html index a9427adf09..645daa9202 100644 --- a/v1.7/docs/observability/monitoring/configure/grafana/index.html +++ b/v1.7/docs/observability/monitoring/configure/grafana/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/configure/index.html b/v1.7/docs/observability/monitoring/configure/index.html index 49b68fd070..5ba73ad80f 100644 --- a/v1.7/docs/observability/monitoring/configure/index.html +++ b/v1.7/docs/observability/monitoring/configure/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/configure/prometheus/index.html b/v1.7/docs/observability/monitoring/configure/prometheus/index.html index 1d4425ec12..57d33bc440 100644 --- a/v1.7/docs/observability/monitoring/configure/prometheus/index.html +++ b/v1.7/docs/observability/monitoring/configure/prometheus/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/configure/thanos/index.html b/v1.7/docs/observability/monitoring/configure/thanos/index.html index a90689bfb1..6054f000bd 100644 --- a/v1.7/docs/observability/monitoring/configure/thanos/index.html +++ b/v1.7/docs/observability/monitoring/configure/thanos/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/index.html b/v1.7/docs/observability/monitoring/index.html index db367ccdf4..35a8e5bfa9 100644 --- a/v1.7/docs/observability/monitoring/index.html +++ b/v1.7/docs/observability/monitoring/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/multicluster-metrics/index.html b/v1.7/docs/observability/monitoring/multicluster-metrics/index.html index 4643087f45..cf08230ca7 100644 --- a/v1.7/docs/observability/monitoring/multicluster-metrics/index.html +++ b/v1.7/docs/observability/monitoring/multicluster-metrics/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/monitoring/troubleshooting-prometheus/index.html b/v1.7/docs/observability/monitoring/troubleshooting-prometheus/index.html index ede4350f6b..7eb743f774 100644 --- a/v1.7/docs/observability/monitoring/troubleshooting-prometheus/index.html +++ b/v1.7/docs/observability/monitoring/troubleshooting-prometheus/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/storage/index.html b/v1.7/docs/observability/storage/index.html index c2b64e1e8a..81ad586d64 100644 --- a/v1.7/docs/observability/storage/index.html +++ b/v1.7/docs/observability/storage/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/tracing/application-tracing/index.html b/v1.7/docs/observability/tracing/application-tracing/index.html index 5cc614683a..663c21e396 100644 --- a/v1.7/docs/observability/tracing/application-tracing/index.html +++ b/v1.7/docs/observability/tracing/application-tracing/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/tracing/capture-traces/index.html b/v1.7/docs/observability/tracing/capture-traces/index.html index c48d3d8ce8..f14c67e049 100644 --- a/v1.7/docs/observability/tracing/capture-traces/index.html +++ b/v1.7/docs/observability/tracing/capture-traces/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/tracing/configure-tracing/index.html b/v1.7/docs/observability/tracing/configure-tracing/index.html index ebcaa01a4b..f00437454c 100644 --- a/v1.7/docs/observability/tracing/configure-tracing/index.html +++ b/v1.7/docs/observability/tracing/configure-tracing/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/tracing/index.html b/v1.7/docs/observability/tracing/index.html index 39525b81fa..12f8c02182 100644 --- a/v1.7/docs/observability/tracing/index.html +++ b/v1.7/docs/observability/tracing/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/observability/tracing/view-traces/index.html b/v1.7/docs/observability/tracing/view-traces/index.html index 60be18e49c..5ce6a8a4fd 100644 --- a/v1.7/docs/observability/tracing/view-traces/index.html +++ b/v1.7/docs/observability/tracing/view-traces/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/reference/index.html b/v1.7/docs/reference/index.html index 397a56321f..957e921dc9 100644 --- a/v1.7/docs/reference/index.html +++ b/v1.7/docs/reference/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/reference/migration/index.html b/v1.7/docs/reference/migration/index.html index 606454a943..16bc1b4d34 100644 --- a/v1.7/docs/reference/migration/index.html +++ b/v1.7/docs/reference/migration/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/reference/vao-clusters-v1alpha1/index.html b/v1.7/docs/reference/vao-clusters-v1alpha1/index.html index 64e6ab8966..39b81c1843 100644 --- a/v1.7/docs/reference/vao-clusters-v1alpha1/index.html +++ b/v1.7/docs/reference/vao-clusters-v1alpha1/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/reference/vao-oam-v1alpha1/index.html b/v1.7/docs/reference/vao-oam-v1alpha1/index.html index 3f36dd42ed..c9af7c992d 100644 --- a/v1.7/docs/reference/vao-oam-v1alpha1/index.html +++ b/v1.7/docs/reference/vao-oam-v1alpha1/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/reference/vco-clusters-v1alpha1/index.html b/v1.7/docs/reference/vco-clusters-v1alpha1/index.html index 9b858debc6..969291f22c 100644 --- a/v1.7/docs/reference/vco-clusters-v1alpha1/index.html +++ b/v1.7/docs/reference/vco-clusters-v1alpha1/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/reference/vpo-verrazzano-v1alpha1/index.html b/v1.7/docs/reference/vpo-verrazzano-v1alpha1/index.html index 87c573355c..fe9935861d 100644 --- a/v1.7/docs/reference/vpo-verrazzano-v1alpha1/index.html +++ b/v1.7/docs/reference/vpo-verrazzano-v1alpha1/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/reference/vpo-verrazzano-v1beta1/index.html b/v1.7/docs/reference/vpo-verrazzano-v1beta1/index.html index 0b4f51524e..8df9f3b3ce 100644 --- a/v1.7/docs/reference/vpo-verrazzano-v1beta1/index.html +++ b/v1.7/docs/reference/vpo-verrazzano-v1beta1/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/releasenotes/index.html b/v1.7/docs/releasenotes/index.html index 0ee9c00cd4..3feec9d4d3 100644 --- a/v1.7/docs/releasenotes/index.html +++ b/v1.7/docs/releasenotes/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • @@ -1188,7 +1203,6 @@

    Features

  • Added OKEQuickCreate custom resource to support ease-of-use when creating OKE clusters on OCI.
  • Added OCNEOCIQuickCreate custom resource to support ease-of-use when creating Oracle Cloud Native Environment clusters on OCI.
  • Added support for Thanos Ruler and Compactor.
  • -
  • Added support for Oracle Cloud Native Environment managed clusters on Azure.
  • Decoupled the Cluster Management API from Rancher.
  • Enabled lifecycle management of OKE clusters.
  • @@ -1203,6 +1217,7 @@

    Enhancements:

  • Added support for Oracle Cloud Native Environment v1.7.
  • Added the ability to enable security plug-ins in OpenSearch clusters.
  • Now, Verrazzano uses OpenSearch operator-managed OpenSearch. To avoid any data loss during an upgrade, we advise you to make a backup before upgrading.
  • +
  • Described trial method for using Cluster API to configure OCNE clusters on Microsoft Azure or VMware vSphere.
  • Component version updates:

  • - + +
  • + + + +
  • diff --git a/v1.7/docs/security/appsec/appsec/index.html b/v1.7/docs/security/appsec/appsec/index.html index d6c946845f..a8ea107f0b 100644 --- a/v1.7/docs/security/appsec/appsec/index.html +++ b/v1.7/docs/security/appsec/appsec/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/security/index.html b/v1.7/docs/security/index.html index bd5bb00d3d..872105f73f 100644 --- a/v1.7/docs/security/index.html +++ b/v1.7/docs/security/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/security/keycloak/index.html b/v1.7/docs/security/keycloak/index.html index a7765e72b1..2b3d944217 100644 --- a/v1.7/docs/security/keycloak/index.html +++ b/v1.7/docs/security/keycloak/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/security/keycloak/keycloak/index.html b/v1.7/docs/security/keycloak/keycloak/index.html index fd747a6ec6..67c5a0ad00 100644 --- a/v1.7/docs/security/keycloak/keycloak/index.html +++ b/v1.7/docs/security/keycloak/keycloak/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/security/proxies/authproxy/index.html b/v1.7/docs/security/proxies/authproxy/index.html index e26bec32e7..5a28b44c6b 100644 --- a/v1.7/docs/security/proxies/authproxy/index.html +++ b/v1.7/docs/security/proxies/authproxy/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/security/proxies/index.html b/v1.7/docs/security/proxies/index.html index ff22d5f83e..fc5bdb0d3c 100644 --- a/v1.7/docs/security/proxies/index.html +++ b/v1.7/docs/security/proxies/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/security/rbac/rbac/index.html b/v1.7/docs/security/rbac/rbac/index.html index 2773738e26..b2e73a5e25 100644 --- a/v1.7/docs/security/rbac/rbac/index.html +++ b/v1.7/docs/security/rbac/rbac/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/access/console-credentials/index.html b/v1.7/docs/setup/access/console-credentials/index.html index 1cd36650b9..0747f1ea64 100644 --- a/v1.7/docs/setup/access/console-credentials/index.html +++ b/v1.7/docs/setup/access/console-credentials/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/access/console-urls/index.html b/v1.7/docs/setup/access/console-urls/index.html index 9df900271a..589c7f893f 100644 --- a/v1.7/docs/setup/access/console-urls/index.html +++ b/v1.7/docs/setup/access/console-urls/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/access/index.html b/v1.7/docs/setup/access/index.html index 411fd6eea0..b540afffad 100644 --- a/v1.7/docs/setup/access/index.html +++ b/v1.7/docs/setup/access/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/access/password/index.html b/v1.7/docs/setup/access/password/index.html index 5a0054ceab..454adb5b9e 100644 --- a/v1.7/docs/setup/access/password/index.html +++ b/v1.7/docs/setup/access/password/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/index.html b/v1.7/docs/setup/index.html index 6c09777a79..3a76f74854 100644 --- a/v1.7/docs/setup/index.html +++ b/v1.7/docs/setup/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/index.html b/v1.7/docs/setup/install/index.html index da674a01d4..babb43dc4d 100644 --- a/v1.7/docs/setup/install/index.html +++ b/v1.7/docs/setup/install/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/perform/cli-installation/index.html b/v1.7/docs/setup/install/perform/cli-installation/index.html index 6cab1ef26a..69266a7719 100644 --- a/v1.7/docs/setup/install/perform/cli-installation/index.html +++ b/v1.7/docs/setup/install/perform/cli-installation/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/perform/helm-installation/index.html b/v1.7/docs/setup/install/perform/helm-installation/index.html index b1ed42f7a1..45adeaed89 100644 --- a/v1.7/docs/setup/install/perform/helm-installation/index.html +++ b/v1.7/docs/setup/install/perform/helm-installation/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/perform/index.html b/v1.7/docs/setup/install/perform/index.html index 4b79c8a64a..762b47fb51 100644 --- a/v1.7/docs/setup/install/perform/index.html +++ b/v1.7/docs/setup/install/perform/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/perform/kubectl-installation/index.html b/v1.7/docs/setup/install/perform/kubectl-installation/index.html index 18c789b2bd..78152200d0 100644 --- a/v1.7/docs/setup/install/perform/kubectl-installation/index.html +++ b/v1.7/docs/setup/install/perform/kubectl-installation/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/perform/profiles/index.html b/v1.7/docs/setup/install/perform/profiles/index.html index 1ea40a8028..5e6df3e940 100644 --- a/v1.7/docs/setup/install/perform/profiles/index.html +++ b/v1.7/docs/setup/install/perform/profiles/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/cli-setup/index.html b/v1.7/docs/setup/install/prepare/cli-setup/index.html index 9928809e70..4709a7c315 100644 --- a/v1.7/docs/setup/install/prepare/cli-setup/index.html +++ b/v1.7/docs/setup/install/prepare/cli-setup/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/index.html b/v1.7/docs/setup/install/prepare/index.html index fab5769131..29c71165a6 100644 --- a/v1.7/docs/setup/install/prepare/index.html +++ b/v1.7/docs/setup/install/prepare/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/platforms/generic/generic/index.html b/v1.7/docs/setup/install/prepare/platforms/generic/generic/index.html index 1afe7ddef4..437876ee01 100644 --- a/v1.7/docs/setup/install/prepare/platforms/generic/generic/index.html +++ b/v1.7/docs/setup/install/prepare/platforms/generic/generic/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/platforms/index.html b/v1.7/docs/setup/install/prepare/platforms/index.html index 806ddfd13b..25c6da2046 100644 --- a/v1.7/docs/setup/install/prepare/platforms/index.html +++ b/v1.7/docs/setup/install/prepare/platforms/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/platforms/kind/kind/index.html b/v1.7/docs/setup/install/prepare/platforms/kind/kind/index.html index 2cad43cd4f..b4c7bef317 100644 --- a/v1.7/docs/setup/install/prepare/platforms/kind/kind/index.html +++ b/v1.7/docs/setup/install/prepare/platforms/kind/kind/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/platforms/oci/oci/index.html b/v1.7/docs/setup/install/prepare/platforms/oci/oci/index.html index 1f06dd9c6e..cb0446832a 100644 --- a/v1.7/docs/setup/install/prepare/platforms/oci/oci/index.html +++ b/v1.7/docs/setup/install/prepare/platforms/oci/oci/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/platforms/olcne/index.html b/v1.7/docs/setup/install/prepare/platforms/olcne/index.html index c8371dc335..6ffe1cd816 100644 --- a/v1.7/docs/setup/install/prepare/platforms/olcne/index.html +++ b/v1.7/docs/setup/install/prepare/platforms/olcne/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/platforms/olcne/nfs/index.html b/v1.7/docs/setup/install/prepare/platforms/olcne/nfs/index.html index f543380820..317303f94d 100644 --- a/v1.7/docs/setup/install/prepare/platforms/olcne/nfs/index.html +++ b/v1.7/docs/setup/install/prepare/platforms/olcne/nfs/index.html @@ -111,7 +111,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -137,7 +137,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -829,7 +829,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/platforms/olcne/private-registry/index.html b/v1.7/docs/setup/install/prepare/platforms/olcne/private-registry/index.html index b6639e86a1..a9e74edae9 100644 --- a/v1.7/docs/setup/install/prepare/platforms/olcne/private-registry/index.html +++ b/v1.7/docs/setup/install/prepare/platforms/olcne/private-registry/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/platforms/vcn-oci/index.html b/v1.7/docs/setup/install/prepare/platforms/vcn-oci/index.html index 353b6b87b2..4c12151bbb 100644 --- a/v1.7/docs/setup/install/prepare/platforms/vcn-oci/index.html +++ b/v1.7/docs/setup/install/prepare/platforms/vcn-oci/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/prepare/prereqs/index.html b/v1.7/docs/setup/install/prepare/prereqs/index.html index 677fa67f6b..748ad5dedc 100644 --- a/v1.7/docs/setup/install/prepare/prereqs/index.html +++ b/v1.7/docs/setup/install/prepare/prereqs/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/verify/cli-verify/index.html b/v1.7/docs/setup/install/verify/cli-verify/index.html index 8b0525ce45..2fd85ec3cf 100644 --- a/v1.7/docs/setup/install/verify/cli-verify/index.html +++ b/v1.7/docs/setup/install/verify/cli-verify/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/verify/index.html b/v1.7/docs/setup/install/verify/index.html index 2ac9b8bc75..44ba349345 100644 --- a/v1.7/docs/setup/install/verify/index.html +++ b/v1.7/docs/setup/install/verify/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/verify/kubectl-verify/index.html b/v1.7/docs/setup/install/verify/kubectl-verify/index.html index fbc682ca92..35b40b5730 100644 --- a/v1.7/docs/setup/install/verify/kubectl-verify/index.html +++ b/v1.7/docs/setup/install/verify/kubectl-verify/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/install/verify/softwares/index.html b/v1.7/docs/setup/install/verify/softwares/index.html index 4a340d5aec..030f15f78b 100644 --- a/v1.7/docs/setup/install/verify/softwares/index.html +++ b/v1.7/docs/setup/install/verify/softwares/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/installationoverrides/index.html b/v1.7/docs/setup/installationoverrides/index.html index 5861cafa51..0dd1dab626 100644 --- a/v1.7/docs/setup/installationoverrides/index.html +++ b/v1.7/docs/setup/installationoverrides/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/advanced-mc-install/index.html b/v1.7/docs/setup/mc-install/advanced-mc-install/index.html index 356d388663..e05a25e4c3 100644 --- a/v1.7/docs/setup/mc-install/advanced-mc-install/index.html +++ b/v1.7/docs/setup/mc-install/advanced-mc-install/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/deregister-install/index.html b/v1.7/docs/setup/mc-install/deregister-install/index.html index 002a5dde36..dd2dff4f73 100644 --- a/v1.7/docs/setup/mc-install/deregister-install/index.html +++ b/v1.7/docs/setup/mc-install/deregister-install/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/index.html b/v1.7/docs/setup/mc-install/index.html index d18ed7cb3e..0d428e4b0f 100644 --- a/v1.7/docs/setup/mc-install/index.html +++ b/v1.7/docs/setup/mc-install/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/multicluster/index.html b/v1.7/docs/setup/mc-install/multicluster/index.html index c4310aadb1..4e5ae7b753 100644 --- a/v1.7/docs/setup/mc-install/multicluster/index.html +++ b/v1.7/docs/setup/mc-install/multicluster/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/register/index.html b/v1.7/docs/setup/mc-install/register/index.html index 3400f9c0ee..959b0640ea 100644 --- a/v1.7/docs/setup/mc-install/register/index.html +++ b/v1.7/docs/setup/mc-install/register/index.html @@ -91,7 +91,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -117,7 +117,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -809,7 +809,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/register/register-kubectl/index.html b/v1.7/docs/setup/mc-install/register/register-kubectl/index.html index 900251b29e..ff457a48bf 100644 --- a/v1.7/docs/setup/mc-install/register/register-kubectl/index.html +++ b/v1.7/docs/setup/mc-install/register/register-kubectl/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/register/syncclusters/index.html b/v1.7/docs/setup/mc-install/register/syncclusters/index.html index b70c9cea9c..54191aec95 100644 --- a/v1.7/docs/setup/mc-install/register/syncclusters/index.html +++ b/v1.7/docs/setup/mc-install/register/syncclusters/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/register/ui-register/index.html b/v1.7/docs/setup/mc-install/register/ui-register/index.html index d98c0f0ea3..873cd8e518 100644 --- a/v1.7/docs/setup/mc-install/register/ui-register/index.html +++ b/v1.7/docs/setup/mc-install/register/ui-register/index.html @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/troubleshooting-multicluster/index.html b/v1.7/docs/setup/mc-install/troubleshooting-multicluster/index.html index 104cb4f2be..79bbfe4fd1 100644 --- a/v1.7/docs/setup/mc-install/troubleshooting-multicluster/index.html +++ b/v1.7/docs/setup/mc-install/troubleshooting-multicluster/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/mc-install/verify-install/index.html b/v1.7/docs/setup/mc-install/verify-install/index.html index 731f72a057..3ff23341e9 100644 --- a/v1.7/docs/setup/mc-install/verify-install/index.html +++ b/v1.7/docs/setup/mc-install/verify-install/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/modify-installation/index.html b/v1.7/docs/setup/modify-installation/index.html index 246df53a21..9b372312b9 100644 --- a/v1.7/docs/setup/modify-installation/index.html +++ b/v1.7/docs/setup/modify-installation/index.html @@ -103,7 +103,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -129,7 +129,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../" data-offline-search-max-results="10" > @@ -821,7 +821,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/private-registry/private-registry/index.html b/v1.7/docs/setup/private-registry/private-registry/index.html index eeb36da532..188c788dec 100644 --- a/v1.7/docs/setup/private-registry/private-registry/index.html +++ b/v1.7/docs/setup/private-registry/private-registry/index.html @@ -99,7 +99,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -125,7 +125,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -817,7 +817,7 @@
  • - + +
  • + + + +
  • diff --git a/v1.7/docs/setup/provision-cluster/capi/index.html b/v1.7/docs/setup/provision-cluster/capi/index.html index e1d406b7f9..1396e5cbbc 100644 --- a/v1.7/docs/setup/provision-cluster/capi/index.html +++ b/v1.7/docs/setup/provision-cluster/capi/index.html @@ -25,12 +25,12 @@ - + - - + + @@ -95,7 +95,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -121,7 +121,7 @@ aria-label="Search this site…" autocomplete="off" - data-offline-search-index-json-src="../../../../offline-search-index.8a7cacfee38b8368de755719837c99b7.json" + data-offline-search-index-json-src="../../../../offline-search-index.13ff848cfb3b604d1b98dbe4670a5f81.json" data-offline-search-base-href="../../../../" data-offline-search-max-results="10" > @@ -813,7 +813,7 @@
  • - + +
  • + + + +
  • @@ -1118,7 +1133,12 @@

    Cluster API

    @@ -1139,6 +1159,15 @@

    NOTE

    Next, a CAPI infrastructure provider will provision the first instance on the cloud provider and generate a provider ID, a unique identifier that any future nodes and clusters will use to associate with the instance. It will also create a kubeconfig file. The first control plane node is ready after these are created.

    After the admin cluster is up and running, you can use the clusterAPI component to create additional managed clusters.

    + + + +