<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vertica Documentation – Vertica DB operator</title>
    <link>/en/containerized/db-operator/</link>
    <description>Recent content in Vertica DB operator on Vertica Documentation</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 Vertica DB 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 custom resource definition (CRD), &lt;a href=&#34;../../../en/containerized/db-operator/&#34;&gt;VerticaDB operator&lt;/a&gt;, and admission controller work together to maintain the state of your environment and automate tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The CRD extends the Kubernetes API to provide custom objects. It serves as a blueprint for custom resource (CR) instances that specify the desired state of your environment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The VerticaDB operator is a custom controller that monitors CR instances to maintain the desired state of VerticaDB objects. You can deploy one VerticaDB operator per namespace, and the operator monitors only the VerticaDB objects within that namespace.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The admission controller is a webhook that queries a REST endpoint to verify changes to mutable states in a CR instance.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&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;h2 id=&#34;installation-options&#34;&gt;Installation options&lt;/h2&gt;
&lt;p&gt;Vertica provides two separate 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;#Installi4&#34;&gt;OperatorHub.io&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;#Installi3&#34;&gt;Helm charts&lt;/a&gt;. Helm chart installations include operator logging levels and log rotation policy. For details, see &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;Helm chart parameters&lt;/a&gt;.&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 install option has 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;p&gt;&lt;a name=&#34;Installi4&#34;&gt;&lt;/a&gt;&lt;/p&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;Vertica operator page&lt;/a&gt; and follow the install instructions.&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;Installi3&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;helm-charts&#34;&gt;Helm charts&lt;/h2&gt;
&lt;p&gt;Vertica packages VerticaDB operator and admission controller in a &lt;a href=&#34;https://helm.sh/&#34;&gt;Helm chart&lt;/a&gt;. Vertica on Kubernetes allows one operator instance per namespace.

&lt;div class=&#34;admonition important&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Important&lt;/h4&gt;
Vertica recommends that you use Kubernetes 1.21.1 or later. Earlier versions require that you add the &lt;code&gt;kubernetes.io/metadata.name=&lt;/code&gt;&lt;em&gt;&lt;code&gt;namespace-name&lt;/code&gt;&lt;/em&gt; label to each namespace that contains an operator.
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;Configur&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;configuring-tls-for-the-admission-controller&#34;&gt;Configuring TLS for the admission controller&lt;/h3&gt;
&lt;p&gt;Before you can install the VerticaDB Helm chart, you must configure TLS for the admission controller. The admission controller uses a webhook that requires TLS certificates for data encryption. Use the &lt;code&gt;webhook.certSource&lt;/code&gt; &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;Helm chart parameter&lt;/a&gt; to manage the TLS certificates.&lt;/p&gt;
&lt;p&gt;By default, &lt;code&gt;webhook.certSource&lt;/code&gt; is set to &lt;code&gt;internal&lt;/code&gt;, a setting that generates a self-signed certificate before starting the admission controller. There are two additional settings that require manual configuration before you install the operator:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#Defining&#34;&gt;secret&lt;/a&gt;: You generate 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 the &lt;code&gt;webhook.tlsSecret&lt;/code&gt; &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;Helm chart parameter&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#Installi&#34;&gt;cert-manager&lt;/a&gt;: Deprecated. You install the cert-manager operator, and it generates self-signed certificates. When the certificate nears expiration, cert-manager automatically handles private key rotation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name=&#34;Defining&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;defining-custom-certificates&#34;&gt;Defining custom certificates&lt;/h3&gt;
&lt;p&gt;Custom certificates require a TLS key that sets the Subjective Alternative Name (SAN) using the admission controller webhook&#39;s fully-qualified domain name (FDQN). You can set the SAN in a configuration file with 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;namespace&lt;/span&gt;.svc
DNS.2 = verticadb-operator-webhook-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;For more information about TLS and Vertica, see &lt;a href=&#34;../../../en/security-and-authentication/tls-protocol/&#34;&gt;TLS protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you install the VerticaDB operator and admission controller Helm chart, you can pass parameters to customize the Helm chart. Conceal custom certificates in a &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/secret/&#34;&gt;Secret&lt;/a&gt; before you pass them as parameters. The following command creates a Secret that stores the TLS key, TLS certificate, and CA certificate:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl create secret generic tls-secret --from-file=tls.key=/&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=tls.crt=/&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=ca.crt=/&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;/code&gt;&lt;/pre&gt;&lt;p&gt;Use &lt;code&gt;tls-secret&lt;/code&gt; when you install the VerticaDB operator and admission controller Helm chart. For a detailed example, 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;&lt;a name=&#34;Installi&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;installing-cert-manager&#34;&gt;Installing cert-manager&lt;/h3&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 TLS certificate management method is deprecated and will be removed in a future release.

