<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>OpenText Analytics Database 26.2.x – VerticaDB operator</title>
    <link>/en/containerized/db-operator/</link>
    <description>Recent content in VerticaDB operator on OpenText Analytics Database 26.2.x</description>
    <generator>Hugo -- gohugo.io</generator>
    
	  <atom:link href="/en/containerized/db-operator/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Containerized: Installing the VerticaDB operator</title>
      <link>/en/containerized/db-operator/installing-db-operator/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/containerized/db-operator/installing-db-operator/</guid>
      <description>
        
        
        &lt;p&gt;The VerticaDB operator is a custom controller that monitors CR instances to maintain the desired state of VerticaDB objects. The operator includes an admission controller, which is a webhook that queries a REST endpoint to verify changes to mutable states in a CR instance.&lt;/p&gt;
&lt;p&gt;By default, the operator is cluster-scoped—you can deploy one operator per cluster to monitor objects across all namespaces in the cluster. For flexibility, OpenText™ Analytics Database also provides a Helm chart deployment option that installs the operator at the namespace level.&lt;/p&gt;
&lt;h2 id=&#34;installation-options&#34;&gt;Installation options&lt;/h2&gt;
&lt;p&gt;The database provides the following options to install the VerticaDB operator and admission controller:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#helm-charts&#34;&gt;Helm charts&lt;/a&gt;. &lt;a href=&#34;https://helm.sh/&#34;&gt;Helm&lt;/a&gt; is a package manager for Kubernetes. The Helm chart option is the most common installation method and lets you customize your TLS configuration and environment setup. For example, Helm chart installations include operator logging levels and log rotation policy. For details about additional options, see &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/#&#34;&gt;Helm chart parameters&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The database also provides the &lt;a href=&#34;#quickstart-installation&#34;&gt;Quickstart&lt;/a&gt; Helm chart option so that you can get started quickly with minimal requirements.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#kubectl-installation&#34;&gt;kubectl installation&lt;/a&gt;. Apply the Custom Resource Definitions (CRDs) and VerticaDB operator directly. You can use the &lt;code&gt;kubectl&lt;/code&gt; tool to apply the latest CRD available on &lt;a href=&#34;https://github.com/vertica/vertica-kubernetes&#34;&gt;vertica-kubernetes&lt;/a&gt; GitHub repository.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#operatorhubio&#34;&gt;OperatorHub.io&lt;/a&gt;. This is a registry that lets vendors share Kubernetes operators.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&#34;alert admonition note&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Note&lt;/h4&gt;

Each installation option is mutually exclusive, with its own workflow that is incompatible with the other option. For example, you cannot install the VerticaDB operator with the Helm charts, and then deploy an operator in the same environment using OperatorHub.io.

&lt;/div&gt;
&lt;h2 id=&#34;helm-charts&#34;&gt;Helm charts&lt;/h2&gt;

&lt;div class=&#34;admonition important&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Important&lt;/h4&gt;
You must have cluster administrator privileges to install the operator Helm chart.
&lt;/div&gt;
&lt;p&gt;The database packages the VerticaDb operator and admission controller in a &lt;a href=&#34;https://helm.sh/&#34;&gt;Helm chart&lt;/a&gt;. The following sections detail different installation methods so that you can install the operator to meet your environment requirements. You can customize your operator during and after installation with &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/#&#34;&gt;Helm chart parameters&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For additional details about Helm, see the &lt;a href=&#34;https://helm.sh/docs/&#34;&gt;Helm documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Kubernetes 1.21.1 and higher&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://helm.sh/docs/intro/install/&#34;&gt;Helm 3.5.0&lt;/a&gt; and higher&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/&#34;&gt;&lt;code&gt;kubectl&lt;/code&gt; command-line tool&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;quickstart-installation&#34;&gt;Quickstart installation&lt;/h3&gt;
&lt;p&gt;The quickstart installation installs the VerticaDB Helm chart with minimal commands. This deployment installs the operator in the default configuration, which includes the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cluster-scoped webhook and controllers that monitor resources across all namespaces in the cluster. For namespace-scoped deployments, see &lt;a href=&#34;#namespace-scoped-installation&#34;&gt;Namespace-scoped installation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Self-signed certificates to communicate with the Kubernetes API server. If your environment requires custom certificates, see &lt;a href=&#34;#custom-certificate-installation&#34;&gt;Custom certificate installation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To quickly install the Helm chart, you must add the latest chart to your local repository and then install it in a namespace:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;add&lt;/code&gt; command downloads the chart to your local repository, and the &lt;code&gt;update&lt;/code&gt; command gets the latest charts from the remote repository. When you add the Helm chart to your local chart repository, provide a descriptive name for future reference.&lt;/p&gt;
&lt;p&gt;The following &lt;code&gt;add&lt;/code&gt; command names the charts &lt;code&gt;vertica-charts&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm repo add vertica-charts https://vertica.github.io/charts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;vertica-charts&amp;#34;&lt;/span&gt; has been added to your repositories
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Hang tight &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; we grab the latest from your chart repositories...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ...Successfully got an update from the &lt;span class=&#34;s2&#34;&gt;&amp;#34;vertica-charts&amp;#34;&lt;/span&gt; chart repository
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Update Complete. ⎈Happy Helming!⎈
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;Install the Helm chart to deploy the VerticaDB operator in your cluster. The following command names this chart instance &lt;code&gt;vdb-op&lt;/code&gt;, and creates a default namespace for the operator if it does not already exist:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install vdb-op --namespace verticadb-operator --create-namespace vertica-charts/verticadb-operator
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For &lt;code&gt;helm install&lt;/code&gt; options, see the &lt;a href=&#34;https://helm.sh/docs/helm/helm_install/#options&#34;&gt;Helm documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;helm-chart-installation-with-monitoring-tools&#34;&gt;Helm chart installation with monitoring tools&lt;/h3&gt;
&lt;p&gt;The operator supports integration with Prometheus, Grafana, and Loki. These components are disabled by default.&lt;/p&gt;
&lt;p&gt;You can enable each tool with the following Helm parameters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;grafana.enabled&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prometheus.enabled&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;loki.enabled&lt;/code&gt; and &lt;code&gt;alloy.enabled&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To install the operator with all monitoring tools enabled, run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install vdb-op --namespace verticadb-operator --create-namespace vertica-charts/verticadb-operator --set grafana.enabled&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;true,prometheus.enabled&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;true,loki.enabled&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;true,alloy.enabled&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;namespace-scoped-installation&#34;&gt;Namespace-scoped installation&lt;/h3&gt;
&lt;p&gt;By default, the VerticaDB operator is cluster-scoped. However, the database provides an option to install a namespace-scoped operator for environments that require more granular control over which resources an operator watches for state changes.&lt;/p&gt;
&lt;p&gt;The VerticaDB operator includes a webhook and controllers. The webhook is cluster-scoped and verifies state changes for resources across all namespaces in the cluster. The controllers—the control loops that reconcile the current and desired states for resources—do not have a cluster-scope requirement, so you can install them at the namespace level. The namespace-scoped operator installs the webhook once at the cluster level, and then installs the controllers in the specified namespace. You can install these namespaced controllers in multiple namespaces per cluster.&lt;/p&gt;