&lt;/div&gt;

&lt;p&gt;[&lt;a href=&#34;https://cert-manager.io/docs/&#34;&gt;cert-manager&lt;/a&gt;](&lt;a href=&#34;https://cert-manager.io/docs/&#34;&gt;https://cert-manager.io/docs/&lt;/a&gt;) is available as a YAML manifest in a GitHub repository:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;kubectl&lt;/code&gt; to install cert-manager:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Installation might take a few minutes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify the cert-manager installation:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl get pods --namespace cert-manager
NAME                                       READY   STATUS    RESTARTS   AGE
cert-manager-7dd5854bb4-skks7              1/1     Running   5          12d
cert-manager-cainjector-64c949654c-9nm2z   1/1     Running   5          12d
cert-manager-webhook-6bdffc7c9d-b7r2p      1/1     Running   5          12d
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When you install the Helm chart, set the &lt;code&gt;webhook.certSource&lt;/code&gt; &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;Helm chart parameter&lt;/a&gt; to &lt;code&gt;cert-manager&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&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 \
  --set webhook.certSource=cert-manager
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For additional details about cert-manager install verification, see the &lt;a href=&#34;https://cert-manager.io/docs/installation/verify/#manual-verification&#34;&gt;cert-manager documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;Granting&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;granting-operator-privileges&#34;&gt;Granting operator privileges&lt;/h3&gt;
&lt;p&gt;Optionally, you can authorize a user without cluster administrator privileges to install the operator in a specific namespace. You can grant these operator privileges with a preconfigured &lt;a href=&#34;https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/&#34;&gt;Kubernetes service account&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Vertica leverages &lt;a href=&#34;https://kubernetes.io/docs/reference/access-authn-authz/rbac/&#34;&gt;Kubernetes RBAC&lt;/a&gt; to authorize service accounts with the privileges to perform operator actions. You can grant operator privileges to a Role resource type, then define a RoleBinding resource type that associates that Role with a service account. Any user can pass the service account name to the &lt;code&gt;helm install&lt;/code&gt; command with the &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;serviceAccountOverride&lt;/a&gt; parameter and install the operator.&lt;/p&gt;
&lt;p&gt;The following steps use a YAML file, operator-rbac.yaml. This sample file defines a ServiceAccount, Roles, and RoleBindings to grant the required privileges to the service account. It is available in the &lt;a href=&#34;https://github.com/vertica/vertica-kubernetes&#34;&gt;vertica-kubernetes&lt;/a&gt; GitHub repository:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Apply operator-rbac.yaml to the namespace:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl apply -n &lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt; -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/operator-rbac.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify the changes with &lt;code&gt;kubectl get&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Service account:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl get serviceaccounts
NAME                                    SECRETS   AGE
default                                 1         71m
verticadb-operator-controller-manager   1         69m
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Roles in the correct namespace:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl get roles -n &lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;
NAME                                      CREATED AT
verticadb-operator-leader-election-role   2022-04-14T16:26:53Z
verticadb-operator-manager-role           2022-04-14T16:26:53Z
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RoleBindings in the correct namespace:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl get rolebinding -n &lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;
NAME                                             ROLE                                           AGE
verticadb-operator-leader-election-rolebinding   Role/verticadb-operator-leader-election-role   73m
verticadb-operator-manager-rolebinding           Role/verticadb-operator-manager-role           73m
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a name=&#34;Installi5&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;installing-the-helm-chart&#34;&gt;Installing the helm chart&lt;/h3&gt;
&lt;p&gt;Before you can install the Helm chart, you must select a method to &lt;a href=&#34;#Configur&#34;&gt;configure TLS for the admission controller&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The following install steps use custom certificates:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add the Vertica helm charts to you repository. The following command installs the CRD Helm chart and names it &lt;code&gt;vertica-charts&lt;/code&gt; for future reference:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm repo add vertica-charts https://vertica.github.io/charts
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update your Helm repository to ensure that you are using the latest version of your repository:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm repo update
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Install the operator Helm chart. The following examples demonstrate the most common Helm chart configurations. For details about the Helm chart options and parameters, see &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;Helm chart parameters&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;

Each of the following commands include the &lt;code&gt;--create-namespace&lt;/code&gt; option to create the provided namespace if it does not exist. If you do not provide the namespace during install, Helm installs the operator in the current namespace that is defined in the &lt;code&gt;kubectl&lt;/code&gt; configuration file.

&lt;/div&gt;
&lt;p&gt;Enter one of the following commands to customize your Helm chart installation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Default configuration. The following command requires cluster administrator privileges:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&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;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Custom certificates. Pass custom certificates with the &lt;code&gt;webhook.caBundle&lt;/code&gt;, &lt;code&gt;webhook.certSource&lt;/code&gt;, and &lt;code&gt;webhook.tlsSecret&lt;/code&gt;. The following command requires cluster administrator privileges, and uses the tls-secret Secret created in &lt;a href=&#34;#Defining&#34;&gt;Defining Custom Certificates&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&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 \
  --set webhook.certSource=secret \
  --set webhook.tlsSecret=tls-secret
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Service account override. Use service accounts to allow users without cluster administrator privileges to install the operator. Pass the service account with the &lt;code&gt;serviceAccountNameOverride&lt;/code&gt; parameter:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&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 \
    --set serviceAccountNameOverride=&lt;span class=&#34;code-variable&#34;&gt;service-account-name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For details, see &lt;a href=&#34;#Granting&#34;&gt;Granting Operator Installation Privileges&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Do not install the admission controller webhook. Deploying the webhook requires cluster-scoped privileges that are not required to install the operator. If you use a service account that is granted the privileges required to install the operator but not the webhook, provide the service account with &lt;code&gt;serviceAccountNameOverride&lt;/code&gt;, and set &lt;code&gt;webhook.enable&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt; to deploy only the operator:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&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 \
    --set serviceAccountNameOverride=&lt;span class=&#34;code-variable&#34;&gt;service-account-name&lt;/span&gt;
    --set webhook.enable=false
&lt;/code&gt;&lt;/pre&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;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For additional details about &lt;code&gt;helm install&lt;/code&gt;, see the &lt;a href=&#34;https://helm.sh/docs/helm/helm_install/&#34;&gt;official documentation&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Containerized: Upgrading the Vertica DB 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;Vertica 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;

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;/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 Vertica DB operator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;operatorhubio&#34;&gt;OperatorHub.io&lt;/h2&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;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl get installplan
NAME CSV APPROVAL APPROVED
install-ftcj9 verticadb-operator.v1.7.0 Manual false
install-pw7ph verticadb-operator.v1.6.0 Manual true
&lt;/code&gt;&lt;/pre&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;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl patch installplan install-ftcj9 --type=merge --patch=&amp;#39;{&amp;#34;spec&amp;#34;: {&amp;#34;approved&amp;#34;: true}}&amp;#39;
installplan.operators.coreos.com/install-ftcj9 patched
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After you set the approval, the OLM operator silently upgrades the VerticaDB operator. To monitor its progress, inspect the STATUS column of the Subscription object:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;
$ kubectl describe subscription &lt;span class=&#34;code-variable&#34;&gt;subscription-object-name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;helm-charts&#34;&gt;Helm charts&lt;/h2&gt;
&lt;p&gt;The CRD is included when you install the Helm chart, 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. Upgrading the operator with the CRD requires the following prerequisites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cluster administrator privileges&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Complete &lt;a href=&#34;../../../en/containerized/db-operator/installing-db-operator/&#34;&gt;Installing the Vertica DB operator&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, you must upgrade the &lt;a href=&#34;../../../en/containerized/subclusters-on-k8s/verticaautoscaler-custom-resource/&#34;&gt;VerticaAutoscaler custom resource&lt;/a&gt;, even if you do not use it in your environment. The VerticaAutoscaler CR is installed with the operator and is maintained as a separate YAML manifest. Upgrade the VerticaAutoscaler CR to ensure that your operator is upgraded completely.&lt;/p&gt;
&lt;p&gt;Use &lt;code&gt;kubectl apply&lt;/code&gt; to upgrade the CRD for both the VerticaDB operator and the VerticaAutoscaler:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Upgrade the VerticaDB operator CRD:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl apply -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticadbs.vertica.com-crd.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Upgrade the VerticaAutoscaler CRD:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl apply -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticaautoscalers.vertica.com-crd.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Upgrade the Helm chart:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ helm upgrade &lt;span class=&#34;code-variable&#34;&gt;operator-name&lt;/span&gt; --wait vertica-charts/verticadb-operator
&lt;/code&gt;&lt;/pre&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;The following table describes the available settings for the VerticaDB operator and admission controller Helm chart.

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



&lt;tr&gt; 

&lt;th &gt;
Parameter&lt;/th&gt; 

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

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;affinity&lt;/code&gt;&lt;/td&gt; 

&lt;td &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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;image.name&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;




&lt;p&gt;The name of the image that runs the operator.&lt;/p&gt;
&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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;imagePullSecrets&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
A list of Secrets that store credentials to authenticate to the private container repository specified by &lt;code&gt;image.repo&lt;/code&gt; and &lt;code&gt;rbac_proxy_image&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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;image.repo&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;






&lt;p&gt;The 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;p&gt;Use this parameter with &lt;code&gt;rbac_proxy_image.name&lt;/code&gt; and &lt;code&gt;rbac_proxy_image.repo&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; docker.io&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;logging.filePath&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;




&lt;p&gt;The path to a log file in the VerticaDB operator filesystem. If this value is not specified, Vertica 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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;logging.level&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;












&lt;p&gt;Minimum logging level. This parameter accepts the following values:&lt;/p&gt;
&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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;logging.maxFileSize&lt;/code&gt;&lt;/td&gt; 

&lt;td &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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;logging.maxFileAge&lt;/code&gt;&lt;/td&gt; 

&lt;td &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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;logging.maxFileRotation&lt;/code&gt;&lt;/td&gt; 

&lt;td &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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;nameOverride&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;




&lt;p&gt;Sets the prefix for the name assigned to all objects that the Helm chart creates.&lt;/p&gt;
&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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;nodeSelector&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;









&lt;p&gt;Provides control over 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;
&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 tabindex=&#34;0&#34;&gt;&lt;code&gt;nodeSelector:
      region: us-east
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;priorityClassName&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;
The &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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;prometheus.createProxyRBAC&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;




&lt;p&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;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: true&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;prometheus.createServiceMonitor&lt;/code&gt;&lt;/td&gt; 

&lt;td &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;
&lt;p&gt;This parameter is deprecated and will be removed in a future release.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;When set to true, creates the ServiceMonitor custom resource for the Prometheus operator. You must install the Prometheus operator before you set this to true and install the Helm chart.&lt;/p&gt;
&lt;p&gt;For details, see the &lt;a href=&#34;https://github.com/prometheus-operator/prometheus-operator&#34;&gt;Prometheus operator GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: false&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;prometheus.expose&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;










&lt;p&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;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;EnableWithAuthProxy: Creates a new service object that exposes an HTTPS &lt;code&gt;/metrics&lt;/code&gt; endpoint. The &lt;a href=&#34;https://github.com/brancz/kube-rbac-proxy&#34;&gt;RBAC proxy&lt;/a&gt; controls 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;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;: EnableWithAuthProxy&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;prometheus.tlsSecret&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;














&lt;p&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;
&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;EnableWithAuthProxy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;prometheus.expose&lt;/code&gt; is not set to &lt;code&gt;EnableWithAuthProxy&lt;/code&gt;, then this parameter is ignored, and the RBAC proxy sidecar generates its own self-signed certificate.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;rbac_proxy_image.name&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;






&lt;p&gt;The name of the Kubernetes RBAC proxy image that performs authorization. Use this parameter for deployments that require authorization by a proxy server, such as an air-gapped operator.&lt;/p&gt;
&lt;p&gt;Use this parameter with &lt;code&gt;image.repo&lt;/code&gt; and &lt;code&gt;rbac_proxy_image.repo&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; &lt;a href=&#34;https://github.com/brancz/kube-rbac-proxy&#34;&gt;kubebuilder/kube-rbac-proxy:v0.11.0&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;rbac_proxy_image.repo&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;






&lt;p&gt;The server that hosts the repository that contains &lt;code&gt;rbac_proxy_image.name&lt;/code&gt;. Use this parameter for deployments that perform authorization by a proxy server, such as an air-gapped operator.&lt;/p&gt;
&lt;p&gt;Use this parameter with &lt;code&gt;image.repo&lt;/code&gt; and &lt;code&gt;rbac_proxy_image.name&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt;&lt;a href=&#34;https://cloud.google.com/container-registry&#34;&gt; gcr.io&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;


&lt;code&gt;resources.limits&lt;/code&gt; and &lt;code&gt;resources.requests&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;


















&lt;p&gt;The resource requirements for the operator pod.&lt;/p&gt;
&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 tabindex=&#34;0&#34;&gt;&lt;code&gt;resources:
  limits:
    cpu: 100m
    memory: 750Mi
  requests:
    cpu: 100m
    memory: 20Mi
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;serviceAccountNameOverride&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;









&lt;p&gt;Service account that identifies any pods in the cluster for apiserver access. A cluster administrator can create a service account that grants the privileges required to install the operator so that users without cluster administrator privileges can install the Helm chart.&lt;/p&gt;
&lt;p&gt;To correctly control access, the service account&#39;s Roles and RoleBindings must exist before you add the service account to the CR. If these are not set, the Vertica Helm chart creates and uses a service account.&lt;/p&gt;
&lt;p&gt;Vertica provides the required Roles and RoleBindings as GitHub &lt;a href=&#34;https://github.com/vertica/vertica-kubernetes/releases/latest/download/operator-rbac.yaml&#34;&gt;release artifacts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; Empty string (&amp;quot;&amp;quot;)&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;skipRoleAndRoleBindingCreation&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;











&lt;p&gt;Determines whether the Helm chart creates any Roles or RoleBindings to authorize service accounts with VerticaDB operator privileges.&lt;/p&gt;
&lt;p&gt;When set to true, the Helm chart does not create any Roles or RoleBindings. This allows a user that cannot create Roles and RoleBindings to install the Helm chart.&lt;/p&gt;
&lt;p&gt;Vertica provides the required Roles and RoleBindings as GitHub &lt;a href=&#34;https://github.com/vertica/vertica-kubernetes/releases/latest/download/operator-rbac.yaml&#34;&gt;release artifacts&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The service account that installs the Helm chart must exist, and you must set &lt;code&gt;serviceAccountNameOverride&lt;/code&gt; to that service account.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default&lt;/strong&gt;: false&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;tolerations&lt;/code&gt;&lt;/td&gt; 

&lt;td &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;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;webhook.caBundle&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;











&lt;p&gt;A PEM-encoded certificate authority (CA) bundle that 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;div class=&#34;admonition deprecated&#34; role=&#34;alert&#34;&gt;
&lt;h4 class=&#34;admonition-head&#34;&gt;Deprecated&lt;/h4&gt;
&lt;p&gt;This parameter is deprecated and will be removed in a future release. To add a CA bundle, see &lt;code&gt;webhook.tlsSecret&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;webhook.caBundle&lt;/code&gt; is set and the &lt;code&gt;webhook.tlsSecret&lt;/code&gt; Secret contains a ca.crt key, then the &lt;code&gt;webhook.tlsSecret&lt;/code&gt; CA value takes precedence.&lt;/p&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;webhook.certSource&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;






















&lt;p&gt;Determines how TLS certificates are provided for the admission controller webhook. This parameter accepts the following values:&lt;/p&gt;
&lt;ul&gt;
&lt;li&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;/li&gt;
&lt;li&gt;cert-manager: The &lt;a href=&#34;https://cert-manager.io/docs/&#34;&gt;cert-manager&lt;/a&gt; operator generates self-signed certificates and automatically handles private key rotation when the certificate nears expiration.&lt;/li&gt;
&lt;/ul&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;
&lt;p&gt;This TLS certificate management method is deprecated and will be removed in a future release.&lt;/p&gt;
&lt;/div&gt;
&lt;ul&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 Vertica DB operator&lt;/a&gt;.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;webhook.enable&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;















&lt;p&gt;Determines if the Helm chart installs the admission controller webhooks for the VerticaDB custom resource and VerticaAutoscaler. If you do not have the privileges required to install the admission controller, set this value to false to deploy the operator only.&lt;/p&gt;
&lt;p&gt;This parameter enables or disables both webhooks. You cannot enable one webhook and disable the other.&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;
&lt;p&gt;Webhooks prevent invalid state changes to the custom resource. Running Vertica on Kubernetes without webhook validations might result in invalid state transitions.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Default:&lt;/strong&gt; true&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;

&lt;tr&gt; 

&lt;td &gt;
&lt;code&gt;webhook.tlsSecret&lt;/code&gt;&lt;/td&gt; 

&lt;td &gt;












&lt;p&gt;Secret that contains a PEM-encoded certificate authority (CA) bundle and its keys.&lt;/p&gt;
&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/p&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;official 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;OpenShift requires that each deployment uses 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) to enforce enhanced security measures. The SCC lets administrators control the privileges of the pods in a cluster. For example, you can restrict namespace access for specific users in a multi-user environment.&lt;/p&gt;
&lt;h3 id=&#34;default-sccs&#34;&gt;Default SCCs&lt;/h3&gt;
&lt;p&gt;OpenShift provides &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 SCCs&lt;/a&gt; that provide a range of security features without manual configuration. Vertica on Kubernetes supports the &lt;code&gt;privileged&lt;/code&gt; SCC, the most restrictive default SCC. The &lt;code&gt;privileged&lt;/code&gt; SCC allows Vertica to assign user and group IDs to the Kubernetes objects in the cluster. In addition, the &lt;code&gt;privileged&lt;/code&gt; SCC has the following Linux capabilities that enable internal SSH communication between the pods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SYS_CHROOT&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AUDIT_WRITE&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;anyuid-extra-custom-scc&#34;&gt;Anyuid-extra custom SCC&lt;/h3&gt;
&lt;p&gt;Vertica provides &lt;code&gt;anyuid-extra&lt;/code&gt;, a custom SCC that you can create that extends the &lt;code&gt;anyuid&lt;/code&gt; SCC. Use the &lt;code&gt;anyuid-extra&lt;/code&gt; SCC if you need to run Vertica in a less-restrictive environment than the &lt;code&gt;privileged&lt;/code&gt; SSC allows. For example, if you do not have the privileges to grant the &lt;code&gt;privileged&lt;/code&gt; SCC, you can create the &lt;code&gt;anyuid-extra&lt;/code&gt; SCC and add it to your Vertica workloads service account.&lt;/p&gt;
&lt;p&gt;For installation details, see &lt;a href=&#34;#Creating&#34;&gt;Creating a Custom SCC with anyuid-extra&lt;/a&gt;.&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 Vertica. 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. Vertica 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;h3 id=&#34;installing-the-operator-in-multiple-openshift-namespaces&#34;&gt;Installing the operator in multiple OpenShift namespaces&lt;/h3&gt;
&lt;p&gt;By default, the OpenShift user interface (UI) installs the VerticaDB operator in a single OpenShift namespace. In some circumstances, you might require that the operator watch and manage resource objects across multiple OpenShift namespaces.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prequisites&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.openshift.com/container-platform/4.7/cli_reference/openshift_cli/getting-started-cli.html&#34;&gt;OpenShift CLI tools&lt;/a&gt;&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;p&gt;The following steps add the VerticaDB operator to an additional namespace:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a YAML-formatted OperatorGroup object file. The following example creates file named operatorgroup.yaml:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apiVersion: operators.coreos.com/v1alpha2
kind: OperatorGroup
metadata:
  name: vertica-operatorgroup
  namespace: $NAMESPACE