&lt;div class=&#34;admonition important&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Important&lt;/h4&gt;
Do not install a mix of cluster-scoped and namespace-scoped operators in the same cluster. For example, do not install an operator with &lt;a href=&#34;#quickstart-installation&#34;&gt;cluster-scoped controllers&lt;/a&gt;, and then install a namespace-scoped operator in the same cluster. This means that multiple operators serve the same CR, which results in unpredictable behavior.
&lt;/div&gt;
&lt;p&gt;To install a namespace-scoped operator, add the latest chart to your respository and issue separate commands to deploy the webhook and controllers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;add&lt;/code&gt; command downloads the chart to your local repository, and the &lt;code&gt;update&lt;/code&gt; command gets the latest charts from the remote repository. When you add the Helm chart to your local chart repository, provide a descriptive name for future reference.&lt;/p&gt;
&lt;p&gt;The following &lt;code&gt;add&lt;/code&gt; command names the charts &lt;code&gt;vertica-charts&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm repo add vertica-charts https://vertica.github.io/charts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;vertica-charts&amp;#34;&lt;/span&gt; has been added to your repositories
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Hang tight &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; we grab the latest from your chart repositories...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ...Successfully got an update from the &lt;span class=&#34;s2&#34;&gt;&amp;#34;vertica-charts&amp;#34;&lt;/span&gt; chart repository
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Update Complete. ⎈Happy Helming!⎈
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy the cluster-scoped webhook and install the required CRDs. To deploy the operator as a webhook without controllers, set &lt;code&gt;controllers.enable&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;. The following command deploys the webhook to the &lt;code&gt;vertica&lt;/code&gt; namespace, which is the namespace for a database cluster:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install webhook vertica-charts/verticadb-operator --namespace vertica --set controllers.enable&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy the namespace-scoped operator. To prevent a second webhook installation, set &lt;code&gt;webhook.enable&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;. To deploy only the controllers, set &lt;code&gt;controllers.scope&lt;/code&gt; to &lt;code&gt;namespace&lt;/code&gt;. The following command installs the operator in the &lt;code&gt;default&lt;/code&gt; namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install vdb-op vertica-charts/verticadb-operator --namespace default --set webhook.enable&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;false,controllers.scope&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;namespace
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For details about the &lt;code&gt;controllers.*&lt;/code&gt; parameter settings, see &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/#&#34;&gt;Helm chart parameters&lt;/a&gt;. For &lt;code&gt;helm install&lt;/code&gt; options, see the &lt;a href=&#34;https://helm.sh/docs/helm/helm_install/#options&#34;&gt;Helm documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;namespace-scoped-installation-with-monitoring&#34;&gt;Namespace-scoped installation with monitoring&lt;/h3&gt;
&lt;p&gt;When deploying operator instances at the namespace level, you typically do not want to install monitoring tools for each instance. For a &lt;a href=&#34;https://docs.vertica.com/25.3.x/en/containerized/db-operator/installing-db-operator/#namespace-scoped-installation&#34;&gt;namespace-scoped installation&lt;/a&gt;, you must first install the cluster-scoped webhook and the required CRDs. This process also installs the monitoring components.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;The &lt;code&gt;add&lt;/code&gt; command downloads the chart to your local repository, and the &lt;code&gt;update&lt;/code&gt; command gets the latest charts from the remote repository. When you add the Helm chart to your local chart repository, provide a descriptive name for future reference.&lt;/p&gt;
&lt;p&gt;The following &lt;code&gt;add&lt;/code&gt; command names the charts &lt;code&gt;vertica-charts&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm repo add vertica-charts https://vertica.github.io/charts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;vertica-charts&amp;#34;&lt;/span&gt; has been added to your repositories
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Hang tight &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; we grab the latest from your chart repositories...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ...Successfully got an update from the &lt;span class=&#34;s2&#34;&gt;&amp;#34;vertica-charts&amp;#34;&lt;/span&gt; chart repository
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Update Complete. ⎈Happy Helming!⎈
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy the cluster-scoped webhook, monitoring components, and the required CRDs. Use the following command to deploy the webhook and selected monitoring tools to the &lt;code&gt;vertica&lt;/code&gt; namespace. In this example, Prometheus and Grafana are enabled, but you can adjust the parameters to include only the tools you need.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install webhook vertica-charts/verticadb-operator --namespace vertica --set controllers.enable&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;false,prometheus.enabled&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;true,grafana.enabled&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy the namespace-scoped operator. Monitoring tools are disabled by default, so the following command installs the operator without Prometheus or Grafana. Run the following command to install the operator in the &lt;code&gt;default&lt;/code&gt; namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install vdb-op vertica-charts/verticadb-operator --namespace default --set webhook.enabled&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;false,controllers.scope&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;namespace,clusterScopeReleaseName&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;webhook
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where &lt;code&gt;clusterScopeReleaseName&lt;/code&gt; refers to the Helm release name of the cluster-scoped operator. This parameter is relevant only if Prometheus is enabled on that cluster-level instance.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;custom-certificate-installation&#34;&gt;Custom certificate installation&lt;/h3&gt;
&lt;p&gt;The admission controller uses a webhook that communicates with the Kubernetes API over HTTPS. By default, the Helm chart generates a self-signed certificate before installing the admission controller. A self-signed certificate might not be suitable for your environment—you might require custom certificates that are signed by a trusted third-party certificate authority (CA).&lt;/p&gt;
&lt;p&gt;To add custom certificates for the webhook:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set the TLS key&#39;s Subjective Alternative Name (SAN) to the admission controller&#39;s fully-qualified domain name (FQDN). Set the SAN in a configuration file using the following format:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[alt_names]
DNS.1 = verticadb-operator-webhook-service.&lt;span class=&#34;code-variable&#34;&gt;operator-namespace&lt;/span&gt;.svc
DNS.2 = verticadb-operator-webhook-service.&lt;span class=&#34;code-variable&#34;&gt;operator-namespace&lt;/span&gt;.svc.cluster.local
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/&#34;&gt;Secret&lt;/a&gt; that contains the certificates. A Secret conceals your certificates when you pass them as command-line parameters.&lt;/p&gt;
&lt;p&gt;The following command creates a Secret named &lt;code&gt;tls-secret&lt;/code&gt;. It stores the TLS key, TLS certificate, and CA certificate:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl create secret generic tls-secret --from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;tls.key&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;path&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;to&lt;/span&gt;/tls.key --from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;tls.crt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;path&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;to&lt;/span&gt;/tls.crt --from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ca.crt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;path&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;to&lt;/span&gt;/ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the Helm chart.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;add&lt;/code&gt; command downloads the chart to your local repository, and the &lt;code&gt;update&lt;/code&gt; command gets the latest charts from the remote repository. When you add the Helm chart to your local chart repository, provide a descriptive name for future reference.&lt;/p&gt;
&lt;p&gt;The following &lt;code&gt;add&lt;/code&gt; command names the charts &lt;code&gt;vertica-charts&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm repo add vertica-charts https://vertica.github.io/charts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;vertica-charts&amp;#34;&lt;/span&gt; has been added to your repositories
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Hang tight &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; we grab the latest from your chart repositories...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ...Successfully got an update from the &lt;span class=&#34;s2&#34;&gt;&amp;#34;vertica-charts&amp;#34;&lt;/span&gt; chart repository
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Update Complete. ⎈Happy Helming!⎈
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When you install the Helm chart with custom certificates for the admission controller, you have to use the &lt;code&gt;webhook.certSource&lt;/code&gt; and &lt;code&gt;webhook.tlsSecret&lt;/code&gt; &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/#&#34;&gt;Helm chart parameters&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;webhook.certSource&lt;/code&gt; indicates whether you want the admission controller to install user-provided certificates. To install with custom certificates, set this parameter to &lt;code&gt;secret&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;webhook.tlsSecret&lt;/code&gt; accepts a &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/&#34;&gt;Secret&lt;/a&gt; that contains your certificates.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following command deploys the operator with the TLS certificates and creates  &lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt; if it does not already exist:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install &lt;span class=&#34;code-variable&#34;&gt;operator-name&lt;/span&gt; --namespace &lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt; --create-namespace vertica-charts/verticadb-operator &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --set webhook.certSource&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;secret &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --set webhook.tlsSecret&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;tls-secret
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;granting-user-privileges&#34;&gt;Granting user privileges&lt;/h3&gt;
&lt;p&gt;After the operator is deployed, the cluster administrator is the only user with privileges to create and modify &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/verticadb/&#34;&gt;VerticaDB CRs&lt;/a&gt; within the cluster. To grant other users the privileges required to work with custom resources, you can leverage namespaces and &lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/rbac/&#34;&gt;Kubernetes RBAC&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To grant these privileges, the cluster administrator creates a namespace for the user, then grants that user edit ClusterRole within that namespace. Next, the cluster administrator creates a Role with specific CR privileges, and binds that role to the user with a RoleBinding. The cluster administrator can repeat this process for each user that must create or modify VerticaDB CRs within the cluster.&lt;/p&gt;
&lt;p&gt;To provide a user with privileges to create or modify a VerticaDB CR:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a namespace for the application developer:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl create namespace &lt;span class=&#34;code-variable&#34;&gt;user-namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;namespace/&lt;span class=&#34;code-variable&#34;&gt;user-namespace&lt;/span&gt; created
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grant the application developer &lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles&#34;&gt;edit role privileges&lt;/a&gt; in the namespace:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl create --namespace &lt;span class=&#34;code-variable&#34;&gt;user-namespace&lt;/span&gt; rolebinding edit-access --clusterrole&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;edit --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;code-variable&#34;&gt;username&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rolebinding.rbac.authorization.k8s.io/edit-access created
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create the Role with privileges to create and modify any CRs in the namespace. The database provides the &lt;code&gt;verticadb-operator-cr-user-role.yaml&lt;/code&gt; file that defines these rules:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl --namespace &lt;span class=&#34;code-variable&#34;&gt;user-namespace&lt;/span&gt; apply -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticadb-operator-cr-user-role.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;role.rbac.authorization.k8s.io/vertica-cr-user-role created
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Verify the changes with &lt;code&gt;kubectl get&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl get roles --namespace &lt;span class=&#34;code-variable&#34;&gt;user-namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAME                   CREATED AT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vertica-cr-user-role   2023-11-30T19:37:24Z
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a RoleBinding that associates this Role to the user. The following command creates a RoleBinding named &lt;code&gt;vdb-access&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl create --namespace &lt;span class=&#34;code-variable&#34;&gt;user-namespace&lt;/span&gt; rolebinding vdb-access --role&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;vertica-cr-user-role --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;code-variable&#34;&gt;username&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rolebinding.rbac.authorization.k8s.io/&lt;span class=&#34;code-variable&#34;&gt;rolebinding&lt;/span&gt; created
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Verify the changes with &lt;code&gt;kubectl get&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl get rolebinding --namespace &lt;span class=&#34;code-variable&#34;&gt;user-namespace&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAME          ROLE                        AGE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;edit-access   ClusterRole/edit            16m
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vdb-access    Role/vertica-cr-user-role   103s
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now, the user associated with &lt;span class=&#34;code-variable&#34;&gt;username&lt;/span&gt; has access to create and modify VerticaDB CRs in the isolated &lt;span class=&#34;code-variable&#34;&gt;user-namespace&lt;/span&gt;.&lt;/p&gt;
&lt;h2 id=&#34;kubectl-installation&#34;&gt;kubectl installation&lt;/h2&gt;
&lt;p&gt;You can install the VerticaDB operator from GitHub by applying the YAML manifests with the &lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/&#34;&gt;&lt;code&gt;kubectl&lt;/code&gt; command-line tool&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Install all &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/#&#34;&gt;Custom resource definitions&lt;/a&gt;. Because the size of the CRD is too large for client-side operations, you must use the &lt;code&gt;server-side=true&lt;/code&gt; and &lt;code&gt;--force-conflicts&lt;/code&gt; options to apply the manifests.&lt;/p&gt;
&lt;p&gt;To install the latest released version of the CRDs, run the following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl apply --server-side&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; --force-conflicts -f https://github.com/vertica/charts/releases/latest/download/crds.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To install a specific version of the CRDs, replace &lt;code&gt;version&lt;/code&gt; with the specific release (for example, v26.1.0-0 or v26.1.1-0):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl apply --server-side&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; --force-conflicts -f https://github.com/vertica/charts/releases/download/&amp;lt;version&amp;gt;/crds.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To install a specific version, refer to the available releases in the &lt;a href=&#34;https://github.com/vertica/charts/releases&#34;&gt;Vertica charts repository&lt;/a&gt;. For additional details about these commands, see &lt;a href=&#34;https://kubernetes.io/docs/reference/using-api/server-side-apply/&#34;&gt;Server-Side Apply documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Install the VerticaDB operator:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl apply -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/operator.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;operatorhubio&#34;&gt;OperatorHub.io&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://operatorhub.io/&#34;&gt;OperatorHub.io&lt;/a&gt; is a registry that allows vendors to share Kubernetes operators. Each vendor must adhere to packaging guidelines to simplify user adoption.&lt;/p&gt;
&lt;p&gt;To install the VerticaDB operator from OperatorHub.io, navigate to the &lt;a href=&#34;https://operatorhub.io/operator/verticadb-operator&#34;&gt;VerticaDB operator page&lt;/a&gt; and follow the install instructions.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Containerized: Upgrading the VerticaDB operator</title>
      <link>/en/containerized/db-operator/upgrading-db-operator/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/containerized/db-operator/upgrading-db-operator/</guid>
      <description>
        
        
        &lt;p&gt;OpenText™ Analytics Database supports two separate options to upgrade the VerticaDB operator:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;OperatorHub.io&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Helm Charts&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&#34;alert admonition note&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Note&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;You must upgrade the operator with the same option that you selected for installation. For example, you cannot install the VerticaDB operator with Helm charts, and then upgrade the operator in the same environment using OperatorHub.io.&lt;/li&gt;
&lt;li&gt;Use of customized Helm charts is not supported and may lead to unexpected behavior. You are responsible for managing and troubleshooting your custom deployments.&lt;/li&gt;
&lt;/ul&gt;


&lt;/div&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Complete &lt;a href=&#34;../../../en/containerized/db-operator/installing-db-operator/#&#34;&gt;Installing the VerticaDB operator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;operatorhubio&#34;&gt;OperatorHub.io&lt;/h2&gt;

&lt;div class=&#34;admonition important&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Important&lt;/h4&gt;
&lt;p&gt;VerticaDB operator versions 1.x are namespace-scoped, and versions 2.x are cluster-scoped. To upgrade from version 1.x to 2.x, you must uninstall the operator in each namespace before you upgrade.&lt;/p&gt;
&lt;p&gt;For detailed instructions about uninstalling your operator, see the &lt;a href=&#34;https://olm.operatorframework.io/docs/tasks/uninstall-operator/&#34;&gt;OLM documentation&lt;/a&gt;.&lt;/p&gt;

&lt;/div&gt;
&lt;p&gt;The Operator Lifecycle Manager (OLM) operator manages upgrades for OperatorHub.io installations. You can configure the OLM operator to upgrade the VerticaDB operator manually or automatically with the Subscription object&#39;s &lt;code&gt;spec.installPlanApproval&lt;/code&gt; parameter.&lt;/p&gt;
&lt;h3 id=&#34;automatic-upgrade&#34;&gt;Automatic upgrade&lt;/h3&gt;
&lt;p&gt;To configure automatic version upgrades, set &lt;code&gt;spec.installPlanApproval&lt;/code&gt; to &lt;code&gt;Automatic&lt;/code&gt;, or omit the setting entirely. When the OLM operator refreshes the catalog source, it installs the new VerticaDB operator automatically.&lt;/p&gt;
&lt;h3 id=&#34;manual-upgrade&#34;&gt;Manual upgrade&lt;/h3&gt;
&lt;p&gt;Upgrade the VerticaDB operator manually to approve version upgrades for specific install plans. To manually upgrade, set &lt;code&gt;spec.installPlanApproval&lt;/code&gt; parameter to &lt;code&gt;Manual&lt;/code&gt; and complete the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Verify if there is an install plan that requires approval to proceed with the upgrade:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl get installplan
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAME CSV APPROVAL APPROVED
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;install-ftcj9 verticadb-operator.v1.7.0 Manual &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;install-pw7ph verticadb-operator.v1.6.0 Manual &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The command output shows that the install plan &lt;code&gt;install-ftcj9&lt;/code&gt; for VerticaDB operator version 1.7.0 is not approved.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Approve the install plan with a patch command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl patch installplan install-ftcj9 --type&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;merge --patch&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;#34;spec&amp;#34;: {&amp;#34;approved&amp;#34;: true}}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;installplan.operators.coreos.com/install-ftcj9 patched
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After you set the approval, the OLM operator silently upgrades the VerticaDB operator.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optional. To monitor its progress, inspect the STATUS column of the Subscription object:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl describe subscription &lt;span class=&#34;code-variable&#34;&gt;subscription-object-name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;helm-charts&#34;&gt;Helm charts&lt;/h2&gt;

&lt;div class=&#34;admonition important&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Important&lt;/h4&gt;
&lt;p&gt;v1beta1 is no longer supported in VerticaDB operator version 25.3.0 and later.&lt;/p&gt;
&lt;p&gt;If you are upgrading to VerticaDB operator version 25.3.0 or later from a version prior to 25.3.0, you must apply the following patch before installing the latest version:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl patch crd verticadbs.vertica.com --type merge -p &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;#34;spec&amp;#34;:{&amp;#34;conversion&amp;#34;:null}}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After applying the patch, follow steps 1 and 2 to install the CRDs and upgrade the Helm chart.&lt;/p&gt;

&lt;/div&gt;
&lt;p&gt;You must have cluster administrator privileges to upgrade the VerticaDB operator with Helm charts.&lt;/p&gt;
&lt;p&gt;The Helm chart includes the CRD, but the &lt;code&gt;helm install&lt;/code&gt; command does not overwrite an existing CRD. To upgrade the operator, you must update the CRD with the manifest from the GitHub repository.&lt;/p&gt;
&lt;p&gt;Additionally, you must upgrade all &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/&#34;&gt;custom resource definitions&lt;/a&gt;, even if you do deploy them in your environment. These CRDs are installed with the operator and maintained as separate YAML manifests. Upgrading all CRDs ensure that your operator is upgraded completely.&lt;/p&gt;

&lt;div class=&#34;admonition important&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Important&lt;/h4&gt;
&lt;p&gt;VerticaDB operator versions 1.x are namespace-scoped, and versions 2.x are cluster-scoped. To upgrade from version 1.x to 2.x, you must uninstall the operator in each namespace before you upgrade.&lt;/p&gt;
&lt;p&gt;You can uninstall the VerticaDB operator with the &lt;a href=&#34;https://helm.sh/docs/helm/helm_uninstall/&#34;&gt;helm uninstall&lt;/a&gt; command:&lt;/p&gt;
&lt;pre class=&#34;table-pre&#34;&gt;&lt;p&gt;$ helm uninstall vdb-op --namespace &lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;&lt;/p&gt;
&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You can upgrade the CRDs and VerticaDB operator from GitHub by applying the YAML manifests with the &lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/&#34;&gt;&lt;code&gt;kubectl&lt;/code&gt; command-line tool&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install all &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/#&#34;&gt;Custom resource definitions&lt;/a&gt;. Because the size of the CRD is too large for client-side operations, you must use the &lt;code&gt;server-side=true&lt;/code&gt; and &lt;code&gt;--force-conflicts&lt;/code&gt; options to apply the manifests.&lt;/p&gt;
&lt;p&gt;To install the latest released version of the CRDs, run the following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl apply --server-side&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; --force-conflicts -f https://github.com/vertica/charts/releases/latest/download/crds.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To install a specific version of the CRDs, replace &lt;code&gt;version&lt;/code&gt; with the specific release (for example, v26.1.0-0 or v26.1.1-0):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl apply --server-side&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; --force-conflicts -f https://github.com/vertica/charts/releases/download/&amp;lt;version&amp;gt;/crds.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To install a specific version, refer to the available releases in the &lt;a href=&#34;https://github.com/vertica/charts/releases&#34;&gt;Vertica charts repository&lt;/a&gt;. For additional details about these commands, see &lt;a href=&#34;https://kubernetes.io/docs/reference/using-api/server-side-apply/&#34;&gt;Server-Side Apply documentation&lt;/a&gt;.&lt;/p&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Upgrade the Helm chart:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm upgrade &lt;span class=&#34;code-variable&#34;&gt;operator-name&lt;/span&gt; --wait vertica-charts/verticadb-operator
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;

      </description>
    </item>
    
    <item>
      <title>Containerized: Helm chart parameters</title>
      <link>/en/containerized/db-operator/helm-chart-parameters/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/containerized/db-operator/helm-chart-parameters/</guid>
      <description>
        
        
        &lt;p&gt;Helm chart parameters are organized into two groups, one set controls the VerticaDB operator and admission controller, while the other manages the monitoring components (Grafana, Prometheus, and Loki/Alloy).&lt;/p&gt;
&lt;h3 id=&#34;verticadb-operator-and-admission-controller-parameters&#34;&gt;VerticaDB operator and admission controller parameters&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;code&gt;affinity&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Applies rules that constrain the VerticaDB operator to specific nodes. It is more expressive than &lt;code&gt;nodeSelector&lt;/code&gt;. If this parameter is not set, then the operator uses no affinity setting.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;containerSecurityContext&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies the security settings for running the manager container.
&lt;p&gt;&lt;strong&gt;Defaults&lt;/strong&gt;:&lt;/p&gt;


&lt;pre class=&#34;table-pre&#34;&gt;
 allowPrivilegeEscalation: false 
 readOnlyRootFilesystem: true 
 capabilities:
   drop: 
   - ALL
  &lt;/pre&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;controllers.burstSize&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Defines the burst size for event recording in the operator. Increasing this value allows the controllers to record more events in a short period.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;100&lt;/code&gt;&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;controllers.enable&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Determines whether controllers are enabled when running the operator. Controllers watch and act on custom resources within the cluster.
&lt;p&gt;For namespace-scoped operators, set this to &lt;code&gt;false&lt;/code&gt;. This deploys the cluster-scoped operator only as a webhook, and then you can set &lt;code&gt;webhook.enable&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt; and deploy the controllers to an individual namespace. For details, see &lt;a href=&#34;../../../en/containerized/db-operator/installing-db-operator/#&#34;&gt;Installing the VerticaDB operator&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;true&lt;/code&gt;&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;controllers.sandboxMaxBackoffDuration&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies the maximum backoff duration (in milliseconds) for requeuing in the sandbox controller. Increase this value to reduce the requeue frequency when you have multiple sandboxes running.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;1000&lt;/code&gt;&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;controllers.scope&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Scope of the controllers in the VerticaDB operator. Controllers watch and act on custom resources within the cluster. This parameter accepts the following values:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cluster&lt;/code&gt;: The controllers watch for changes to all resources across all namespaces in the cluster.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;namespace&lt;/code&gt;: The controllers watch for changes to resources only in the namespace specified during deployment. You must deploy the operator as a webhook for the cluster, then deploy the operator controllers in a namespace. You can deploy multiple namespace-scoped operators within the same cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For details, see &lt;a href=&#34;../../../en/containerized/db-operator/installing-db-operator/#&#34;&gt;Installing the VerticaDB operator&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;cluster&lt;/code&gt;&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;controllers.vdbMaxBackoffDuration&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies the maximum backoff duration (in milliseconds) for requeuing in the VerticaDB controller. Increase this value to reduce the requeue frequency when multiple databases are running.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: &lt;code&gt;1000&lt;/code&gt;&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;image.name&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Name of the image that runs the operator.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; vertica/verticadb-operator:&lt;em&gt;&lt;code&gt;version&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;imagePullSecrets&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;List of Secrets that store credentials to authenticate to the private container repository specified by &lt;code&gt;image.repo&lt;/code&gt;. For details, see &lt;a href=&#34;https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod&#34;&gt;Specifying ImagePullSecrets&lt;/a&gt; in the Kubernetes documentation.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;image.repo&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Server that hosts the repository that contains &lt;code&gt;image.name&lt;/code&gt;. Use this parameter for deployments that require control over a private hosting server, such as an air-gapped operator.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; docker.io&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;keda.createRBACRules&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies if ClusterRole-based RBAC rules are created for accessing KEDA resources.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;logging.fileMode&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies the log file mode and permission bits in octal format (for example, &amp;quot;0644&amp;quot; or &amp;quot;0600&amp;quot;).
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; &amp;quot;0644&amp;quot;&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;logging.filePath&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&#34;admonition deprecated&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Deprecated&lt;/h4&gt;

This parameter is deprecated and will be removed in a future release.