spec:
  targetNamespaces:
  - $NAMESPACE
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the previous command, &lt;code&gt;$NAMESPACE&lt;/code&gt; is the namespace where you want to install the operator.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create the OperatorGroup object:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ oc apply -f operatorgroup.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create a YAML-formatted Subscription object file to subscribe a namespace to an operator. The following example creates a file named sub.yaml:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: verticadb-operator
  namespace: $NAMESPACE
spec:
  channel: stable
  name: verticadb-operator
  source: community-operators
  sourceNamespace: openshift-marketplace
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create the Subscription object:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ oc apply -f sub.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After you create the Subscription object, the OLM is aware of the operator.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use &lt;code&gt;kubectl get&lt;/code&gt; to view the installation progress in a separate shell:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl get -n $NAMESPACE clusterserviceversion -w --selector operators.coreos.com/verticadb-operator.$NAMESPACE
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When the installation is complete, you can manage the operator from the UI.&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;Creating&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;creating-a-custom-scc-with-anyuid-extra&#34;&gt;Creating a custom SCC with anyuid-extra&lt;/h2&gt;
&lt;p&gt;Before you can create an operator, you must create the &lt;code&gt;anyuid-extra&lt;/code&gt; SCC and add it to your Vertica workloads service account. The Vertica &lt;code&gt;anyuid-extra&lt;/code&gt; SCC manifest is available on the Vertica GitHub repository.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create the custom SCC using the &lt;code&gt;anyuid-extra&lt;/code&gt; YAML-formatted manifest:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl apply -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/custom-scc.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For detailed instructions, refer to the &lt;a href=&#34;https://docs.openshift.com/container-platform/4.8/authentication/managing-security-context-constraints.html#security-context-constraints-creating_configuring-internal-oauth&#34;&gt;OpenShift documentation&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Execute the following command to add the custom SCC to your Vertica workloads service account:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ oc adm policy add-scc-to-user -n $NAMESPACE -z verticadb-operator-controller-manager anyuid-extra
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the previous command, &lt;code&gt;$NAMESPACE&lt;/code&gt; is the namespace with the operator installation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;By default, the &lt;code&gt;anyuid-extra&lt;/code&gt; has a priority setting of 10, so it is automatically selected instead of the default &lt;code&gt;privileged&lt;/code&gt; SCC. For additional details about the priority setting, refer to the &lt;a href=&#34;https://docs.openshift.com/container-platform/4.8/authentication/managing-security-context-constraints.html#scc-prioritization_configuring-internal-oauth&#34;&gt;OpenShift documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;deploying-vertica-on-openshift&#34;&gt;Deploying Vertica on OpenShift&lt;/h2&gt;
&lt;p&gt;After you installed the VerticaDB operator and added a supported SCC to your Vertica workloads service account, you can deploy Vertica 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 Vertica 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 a Vertica custom resource, see &lt;a href=&#34;../../../en/containerized/creating-custom-resource/&#34;&gt;Creating a custom resource&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;Vertica 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. These metrics create a detailed model of your application over time, which provides valuable performance and troubleshooting insights. Prometheus exposes these metrics with an HTTP endpoint to 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 the operator&#39;s &lt;code&gt;/metrics&lt;/code&gt; endpoint, and Prometheus periodically scrapes that endpoint to collect target data. The operator supports the &lt;a href=&#34;https://sdk.operatorframework.io/&#34;&gt;operator SDK framework&lt;/a&gt;, which requires that an authorization proxy impose role-based-access control (RBAC) to access operator metrics. To increase flexibility, Vertica provides the following options to access the &lt;code&gt;/metrics&lt;/code&gt; endpoint with Prometheus:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Use a sidecar container as an RBAC proxy to authorize connections.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Expose the &lt;code&gt;/metrics&lt;/code&gt; endpoint to external connections without RBAC.&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;Vertica 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;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&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 Vertica DB 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;h2 id=&#34;access-metrics-with-rbac&#34;&gt;Access metrics with RBAC&lt;/h2&gt;
&lt;p&gt;The operator SDK framework requires that operators use an authorization proxy for metrics access. Because the operator sends metrics to localhost only, Vertica meets these requirements with a sidecar container with localhost access that enforces RBAC.&lt;/p&gt;
&lt;p&gt;RBAC rules are cluster-scoped, and the sidecar authorizes connections from clients associated with a service account that has the correct ClusterRole and ClusterRoleBindings. Vertica 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-proxy-role-cr&lt;/a&gt;: ClusterRole that has TokenReviews and SubjectAccessReviews access so that the sidecar 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-proxy-rolebinding-crb&lt;/a&gt;: ClusterRoleBinding that associates the ClusterRole that verifies sidecar 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;h3 id=&#34;create-rbac-rules&#34;&gt;Create RBAC rules&lt;/h3&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 RBAC sidecar proxy with a service account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a ClusterRoleBinding:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl create clusterrolebinding verticadb-operator-proxy-rolebinding \
    --clusterrole=verticadb-operator-proxy-role \
    --serviceaccount=&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;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add a service account to an existing ClusterRoleBinding:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl patch clusterrolebinding verticadb-operator-proxy-rolebinding \
    --type=&amp;#39;json&amp;#39; \
    -p=&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;/code&gt;&lt;/pre&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 RBAC sidecar proxy service account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Create a ClusterRoleBinding:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl create clusterrolebinding verticadb-operator-metrics-reader \
    --clusterrole=verticadb-operator-metrics-reader \
    --serviceaccount=&lt;span class=&#34;code-variable&#34;&gt;namespace&lt;/span&gt;:&lt;span class=&#34;code-variable&#34;&gt;serviceaccount&lt;/span&gt; \
    --group=system:authenticated
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bind the service account to an existing ClusterRoleBinding:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl patch clusterrolebinding verticadb-operator-metrics-reader \
    --type=&amp;#39;json&amp;#39; \
    -p=&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;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl patch clusterrolebinding verticadb-operator-metrics-reader \
    --type=&amp;#39;json&amp;#39; \
    -p=&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;/code&gt;&lt;/pre&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. By default, the &lt;a href=&#34;../../../en/containerized/db-operator/helm-chart-parameters/&#34;&gt;prometheus.expose&lt;/a&gt; parameter is set to EnableWithProxy, which creates the service object and exposes the operator&#39;s &lt;code&gt;/metrics&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;p&gt;For details about creating a sidecar container, see &lt;a href=&#34;../../../en/containerized/creating-custom-resource/&#34;&gt;Creating a custom resource&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;service-object&#34;&gt;Service object&lt;/h3&gt;