&lt;/div&gt;
&lt;p&gt;Path to a log file in the VerticaDB operator filesystem. If this value is not specified, OpenText™ Analytics Database writes logs to standard output.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; Empty string (&#39; &#39;) that indicates standard output.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;logging.level&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Minimum logging level. This parameter accepts the following values:
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;debug&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;info&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;warn&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;error&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; info&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;logging.maxFileSize&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&#34;admonition deprecated&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Deprecated&lt;/h4&gt;

This parameter is deprecated and will be removed in a future release.

&lt;/div&gt;
&lt;p&gt;When &lt;code&gt;logging.filePath&lt;/code&gt; is set, the maximum size in MB of the logging file before log rotation occurs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; 500&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;logging.maxFileAge&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&#34;admonition deprecated&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Deprecated&lt;/h4&gt;

This parameter is deprecated and will be removed in a future release.

&lt;/div&gt;
&lt;p&gt;When &lt;code&gt;logging.filePath&lt;/code&gt; is set, the maximum age in days of the logging file before log rotation deletes the file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; 7&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;logging.maxFileRotation&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;div class=&#34;admonition deprecated&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Deprecated&lt;/h4&gt;

This parameter is deprecated and will be removed in a future release.

&lt;/div&gt;
&lt;p&gt;When &lt;code&gt;logging.filePath&lt;/code&gt; is set, the maximum number of files that are kept in rotation before the old ones are removed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; 3&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;nameOverride&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Sets the prefix for the name assigned to all objects that the Helm chart creates.
&lt;p&gt;If this parameter is not set, each object name begins with the name of the Helm chart, &lt;code&gt;verticadb-operator&lt;/code&gt;.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;nodeSelector&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Controls which nodes are used to schedule the operator pod. If this is not set, the node selector is omitted from the operator pod when it is created. To set this parameter, provide a list of key/value pairs.
&lt;p&gt;The following example schedules the operator only on nodes that have the &lt;code&gt;region=us-east&lt;/code&gt; label:&lt;/p&gt;


&lt;pre class=&#34;table-pre&#34;&gt;
nodeSelector:
      region: us-east
  &lt;/pre&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;priorityClassName&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&#34;https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass&#34;&gt;PriorityClass&lt;/a&gt; name assigned to the operator pod. This affects where the pod is scheduled.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheus.createProxyRBAC&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;When set to true, creates role-based access control (RBAC) rules that authorize access to the operator&#39;s &lt;code&gt;/metrics&lt;/code&gt; endpoint for the &lt;a href=&#34;../../../en/containerized/db-operator/prometheus-integration/&#34;&gt;Prometheus integration&lt;/a&gt;.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheus.expose&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Configures the operator&#39;s &lt;code&gt;/metrics&lt;/code&gt; endpoint for the &lt;a href=&#34;../../../en/containerized/db-operator/prometheus-integration/&#34;&gt;Prometheus integration&lt;/a&gt;. The following options are valid:
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;EnableWithAuth: Creates a new service object that exposes an HTTPS &lt;code&gt;/metrics&lt;/code&gt; endpoint. RBAC rules contol access to the metrics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;EnableWithoutAuth: Creates a new service object that exposes an HTTP &lt;code&gt;/metrics&lt;/code&gt; endpoint that does not authorize connections. Any client with network access can read the metrics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;EnableWithTLS: Creates a service object that exposes an HTTPS &lt;code&gt;/metrics&lt;/code&gt; endpoint. However, it does not perform authority validation when using the endpoint. Any Kubernetes pod with network access and the appropriate certificates can read the metrics. The endpoint requires &lt;code&gt;Prometheus.tlsSecret&lt;/code&gt; for TLS configuration. If &lt;code&gt;Prometheus.tlsSecret&lt;/code&gt; is not set, the behavior mirrors &lt;code&gt;EnableWithoutAuth&lt;/code&gt;, except that the endpoint operates over HTTPS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Disable: Prometheus metrics are not exposed.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: Disable&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheus.tlsSecret&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Secret that contains the TLS certificates for the &lt;a href=&#34;../../../en/containerized/db-operator/prometheus-integration/&#34;&gt;Prometheus&lt;/a&gt; &lt;code&gt;/metrics&lt;/code&gt; endpoint. You must create this Secret in the same namespace that you deployed the Helm chart.
&lt;p&gt;The Secret requires the following values:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;tls.key: TLS private key&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;tls.crt: TLS certificate for the private key&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ca.crt: Certificate authority (CA) certificate&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To ensure that the operator uses the certificates in this parameter, you must set &lt;code&gt;prometheus.expose&lt;/code&gt; to &lt;code&gt;EnableWithTLS&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;prometheus.expose&lt;/code&gt; is set to &lt;code&gt;EnableWithAuth&lt;/code&gt; and &lt;code&gt;prometheus.tlsSecret&lt;/code&gt; is set, your private key and certificate (if provided) are validated against the CA certificate (ca.crt) in &lt;code&gt;prometheus.tlsSecret&lt;/code&gt;. If no key and certificate are provided, certificate authentication does not occur.&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;prometheus.expose&lt;/code&gt; is set to &lt;code&gt;EnableWithTLS&lt;/code&gt; and &lt;code&gt;prometheus.tlsSecret&lt;/code&gt; is set, you must provide a valid private key and certificate.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;reconcileConcurrency.sandboxconfigmap&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Number of concurrent reconciliations for ConfigMaps that store the state for a sandbox.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 1&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;reconcileConcurrency.verticaautoscaler&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Number of concurrent reconciliation loops the operator runs for all &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/verticaautoscaler-custom-resource/&#34;&gt;VerticaAutoscaler&lt;/a&gt; CRs in the cluster.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;reconcileConcurrency.verticadb&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Number of concurrent reconciliation loops the operator runs for all &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/verticadb/&#34;&gt;VerticaDB&lt;/a&gt; CRs in the cluster.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;reconcileConcurrency.verticaeventtrigger&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Number of concurrent reconciliation loops the operator runs for all &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/event-trigger/&#34;&gt;EventTrigger&lt;/a&gt; CRs in the cluster.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;reconcileConcurrency.verticareplicator&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Number of concurrent reconciliations for VerticaReplicator custom resources.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 3&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;reconcileConcurrency.verticarestorepointsquery&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Number of concurrent reconciliations for VerticaRestorePointsQuery custom resources.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 1&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;reconcileConcurrency.verticascrutinize&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Number of concurrent reconciliations for VerticaScrutinize custom resources.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 1&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;resources.limits&lt;/code&gt; and &lt;code&gt;resources.requests&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;The resource requirements for the operator pod.
&lt;p&gt;&lt;code&gt;resources.limits&lt;/code&gt; is the maximum amount of CPU and memory that an operator pod can consume from its host node.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;resources.requests&lt;/code&gt; is the maximum amount of CPU and memory that an operator pod can request from its host node.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Defaults&lt;/strong&gt;:&lt;/p&gt;


&lt;pre class=&#34;table-pre&#34;&gt;
resources:
  limits:
    cpu: 100m
    memory: 750Mi
  requests:
    cpu: 100m
    memory: 20Mi
  &lt;/pre&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;securityContext&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies pod-level security attributes and common container settings.
&lt;p&gt;&lt;strong&gt;Defaults&lt;/strong&gt;:&lt;/p&gt;


&lt;pre class=&#34;table-pre&#34;&gt;
 fsGroup: 65532 
 runAsGroup: 65532
 runAsNonRoot: true 
 runAsUser: 65532 
 seccompProfile:
   type: RuntimeDefault
  &lt;/pre&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;serviceAccountAnnotations&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Map of annotations that is added to the service account created for the operator.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;serviceAccountNameOverride&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Controls the name of the service account created for the operator.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;tolerations&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Any &lt;a href=&#34;https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/&#34;&gt;taints and tolerations&lt;/a&gt; that influence where the operator pod is scheduled.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;webhook.certSource&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;How TLS certificates are provided for the admission controller webhook. This parameter accepts the following values:
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;internal: The VerticaDB operator internally generates a self-signed, 10-year expiry certificate before starting the managing controller. When the certificate expires, you must manually restart the operator pod to create a new certificate.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;secret: You generate the custom certificates before you create the Helm chart and store them in a &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/&#34;&gt;Secret&lt;/a&gt;. This option requires that you set &lt;code&gt;webhook.tlsSecret&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;webhook.tlsSecret&lt;/code&gt; is set, then this option is implicitly selected.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: internal&lt;/p&gt;
&lt;p&gt;For details, see &lt;a href=&#34;../../../en/containerized/db-operator/installing-db-operator/#&#34;&gt;Installing the VerticaDB operator&lt;/a&gt;.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;webhook.enable&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Determines whether the Helm chart installs the admission controller webhooks for the &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/&#34;&gt;custom resource definitions&lt;/a&gt;. The webhook is cluster-scoped, and you can install only one webhook per cluster.
&lt;p&gt;If your environment uses namespace-scoped operators, you must install the webhook for the cluster, then disable the webhook for each namespace installation. For details, see &lt;a href=&#34;../../../en/containerized/db-operator/installing-db-operator/#&#34;&gt;Installing the VerticaDB operator&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&#34;admonition caution&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Caution&lt;/h4&gt;

Webhooks prevent invalid state changes to the custom resource. Running Vertica on Kubernetes without webhook validations might result in invalid state transitions.

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;webhook.tlsSecret&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Secret that contains a PEM-encoded certificate authority (CA) bundle and its keys.
&lt;p&gt;The CA bundle validates the webhook&#39;s server certificate. If this is not set, the webhook uses the system trust roots on the apiserver.&lt;/p&gt;
&lt;p&gt;This Secret includes the following keys for the CA bundle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;tls.key&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ca.crt&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;tls.crt&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id=&#34;monitoring-parameters&#34;&gt;Monitoring parameters&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;code&gt;alloy.enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Deploys Alloy as part of the chart.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: false&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;alloy.configMap.create&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Determines whether to create a new ConfigMap for the configuration file.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;alloy.configMap.key&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Key in the ConfigMap to use when referencing an existing configuration.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;alloy.configMap.name&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Name of the existing ConfigMap to use when &lt;code&gt;alloy.configMap.create&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;alloy.rbac.create&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Determines whether to create RBAC resources for Alloy.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;alloy.replicaCount&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies the number of replicas for the Alloy deployment.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 3&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;alloy.serviceAccount.create&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Determines whether to create a service account for Alloy.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;alloy.serviceAccount.name&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies the name of the existing service account to use when &lt;code&gt;alloy.serviceAccount.create&lt;/code&gt; is set to &lt;code&gt;false&lt;/code&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.admin.existingSecret&lt;/code&gt;:&lt;/dt&gt;
&lt;dd&gt;Name of the existing secret. Supports templating.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: &amp;quot;&amp;quot;&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.admin.passwordKey&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;The key within the secret that contains the password.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: admin-password&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.admin.userKey&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;The key within the secret that contains the username.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: admin-user&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.adminPassword&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Password for the Grafana administrator account.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: admin&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.adminUser&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Username for the Grafana administrator account.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: admin&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Deploys Grafana as part of the chart.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: false&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.grafana.ini&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Grafana&#39;s primary &lt;a href=&#34;http://docs.grafana.org/installation/configuration/&#34;&gt;configuration&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.namespaceOverride&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Overrides the namespace in which Grafana is deployed.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: &amp;quot;&amp;quot;&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.persistence&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Controls &lt;a href=&#34;https://kubernetes.io/docs/concepts/storage/persistent-volumes/&#34;&gt;persistent storage&lt;/a&gt; for Grafana.


&lt;pre class=&#34;table-pre&#34;&gt;
persistence:
    type: pvc
    enabled: false
    ## (Optional) Use this to bind the claim to an existing PersistentVolume (PV) by name.
    volumeName: &#34;&#34;
    accessModes:
      - ReadWriteOnce
    size: 10Gi
    finalizers:
      - kubernetes.io/pvc-protection
  &lt;/pre&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.replicas&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Number of grafana pods.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 1&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;grafana.service&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Exposes the grafana service either externally via LoadBalancer or internally via ClusterIP. You can set the service type and port for access.


&lt;pre class=&#34;table-pre&#34;&gt;
service:
  enabled: true
  type: ClusterIP
  ipFamilyPolicy: &#34;&#34;
  ipFamilies: []
  loadBalancerIP: &#34;&#34;
  loadBalancerClass: &#34;&#34;
  port: 80
  targetPort: 3000
  annotations: {}
  labels: {}
  portName: http-web
  appProtocol: &#34;&#34;
  sessionAffinity: &#34;&#34;
  &lt;/pre&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;loki.enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Deploys Loki as part of the chart.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; false&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;loki.lokiCanary.enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Enables the Loki canary which pushes logs to and queries from this Loki instance to test that it is working correctly.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;loki.minio.enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Indicates whether MinIO is used as the object storage backend.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;loki.loki.commonConfig.replication_factor&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Stores multiple copies of logs in the ingester component.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; 3&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;loki.loki.compactor.retention_enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Enables log retention.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; false&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;loki.loki.limits_config.retention_period&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Sets the global retention period.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; 720h&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;loki.loki.schemaConfig.configs.object_store&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies the type of object storage used for schema configuration.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; s3&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;loki.loki.storage.type&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Storage for Loki chunks.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; s3&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;loki.test.enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Enables testing of the Loki data source to check that it is working.
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.defaultRules.create&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Creates default recording and alerting rules.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: false&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Deploys Prometheus server as part of the chart.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: false&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheusOperator.admissionWebhooks.enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Enable admission webhooks for Prometheus Operator.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: false&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheusOperator.enabled&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Enables the Prometheus Operator which is required for Prometheus deployment.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.prometheusSpec.replicas&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Number of Prometheus replicas.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 1&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.prometheusSpec.retention&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Duration for which Prometheus retains data.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 7 days&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.prometheusSpec.retentionSize&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Maximum storage size before Prometheus begins deleting older data.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 2GB&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Size of the persistent volume for Prometheus storage.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: 5Gi&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.service&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Configuration for &lt;a href=&#34;https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack&#34;&gt;Prometheus service&lt;/a&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.serviceAccount.annotations&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Annotations to add to the serviceAccount.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: {}&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.serviceAccount.automountServiceAccountToken&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies whether the serviceAccount’s token is automatically mounted into the pod.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: true&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.serviceAccount.create&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Specifies whether a serviceAccount with the required permissions should be created.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: false&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.serviceAccount.name&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Name of the serviceAccount. Defaults to &lt;code&gt;prometheus-vertica-sa&lt;/code&gt; if create is &lt;code&gt;false&lt;/code&gt; (this is the static name generated by the operator from a template).&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;prometheusServer.prometheus.web&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;a href=&#34;https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api-reference/api.md#webtlsconfig&#34;&gt;WebTLSConfig&lt;/a&gt; defines the TLS parameters for HTTPS.
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: {}&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;

      </description>
    </item>
    
    <item>
      <title>Containerized: Red Hat OpenShift integration</title>
      <link>/en/containerized/db-operator/red-hat-openshift-integration/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/containerized/db-operator/red-hat-openshift-integration/</guid>
      <description>
        
        
        &lt;p&gt;Red Hat OpenShift is a hybrid cloud platform that provides enhanced security features and greater control over the Kubernetes cluster. In addition, OpenShift provides the OperatorHub, a catalog of operators that meet OpenShift requirements.&lt;/p&gt;
&lt;p&gt;For comprehensive instructions about the OpenShift platform, refer to the &lt;a href=&#34;https://docs.openshift.com/container-platform/4.8/welcome/index.html&#34;&gt;Red Hat OpenShift documentation&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&#34;alert admonition note&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Note&lt;/h4&gt;

If your Kubernetes cluster is in the cloud or on a managed service, each Vertica node must operate in the same availability zone.

&lt;/div&gt;

&lt;h2 id=&#34;enhanced-security-with-security-context-constraints&#34;&gt;Enhanced security with security context constraints&lt;/h2&gt;
&lt;p&gt;To enforce security measures, OpenShift requires that each deployment use a &lt;a href=&#34;https://docs.openshift.com/container-platform/4.8/authentication/managing-security-context-constraints.html&#34;&gt;security context constraint&lt;/a&gt; (SCC). OpenText™ Analytics Database on Kubernetes supports the &lt;code&gt;restricted-v2&lt;/code&gt; SCC, the most restrictive &lt;a href=&#34;https://docs.openshift.com/container-platform/4.9/authentication/managing-security-context-constraints.html#default-sccs_configuring-internal-oauth&#34;&gt;default SCC&lt;/a&gt; available.&lt;/p&gt;
&lt;p&gt;The SCC lets administrators control the privileges of the pods in a cluster without manual configuration. For example, you can restrict namespace access for specific users in a multi-user environment.&lt;/p&gt;
&lt;h2 id=&#34;installing-the-operator&#34;&gt;Installing the operator&lt;/h2&gt;
&lt;p&gt;The VerticaDB operator is a community operator that is maintained by OpenText. Each operator available in the OperatorHub must adhere to requirements defined by the &lt;a href=&#34;https://docs.openshift.com/container-platform/4.8/operators/understanding/olm/olm-understanding-olm.html&#34;&gt;Operator Lifecycle Manager&lt;/a&gt; (OLM). To meet these requirements, vendors must provide a &lt;a href=&#34;https://docs.openshift.com/container-platform/4.8/operators/operator_sdk/osdk-generating-csvs.html&#34;&gt;cluster service version&lt;/a&gt; (CSV) manifest for each operator. The database provides a CSV for each version of the VerticaDB operator available in the OpenShift OperatorHub.&lt;/p&gt;
&lt;p&gt;The VerticaDB operator supports OpenShift versions 4.8 and higher.&lt;/p&gt;
&lt;p&gt;You must have cluster-admin privileges on your OpenShift account to install the VerticaDB operator. For detailed installation instructions, refer to the &lt;a href=&#34;https://docs.openshift.com/container-platform/4.8/operators/admin/olm-adding-operators-to-cluster.html&#34;&gt;OpenShift documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;deploying-opentexttrade-analytics-database-on-openshift&#34;&gt;Deploying OpenText™ Analytics Database on OpenShift&lt;/h2&gt;
&lt;p&gt;After you installed the VerticaDB operator and added a supported SCC to your database workloads service account, you can deploy the database on OpenShift.&lt;/p&gt;
&lt;p&gt;For details about installing OpenShift in supported environments, see the &lt;a href=&#34;https://docs.openshift.com/container-platform/4.8/installing/index.html&#34;&gt;OpenShift Container Platform installation overview&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before you deploy the database on OpenShift, create the required Secrets to store sensitive information. For details about Secrets and OpenShift, see the &lt;a href=&#34;https://docs.openshift.com/container-platform/4.8/nodes/pods/nodes-pods-secrets.html&#34;&gt;OpenShift documentation&lt;/a&gt;. For guidance on deploying an OpenText™ Analytics Database custom resource, see &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/verticadb/#&#34;&gt;VerticaDB custom resource definition&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Containerized: Prometheus integration</title>
      <link>/en/containerized/db-operator/prometheus-integration/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/containerized/db-operator/prometheus-integration/</guid>
      <description>
        
        
        &lt;p&gt;OpenText™ Analytics Database on Kubernetes integrates with &lt;a href=&#34;https://prometheus.io/&#34;&gt;Prometheus&lt;/a&gt; to scrape time series metrics about the VerticaDB operator and database server process. These metrics create a detailed model of your application over time to provide valuable performance and troubleshooting insights as well as facilitate internal and external communications and service discovery in microservice and containerized architectures.&lt;/p&gt;
&lt;p&gt;Prometheus requires that you set up targets—metrics that you want to monitor. Each target is exposed on an endpoint, and Prometheus periodically scrapes that endpoint to collect target data. The database exports metrics and provides access methods for both the VerticaDB operator and server process.&lt;/p&gt;
&lt;h2 id=&#34;server-metrics&#34;&gt;Server metrics&lt;/h2&gt;
&lt;p&gt;The database exports server metrics on port 8443 at the following endpoint:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://&lt;span class=&#34;code-variable&#34;&gt;host-address&lt;/span&gt;:8443/&lt;span class=&#34;code-variable&#34;&gt;api-version&lt;/span&gt;/metrics
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Only the &lt;a href=&#34;../../../en/admin/db-users-and-privileges/db-users/types-of-db-users/db-admin-user/&#34;&gt;superuser&lt;/a&gt; can authenticate to the HTTPS service, and the service accepts only &lt;a class=&#34;glosslink&#34; href=&#34;../../../en/glossary/mutual-mode/&#34; title=&#34;When a database is configured for TLS/SSL security in mutual mode, incoming client requests verify the certificate of the server, and the server also requires that each client present a certificate and private key so that the server can verify the client.&#34;&gt;mutual TLS (mTLS)&lt;/a&gt; authentication. The setup for both OpenText™ Analytics Database on Kubernetes and non-containerized OpenText™ Analytics Database environments is identical. For details, see &lt;a href=&#34;../../../en/admin/managing-db/https-service/#&#34;&gt;HTTPS service&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;OpenText™ Analytics Database on Kubernetes lets you set a custom port for its HTTP service with the &lt;code&gt;subclusters[i].verticaHTTPNodePort&lt;/code&gt; &lt;a href=&#34;../../../en/containerized/custom-resource-definition-parameters/&#34;&gt;custom resource parameter&lt;/a&gt;. This parameter sets a custom port for the HTTPS service for &lt;code&gt;NodePort&lt;/code&gt; serviceTypes.&lt;/p&gt;
&lt;p&gt;For request and response examples, see the &lt;code&gt;/metrics&lt;/code&gt; &lt;a href=&#34;../../../en/admin/managing-db/https-service/#v1metrics-get&#34;&gt;endpoint description&lt;/a&gt;. For a list of available metrics, see &lt;a href=&#34;../../../en/admin/managing-db/https-service/prometheus-metrics/#&#34;&gt;Prometheus metrics&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;grafana-dashboards&#34;&gt;Grafana dashboards&lt;/h3&gt;
&lt;p&gt;You can visualize database server time series metrics with Grafana dashboards. The database dashboards that use a Prometheus data source are available at &lt;a href=&#34;https://grafana.com/grafana/dashboards/&#34;&gt;Grafana Dashboards&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://grafana.com/grafana/dashboards/19917-vertica-overview-prometheus/&#34;&gt;Vertica Overview (Prometheus)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://grafana.com/grafana/dashboards/19915-vertica-queries-prometheus/&#34;&gt;Vertica Queries (Prometheus)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://grafana.com/grafana/dashboards/19916-vertica-resource-management-prometheus/&#34;&gt;Vertica Resource Management (Prometheus)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://grafana.com/grafana/dashboards/19914-vertica-depot-prometheus/&#34;&gt;Vertica Depot (Prometheus)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can also download the source for each dashboard from the &lt;a href=&#34;https://github.com/vertica/grafana-dashboards&#34;&gt;vertica/grafana-dashboards repository&lt;/a&gt;.&lt;/p&gt;
&lt;/p&gt;
&lt;h2 id=&#34;operator-metrics&#34;&gt;Operator metrics&lt;/h2&gt;
&lt;p&gt;The VerticaDB operator supports the &lt;a href=&#34;https://sdk.operatorframework.io/&#34;&gt;Operator SDK framework&lt;/a&gt;, which requires that an authorization impose role-based-access control (RBAC) to access operator metrics over HTTPS. To increase flexibility, the database provides the following options to access the Prometheus &lt;code&gt;/metrics&lt;/code&gt; endpoint:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;HTTPS access: Meet operator SDK requirements and use the operator to authorize connections.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;HTTP access: Expose the &lt;code&gt;/metrics&lt;/code&gt; endpoint to external connections without RBAC. Any client with network access can read from &lt;code&gt;/metrics&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Disable Prometheus entirely.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;THe database provides &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;Helm chart parameters&lt;/a&gt; and YAML manifests to configure each option.

&lt;div class=&#34;alert admonition note&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Note&lt;/h4&gt;

If you installed the VerticaDB operator with &lt;a href=&#34;https://operatorhub.io/&#34;&gt;OperatorHub.io&lt;/a&gt;, you can use the Prometheus integration with the default Helm chart settings. OperatorHub.io installations cannot configure any Helm chart parameters.

&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Complete &lt;a href=&#34;../../../en/containerized/db-operator/installing-db-operator/#&#34;&gt;Installing the VerticaDB operator&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the &lt;a href=&#34;https://kubernetes.io/docs/tasks/tools/&#34;&gt;kubectl&lt;/a&gt; command line tool.&lt;br /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;https-with-rbac&#34;&gt;HTTPS with RBAC&lt;/h3&gt;
&lt;p&gt;The operator SDK framework requires that operators use an authorization for metrics access. Because the operator sends metrics to localhost only, the database meets these requirements with localhost access that enforces RBAC.&lt;/p&gt;
&lt;p&gt;RBAC rules are cluster-scoped, and the operator authorizes connections from clients associated with a service account that has the correct ClusterRole and ClusterRoleBindings. The database provides the following example manifests:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticadb-operator-proxy-role-cr.yaml&#34;&gt;verticadb-operator-auth-role-cr&lt;/a&gt;: ClusterRole that has TokenReviews and SubjectAccessReviews access so that the operator can verify privileges on connections.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticadb-operator-proxy-rolebinding-crb.yaml&#34;&gt;verticadb-operator-auth-rolebinding-crb&lt;/a&gt;: ClusterRoleBinding that associates the ClusterRole that verifies operator privileges to a service account.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticadb-operator-metrics-reader-cr.yaml&#34;&gt;verticadb-operator-metrics-reader-cr&lt;/a&gt;: ClusterRole that allows HTTP GET requests on the &lt;code&gt;/metrics&lt;/code&gt; endpoint for non-Kubernetes resources.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticadb-operator-metrics-reader-crb.yaml&#34;&gt;verticadb-operator-metrics-reader-crb&lt;/a&gt;: ClusterRoleBinding that associates the metrics reader ClusterRole with a service account.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For additional details about ClusterRoles and ClusterRoleBindings, see the &lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/rbac/&#34;&gt;Kubernetes documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;create-rbac-rules&#34;&gt;Create RBAC rules&lt;/h4&gt;

&lt;div class=&#34;alert admonition note&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Note&lt;/h4&gt;

This section details how to create RBAC rules for environments that require that you set up ClusterRole and ClusterRoleBinding objects outside of the Helm chart installation.

&lt;/div&gt;
&lt;p&gt;The following steps create the ClusterRole and ClusterRoleBindings objects that grant access to the &lt;code&gt;/metrics&lt;/code&gt; endpoint to a non-Kubernetes resource such as Prometheus. Because RBAC rules are cluster-scoped, you must create or add to an existing ClusterRoleBinding:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a ClusterRoleBinding that binds the role for the operator with a service account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a ClusterRoleBinding:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl create clusterrolebinding verticadb-operator-auth-rolebinding &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --clusterrole&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;verticadb-operator-auth-role &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --serviceaccount&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;:&lt;span class=&#34;code-variable&#34;&gt;serviceaccount&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a service account to an existing ClusterRoleBinding:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl patch clusterrolebinding verticadb-operator-auth-rolebinding &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --type&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    -p&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;[{&amp;#34;op&amp;#34;: &amp;#34;add&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/subjects/-&amp;#34;, &amp;#34;value&amp;#34;: {&amp;#34;kind&amp;#34;: &amp;#34;ServiceAccount&amp;#34;, &amp;#34;name&amp;#34;: &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;serviceaccount&lt;/span&gt;&amp;#34;,&amp;#34;namespace&amp;#34;: &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;&amp;#34; } }]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a ClusterRoleBinding that binds the role for the non-Kubernetes object to the operator with a service account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a ClusterRoleBinding:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl create clusterrolebinding verticadb-operator-metrics-reader &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --clusterrole&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;verticadb-operator-metrics-reader &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --serviceaccount&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;:&lt;span class=&#34;code-variable&#34;&gt;serviceaccount&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --group&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;system:authenticated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bind the service account to an existing ClusterRoleBinding:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl patch clusterrolebinding verticadb-operator-metrics-reader &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --type&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    -p&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;[{&amp;#34;op&amp;#34;: &amp;#34;add&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/subjects/-&amp;#34;, &amp;#34;value&amp;#34;: {&amp;#34;kind&amp;#34;: &amp;#34;ServiceAccount&amp;#34;, &amp;#34;name&amp;#34;: &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;serviceaccount&lt;/span&gt;&amp;#34;,&amp;#34;namespace&amp;#34;: &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;&amp;#34;},{&amp;#34;op&amp;#34;:&amp;#34;add&amp;#34;,&amp;#34;path&amp;#34;:&amp;#34;/subjects/-&amp;#34;,&amp;#34;value&amp;#34;:{&amp;#34;kind&amp;#34;: &amp;#34;Group&amp;#34;, &amp;#34;name&amp;#34;: &amp;#34;system:authenticated&amp;#34;} }]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl patch clusterrolebinding verticadb-operator-metrics-reader &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --type&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    -p&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;[{&amp;#34;op&amp;#34;: &amp;#34;add&amp;#34;, &amp;#34;path&amp;#34;: &amp;#34;/subjects/-&amp;#34;, &amp;#34;value&amp;#34;: {&amp;#34;kind&amp;#34;: &amp;#34;ServiceAccount&amp;#34;, &amp;#34;name&amp;#34;: &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;serviceaccount&lt;/span&gt;&amp;#34;,&amp;#34;namespace&amp;#34;: &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;&amp;#34; } }]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When you &lt;a href=&#34;../../../en/containerized/db-operator/installing-db-operator/&#34;&gt;install the Helm chart&lt;/a&gt;, the ClusterRole and ClusterRoleBindings are created automatically. If the &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;prometheus.expose&lt;/a&gt; parameter is set to EnableWithAuth, it creates the service object and exposes the operator&#39;s &lt;code&gt;/metrics&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;h4 id=&#34;service-object&#34;&gt;Service object&lt;/h4&gt;
&lt;p&gt;The database provides a service object &lt;code&gt;verticadb-operator-metrics-service&lt;/code&gt; to access the Prometheus &lt;code&gt;/metrics&lt;/code&gt; endpoint. The VerticaDB operator does not manage this service object. By default, the service object uses the ClusterIP service type to support RBAC.&lt;/p&gt;
&lt;p&gt;Connect to the &lt;code&gt;/metrics&lt;/code&gt; endpoint at port 8443 with the following path:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;https://verticadb-operator-metrics-service.&lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;.svc.cluster.local:8443/metrics
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;bearer-token-authentication&#34;&gt;Bearer token authentication&lt;/h4&gt;
&lt;p&gt;Kubernetes authenticates requests to the API server with service account credentials. Each pod is associated with a service account and has the following credentials stored in the filesystem of each container in the pod:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Token at &lt;code&gt;/var/run/secrets/kubernetes.io/serviceaccount/token&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Certificate authority (CA) bundle at &lt;code&gt;/var/run/secrets/kubernetes.io/serviceaccount/ca.crt&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use these credentials to authenticate to the &lt;code&gt;/metrics&lt;/code&gt; endpoint through the service object. You must use the credentials for the service account that you used to create the ClusterRoleBindings.&lt;/p&gt;
&lt;p&gt;For example, the following cURL request accesses the &lt;code&gt;/metrics&lt;/code&gt; endpoint. Include the &lt;code&gt;--insecure&lt;/code&gt; option only if you do not want to verify the serving certificate:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ curl --insecure --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;Authorization: Bearer &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;cat /var/run/secrets/kubernetes.io/serviceaccount/token&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; https://verticadb-operator-metrics-service.vertica:8443/metrics
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For additional details about service account credentials, see the &lt;a href=&#34;https://kubernetes.io/docs/tasks/run-application/access-api-from-pod/#directly-accessing-the-rest-api&#34;&gt;Kubernetes documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;tls-client-certificate-authentication&#34;&gt;TLS client certificate authentication&lt;/h4&gt;
&lt;p&gt;Some environments might prevent you from authenticating to the &lt;code&gt;/metrics&lt;/code&gt; endpoint with the service account token. For example, you might run Prometheus outside of Kubernetes. To allow external client connections to the &lt;code&gt;/metrics&lt;/code&gt; endpoint, you have to supply the operator with TLS certificates.&lt;/p&gt;
&lt;p&gt;You must create a Secret that contains the certificates, and then use the &lt;code&gt;prometheus.tlsSecret&lt;/code&gt; &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;Helm chart parameter&lt;/a&gt; to pass the Secret to the operator when you install the Helm chart. The following steps create the Secret and install the Helm chart:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a Secret that contains the certificates:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl create secret generic metrics-tls --from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;tls.key&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;path&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;to&lt;/span&gt;/tls.key --from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;tls.crt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;path&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;to&lt;/span&gt;/tls.crt --from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ca.crt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;path&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;to&lt;/span&gt;/ca.crt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the Helm chart with &lt;code&gt;prometheus.tlsSecret&lt;/code&gt; set to the Secret that you just created:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install &lt;span class=&#34;code-variable&#34;&gt;operator-name&lt;/span&gt; --namespace &lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt; --create-namespace vertica-charts/verticadb-operator &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --set prometheus.tlsSecret&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;metrics-tls –-set prometheus.expose&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;EnableWithTLS
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;prometheus.tlsSecret&lt;/code&gt; parameter forces the operator to use the TLS certificates stored in the Secret. Otherwise, the operator generates its own self-signed certificate.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After you install the Helm chart, you can authenticate to the &lt;code&gt;/metrics&lt;/code&gt; endpoint with the certificates in the Secret. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ curl --key tls.key --cert tls.crt --cacert ca.crt https://verticadb-operator-metrics-service.vertica.svc:8443/metrics
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;http-access&#34;&gt;HTTP access&lt;/h3&gt;
&lt;p&gt;You might have an environment that does not require privileged access to Prometheus metrics. For example, you might run Prometheus outside of Kubernetes.&lt;/p&gt;
&lt;p&gt;To allow external access to the &lt;code&gt;/metrics&lt;/code&gt; endpoint with HTTP, set &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;prometheus.expose&lt;/a&gt; to EnableWithoutAuth. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install &lt;span class=&#34;code-variable&#34;&gt;operator-name&lt;/span&gt; --namespace &lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt; --create-namespace vertica-charts/verticadb-operator &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --set prometheus.expose&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;EnableWithoutAuth
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;service-object-1&#34;&gt;Service object&lt;/h4&gt;
&lt;p&gt;The database provides a service object &lt;code&gt;verticadb-operator-metrics-service&lt;/code&gt; to access the Prometheus &lt;code&gt;/metrics&lt;/code&gt; endpoint. The VerticaDB operator does not manage this service object. By default, the service object uses the ClusterIP service type, so you must change the &lt;a href=&#34;../../../en/containerized/custom-resource-definition-parameters/&#34;&gt;serviceType&lt;/a&gt; for external client access. The service object&#39;s fully-qualified domain name (FQDN) is as follows:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;verticadb-operator-metrics-service.&lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;.svc.cluster.local
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Connect to the &lt;code&gt;/metrics&lt;/code&gt; endpoint at port 8443 with the following path:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://verticadb-operator-metrics-service.&lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;.svc.cluster.local:8443/metrics
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;prometheus-operator-integration-optional&#34;&gt;Prometheus operator integration (optional)&lt;/h3&gt;
&lt;p&gt;OpenText™ Analytics Database on Kubernetes integrates with the &lt;a href=&#34;https://github.com/prometheus-operator/prometheus-operator&#34;&gt;Prometheus operator&lt;/a&gt;, which provides custom resources (CRs) that simplify targeting metrics. The database supports the ServiceMonitor CR that discovers the VerticaDB operator automatically, and authenticates requests with a &lt;a href=&#34;#bearer-token-authentication&#34;&gt;bearer token&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The ServiceMonitor CR is &lt;a href=&#34;https://github.com/vertica/vertica-kubernetes/releases/download/v1.6.0/verticadb-operator-metrics-monitor-servicemonitor.yaml&#34;&gt;available as a release artifact&lt;/a&gt; in our &lt;a href=&#34;https://github.com/vertica/vertica-kubernetes&#34;&gt;GitHub repository&lt;/a&gt;. See &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/#&#34;&gt;Helm chart parameters&lt;/a&gt; for details about the &lt;code&gt;prometheus.createServiceMonitor&lt;/code&gt; parameter.&lt;/p&gt;
&lt;h3 id=&#34;disabling-prometheus&#34;&gt;Disabling Prometheus&lt;/h3&gt;
&lt;p&gt;To disable Prometheus, set the prometheus.expose Helm chart parameter to &lt;code&gt;Disable&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ helm install &lt;span class=&#34;code-variable&#34;&gt;operator-name&lt;/span&gt; --namespace &lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt; --create-namespace vertica-charts/verticadb-operator &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --set prometheus.expose&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Disable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For details about Helm install commands, see &lt;a href=&#34;../../../en/containerized/db-operator/installing-db-operator/#&#34;&gt;Installing the VerticaDB operator&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;metrics&#34;&gt;Metrics&lt;/h3&gt;
&lt;p&gt;The following table describes the available VerticaDB operator metrics:&lt;/p&gt;

&lt;table class=&#34;table table-bordered&#34; &gt;



&lt;tr&gt; 

&lt;th &gt;
Name&lt;/th&gt; 

&lt;th &gt;
Type&lt;/th&gt; 

&lt;th &gt;
Description&lt;/th&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;controller_runtime_active_workers&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of currently used workers per controller.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;controller_runtime_max_concurrent_reconciles&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Maximum number of concurrent reconciles per controller.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;controller_runtime_reconcile_errors_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total number of reconciliation errors per controller.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;controller_runtime_reconcile_time_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
histogram&lt;/td&gt; 

&lt;td &gt;
Length of time per reconciliation per controller.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;controller_runtime_reconcile_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total number of reconciliations per controller.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;controller_runtime_webhook_latency_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
histogram&lt;/td&gt; 

&lt;td &gt;
Histogram of the latency of processing admission requests.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;controller_runtime_webhook_requests_in_flight&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Current number of admission requests being served.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;controller_runtime_webhook_requests_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total number of admission requests by HTTP status code.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_gc_duration_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
summary&lt;/td&gt; 

&lt;td &gt;
A summary of the pause duration of garbage collection cycles.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_goroutines&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of goroutines that currently exist.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_info&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Information about the Go environment.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_alloc_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes allocated and still in use.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_alloc_bytes_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total number of bytes allocated, even if freed.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_buck_hash_sys_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes used by the profiling bucket hash table.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_frees_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total number of frees.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_gc_sys_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes used for garbage collection system metadata.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_heap_alloc_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of heap bytes allocated and still in use.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_heap_idle_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of heap bytes waiting to be used.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_heap_inuse_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of heap bytes that are in use.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_heap_objects&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of allocated objects.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_heap_released_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of heap bytes released to OS.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_heap_sys_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of heap bytes obtained from system.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_last_gc_time_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of seconds since 1970 of last garbage collection.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_lookups_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total number of pointer lookups.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_mallocs_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total number of mallocs.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_mcache_inuse_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes in use by mcache structures.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_mcache_sys_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes used for mcache structures obtained from system.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_mspan_inuse_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes in use by mspan structures.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_mspan_sys_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes used for mspan structures obtained from system.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_next_gc_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of heap bytes when next garbage collection will take place.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_other_sys_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes used for other system allocations.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_stack_inuse_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes in use by the stack allocator.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_stack_sys_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes obtained from system for stack allocator.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_memstats_sys_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of bytes obtained from system.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;go_threads&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of OS threads created.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;process_cpu_seconds_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total user and system CPU time spent in seconds.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;process_max_fds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Maximum number of open file descriptors.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;process_open_fds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Number of open file descriptors.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;process_resident_memory_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Resident memory size in bytes.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;process_start_time_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Start time of the process since unix epoch in seconds.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;process_virtual_memory_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Virtual memory size in bytes.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;process_virtual_memory_max_bytes&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Maximum amount of virtual memory available in bytes.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_cluster_restart_attempted_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
The number of times we attempted a full cluster restart.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_cluster_restart_failed_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
The number of times we failed when attempting a full cluster restart.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_cluster_restart_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
histogram&lt;/td&gt; 

&lt;td &gt;
The number of seconds it took to do a full cluster restart.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_nodes_restart_attempted_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
The number of times we attempted to restart down nodes.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_nodes_restart_failed_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
The number of times we failed when trying to restart down nodes.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_nodes_restart_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
histogram&lt;/td&gt; 

&lt;td &gt;
The number of seconds it took to restart down nodes.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_running_nodes_count&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
The number of nodes that have a running pod associated with it.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_subclusters_count&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
The number of subclusters that exist.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_total_nodes_count&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
The number of nodes that currently exist.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_up_nodes_count&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
The number of nodes that have the database running and can accept connections.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;vertica_upgrade_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
The number of times the operator performed an upgrade caused by an image change.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;workqueue_adds_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total number of adds handled by workqueue.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;workqueue_depth&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
Current depth of workqueue.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;workqueue_longest_running_processor_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
How many seconds has the longest running processor for workqueue been running.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;workqueue_queue_duration_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
histogram&lt;/td&gt; 

&lt;td &gt;
How long in seconds an item stays in workqueue before being requested.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;workqueue_retries_total&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
counter&lt;/td&gt; 

&lt;td &gt;
Total number of retries handled by workqueue.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;workqueue_unfinished_work_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
gauge&lt;/td&gt; 

&lt;td &gt;
How many seconds of work has been done that is in progress and hasn&#39;t been observed by work_duration. Large values indicate stuck threads. One can deduce the number of stuck threads by observing the rate at which this increases.&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;workqueue_work_duration_seconds&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
histogram&lt;/td&gt; 

&lt;td &gt;
How long in seconds processing an item from workqueue takes.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;


      </description>
    </item>
    
    <item>
      <title>Containerized: Secrets management</title>
      <link>/en/containerized/db-operator/secrets-management/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/en/containerized/db-operator/secrets-management/</guid>
      <description>
        
        
        &lt;p&gt;The Kubernetes declarative model requires that you develop applications with manifest files or command line interactions with the Kubernetes API. These workflows expose your sensitive information in your application code and shell history, which compromises your application security.&lt;/p&gt;
&lt;p&gt;To mitigate any security risks, Kubernetes uses the concept of a secret to store this sensitive information. A secret is an object with a plain text name and a value stored as a base64 encoded string. When you reference a secret by name, Kubernetes retrieves and decodes its value. This lets you openly reference confidential information in your application code and shell without compromising your data.&lt;/p&gt;
&lt;p&gt;Kubernetes supports secret workflows with its native &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/&#34;&gt;Secret&lt;/a&gt; object, and cloud providers offer solutions that store your confidential information in a centralized location for easy management. By default, OpenText™ Analytics Database on Kubernetes supports native Secrets objects, and it also supports &lt;a href=&#34;#cloud-providers&#34;&gt;cloud solutions&lt;/a&gt; so that you have options for storing your confidential data.&lt;/p&gt;
&lt;p&gt;For best practices about handling confidential data in Kubernetes, see the &lt;a href=&#34;https://kubernetes.io/docs/concepts/security/secrets-good-practices/&#34;&gt;Kubernetes documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;manually-encode-data&#34;&gt;Manually encode data&lt;/h2&gt;
&lt;p&gt;In some circumstances, you might need to manually base64 encode your secret value and add it to a &lt;a href=&#34;#kubernetes-secrets&#34;&gt;Secret manifest&lt;/a&gt; or a &lt;a href=&#34;#cloud-providers&#34;&gt;cloud service secret manager&lt;/a&gt;. You can base64 encode data with tools available in your shell. For example, pass the string value to the &lt;code&gt;echo&lt;/code&gt; command, and pipe the output to the &lt;code&gt;base64&lt;/code&gt; command to encode the value. In the &lt;code&gt;echo&lt;/code&gt; command, include the &lt;code&gt;-n&lt;/code&gt; option so that it does not append a newline character:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ echo -n &amp;#39;secret-value&amp;#39; | base64
c2VjcmV0LXZhbHVl
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can take the output of this command and add it to a &lt;a href=&#34;https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-config-file/#create-the-config-file&#34;&gt;Secret manifest&lt;/a&gt; or cloud service secret manager.&lt;/p&gt;
&lt;h2 id=&#34;kubernetes-secrets&#34;&gt;Kubernetes Secrets&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/&#34;&gt;Secret&lt;/a&gt; is an Kubernetes object that you can reference by name that conceals confidential data in a base64 encoded string. For example, you can create a Secret named &lt;code&gt;su-password&lt;/code&gt; that stores the database superuser password. In a manifest file, you can add &lt;code&gt;su-password&lt;/code&gt; in place of the literal password value, and then you can safely store the manifest in a file system or pass it on the command line.&lt;/p&gt;
&lt;p&gt;The idiomatic way to create a Secret in Kubernetes is with the &lt;a href=&#34;https://kubernetes.io/docs/reference/kubectl/&#34;&gt;kubectl&lt;/a&gt; command-line tool&#39;s &lt;code&gt;create secret&lt;/code&gt; command, which provides options to create Secret object from various data sources. For example, the following command creates a Secret named &lt;code&gt;superuser-password&lt;/code&gt; from a literal value passed on the command line:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ kubectl create secret generic superuser-password &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    --from-literal&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;code-variable&#34;&gt;secret-value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;secret/superuser-password created
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Instead of creating a Kubernetes Secret with kubectl, you can &lt;a href=&#34;#encoding-requirements&#34;&gt;manually base64 encode a string on the command line&lt;/a&gt;, and then add the encoded output to a Secrets manifest.&lt;/p&gt;
&lt;h2 id=&#34;cloud-providers&#34;&gt;Cloud providers&lt;/h2&gt;
&lt;p&gt;Cloud providers offer services that let you store sensitive information in a central location and reference it securely. OpenText™ Analytics Database on Kubernetes requires a specific format for secrets stored in cloud providers. In addition, each cloud provider requires unique configuration before you can add a secret to your &lt;a href=&#34;../../../en/containerized/custom-resource-definitions/verticadb/&#34;&gt;VerticaDB custom resource (CR)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following &lt;a href=&#34;../../../en/containerized/custom-resource-definition-parameters/&#34;&gt;VerticaDB CR parameters&lt;/a&gt; accept secrets from cloud services:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;communal.credentialSecret&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nmaTLSSecret&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;passwordSecret&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;format-requirements&#34;&gt;Format requirements&lt;/h3&gt;
&lt;p&gt;Cloud provider secrets consist of a name and a secret value. To provide flexibility, cloud services let you store the value in a variety of formats. OpenText™ Analytics Database on Kubernetes requires that you format the secret value as a JSON document consisting of plain text string keys and base64 encoded values. For example, you might have a secret named &lt;code&gt;tlsSecrets&lt;/code&gt; whose value is a JSON document in the following format:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
  &amp;#34;ca.crt&amp;#34;: &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;base64-endcoded-ca.crt&lt;/span&gt;&amp;#34;,
  &amp;#34;tls.crt&amp;#34; &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;base64-endcoded-tls.crt&lt;/span&gt;&amp;#34;,
  &amp;#34;tls.key&amp;#34;: &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;base64-endcoded-tls.key&lt;/span&gt;&amp;#34;,
  &amp;#34;password&amp;#34;: &amp;#34;&lt;span class=&#34;code-variable&#34;&gt;base64-endcoded-password&lt;/span&gt;&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;amazon-web-services&#34;&gt;Amazon Web Services&lt;/h3&gt;
&lt;p&gt;Amazon Web Services (AWS) provides the &lt;a href=&#34;https://aws.amazon.com/secrets-manager/&#34;&gt;AWS Secrets Manager&lt;/a&gt;, a storage system for your sensitive data. To access secrets from your AWS console, go to &lt;strong&gt;Services&lt;/strong&gt; &amp;gt; &lt;strong&gt;Security, Identity, &amp;amp; Compliance&lt;/strong&gt; &amp;gt; &lt;strong&gt;Secrets Manager&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id=&#34;iam-permissions&#34;&gt;IAM permissions&lt;/h4&gt;
&lt;p&gt;Before you can add a secret to a CR, you must grant the following permissions to the VerticaDB operator pod and the database server pods so they can access AWS Secret Manager. You can grant these permissions to the worker node&#39;s IAM policy or the &lt;a href=&#34;https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts.html&#34;&gt;IAM roles for service account (IRSA)&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html&#34;&gt;secretsmanager:GetSecretValue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DescribeSecret.html&#34;&gt;secretsmanager:DescribeSecret&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For instructions about adding permissions to an AWS Secrets Manager secret, see the &lt;a href=&#34;https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_resource-policies.html&#34;&gt;AWS documentation&lt;/a&gt;. For details about OpenText™ Analytics Database on Kubernetes and AWS IRSA, see &lt;a href=&#34;../../../en/containerized/configuring-communal-storage/#&#34;&gt;Configuring communal storage&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&#34;adding-a-secret-to-a-cr&#34;&gt;Adding a secret to a CR&lt;/h4&gt;
&lt;p&gt;AWS stores secrets with metadata that describe and track changes to the secret. An important piece of metadata is the Amazon Resource Name (ARN), a unique identifier for the secret. The ARN uses the following format:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;arn:aws:secretsmanager:&lt;span class=&#34;code-variable&#34;&gt;region&lt;/span&gt;:&lt;span class=&#34;code-variable&#34;&gt;accountId&lt;/span&gt;:secret:SecretName-&lt;span class=&#34;code-variable&#34;&gt;randomChars&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To use an AWS secret in a CR, you have to add the ARN to the applicable CR parameter and prefix it with &lt;code&gt;awssm://&lt;/code&gt;. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;passwordSecret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;awssm://arn:aws:secretsmanager:&lt;span class=&#34;code-variable&#34;&gt;region&lt;/span&gt;:&lt;span class=&#34;code-variable&#34;&gt;account-id&lt;/span&gt;:secret:myPasswordSecret-&lt;span class=&#34;code-variable&#34;&gt;randomChars&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;nmaTLSSecret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;awssm://arn:aws:secretsmanager:&lt;span class=&#34;code-variable&#34;&gt;region&lt;/span&gt;:&lt;span class=&#34;code-variable&#34;&gt;account-id&lt;/span&gt;:secret:myNmaTLSSecret-&lt;span class=&#34;code-variable&#34;&gt;randomChars&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;communal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;credentialSecret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;awssm://arn:aws:secretsmanager:&lt;span class=&#34;code-variable&#34;&gt;region&lt;/span&gt;:&lt;span class=&#34;code-variable&#34;&gt;account-id&lt;/span&gt;:secret:myCredentialSecret-&lt;span class=&#34;code-variable&#34;&gt;randomChars&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;s3://&lt;span class=&#34;code-variable&#34;&gt;bucket-name&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;key-name&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;alert admonition note&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Note&lt;/h4&gt;

&lt;p&gt;You can now specify an AWS Secrets Manager secret with a version ID in any secret field of the VerticaDB resource. The secret name format is &lt;code&gt;awssm://&amp;lt;secret-arn&amp;gt;@&amp;lt;version-id&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;passwordSecret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;awssm://arn:aws:secretsmanager:&amp;lt;region&amp;gt;:&amp;lt;account-id&amp;gt;:secret:myPasswordSecret-&amp;lt;randomChars&amp;gt;@&amp;lt;version-id&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;nmaTLSSecret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;awssm://arn:aws:secretsmanager:&amp;lt;region&amp;gt;:&amp;lt;account-id&amp;gt;:secret:myNmaTLSSecret-&amp;lt;randomChars&amp;gt;@&amp;lt;version-id&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;communal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;credentialSecret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;awssm://arn:aws:secretsmanager:&amp;lt;region&amp;gt;:&amp;lt;account-id&amp;gt;:secret:myCredentialSecret-&amp;lt;randomChars&amp;gt;@&amp;lt;version-id&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;s3://&amp;lt;bucket-name&amp;gt;/&amp;lt;key-name&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also use AWS secrets with versions to rotate a certificate. For more information, see &lt;a href=&#34;../../../en/containerized/tls-kubernetes/#&#34;&gt;TLS in Kubernetes&lt;/a&gt;&lt;/p&gt;


&lt;/div&gt;
&lt;h3 id=&#34;google-cloud-platform&#34;&gt;Google Cloud Platform&lt;/h3&gt;
&lt;p&gt;Google Cloud provides &lt;a href=&#34;https://cloud.google.com/secret-manager&#34;&gt;Google Secret Manager&lt;/a&gt;, a storage system for your sensitive data. To access your secrets from your Google Cloud console, go to &lt;strong&gt;Security&lt;/strong&gt; &amp;gt; &lt;strong&gt;Secret Manager&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When you pass a Google secret as a CRD parameter, use the secret&#39;s resource name. The resource name uses the following format:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;projects/&lt;span class=&#34;code-variable&#34;&gt;project-id&lt;/span&gt;/secrets/&lt;span class=&#34;code-variable&#34;&gt;secret-name&lt;/span&gt;/versions/&lt;span class=&#34;code-variable&#34;&gt;version-number&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To use a Secret Manager secret in a CR, you have to add the resource name to the applicable CR parameter and prefix it with &lt;code&gt;gsm://&lt;/code&gt;. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;passwordSecret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gsm://projects/&lt;span class=&#34;code-variable&#34;&gt;project-id&lt;/span&gt;/secrets/&lt;span class=&#34;code-variable&#34;&gt;password-secret&lt;/span&gt;/versions/&lt;span class=&#34;code-variable&#34;&gt;version-number&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;nmaTLSSecret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gsm://projects/&lt;span class=&#34;code-variable&#34;&gt;project-id&lt;/span&gt;/secrets/&lt;span class=&#34;code-variable&#34;&gt;nma-certs-secret&lt;/span&gt;/versions/&lt;span class=&#34;code-variable&#34;&gt;version-number&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;communal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;credentialSecret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gsm://projects/&lt;span class=&#34;code-variable&#34;&gt;project-id&lt;/span&gt;/secrets/&lt;span class=&#34;code-variable&#34;&gt;gcp-creds-secret&lt;/span&gt;/versions/&lt;span class=&#34;code-variable&#34;&gt;version-number&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;gs://&lt;span class=&#34;code-variable&#34;&gt;bucket-name&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;path&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;to&lt;/span&gt;/&lt;span class=&#34;code-variable&#34;&gt;database-name&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
  </channel>
</rss>