&lt;p&gt;Vertica 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;p&gt;&lt;a name=&#34;Bearer&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;bearer-token-authentication&#34;&gt;Bearer token authentication&lt;/h3&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;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ curl --insecure --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -H &amp;#34;Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)&amp;#34; https://verticadb-operator-metrics-service.vertica:8443/metrics
&lt;/code&gt;&lt;/pre&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;h3 id=&#34;tls-client-certificate-authentication&#34;&gt;TLS client certificate authentication&lt;/h3&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 RBAC proxy sidecar 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 RBAC proxy sidecar 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;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kubectl create secret generic metrics-tls --from-file=tls.key=/&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=tls.crt=/&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=ca.crt=/&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;/code&gt;&lt;/pre&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;pre tabindex=&#34;0&#34;&gt;&lt;code&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 \
  --set prometheus.tlsSecret=metrics-tls
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;code&gt;prometheus.tlsSecret&lt;/code&gt; parameter forces the RBAC proxy to use the TLS certificates stored in the Secret. Otherwise, the RBAC proxy sidecar 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;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ curl --key tls.key --cert tls.crt --cacert ca.crt https://verticadb-operator-metrics-service.vertica.svc: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;Vertica 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. Vertica supports the ServiceMonitor CR that discovers the VerticaDB operator automatically, and authenticates requests with a &lt;a href=&#34;#Bearer&#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;h2 id=&#34;access-metrics-without-rbac&#34;&gt;Access metrics without RBAC&lt;/h2&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;pre tabindex=&#34;0&#34;&gt;&lt;code&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 \
    --set prometheus.expose=EnableWithoutAuth
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;service-object-1&#34;&gt;Service object&lt;/h3&gt;
&lt;p&gt;Vertica 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;h2 id=&#34;disabling-prometheus&#34;&gt;Disabling prometheus&lt;/h2&gt;
&lt;p&gt;To disable Prometheus, set the prometheus.expose Helm chart parameter to Disable. The following is an example command:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&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 \
    --set prometheus.expose=Disable
&lt;/code&gt;&lt;/pre&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 Vertica DB operator&lt;/a&gt;.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
