# Kubernetes: Getting to production

Are you ready to deploy and test Weaviate on a self-managed K8s (Kubernetes) cluster? This guide shows how to validate Weaviate’s capabilities in your enterprise environment.

At the end of this guide, expect to have:

- A configured Helm-based deployment and networking setup
- Basic scaling, persistent storage, and resource management
- TLS, RBAC, and security best practices implemented
- Monitoring, logging, and backup strategies enabled

### Prerequisites

Before beginning, ensure that you have the following:

- Basic Kubernetes and containerization conceptual knowledge
- Basic experience with Helm and `kubectl`
- A running Kubernetes cluster with Weaviate installed
- `kubectl` installed
- Helm installed

<!-- TODO[g-despot] This needs to be replaced with something else
:::callout{intent="note"}

Check out the Academy course [“Run Weaviate on Kubernetes”](https://docs.weaviate.io/academy/deployment/k8s) if you need assistance.

:::
-->

## Step 1: Configure your Helm Chart

- Use the official [Weaviate Helm chart](https://github.com/weaviate/weaviate-helm) for your installation:

```
  helm repo add weaviate https://weaviate.github.io/weaviate-helm
  helm install my-weaviate weaviate/weaviate
```

- Customize the values to fit your enterprise requirements (e.g., resource allocation, storage settings).
- Deploy the chart and verify pod health.

## Step 2: Network Security

- Configure an ingress controller to securely expose Weaviate.
- Enable TLS with a certificate manager and enforce TLS encryption for all client-server communication.
- Assign a domain name for external access.
- Implement RBAC or admin lists to restrict user access.

:::accordion{title="An example of RBAC enabled on your Helm chart"}
```yaml
authorization:
  rbac:
    enabled: true
    root_users:
      - admin_user1
      - admin_user2
```
:::

:::accordion{title="An example of admin lists implemented on your Helm chart (if not using RBAC)"}
```yaml
admin_list:
  enabled: true
  users:
    - admin_user1
    - admin_user2
    - api-key-user-admin
  read_only_users:
    - readonly_user1
    - readonly_user2
    - api-key-user-readOnly
```

[Admin List Configuration](../authorization-and-authentication/deploy-configuration-authorization.md#admin-list-kubernetes)
:::

:::callout{intent="tip"}
Using an admin list will allow you to define your admin or read-only user/API-key pairs across all Weaviate resources. Whereas RBAC allows you more granular permissions by defining roles and assigning them to users either via API keys or OIDC.
:::

## Step 3: Scaling

- Implement horizontal scaling to ensure high availability:

```yaml
replicaCount: 3
```

- Define CPU/memory limits and requests to optimize pod efficiency.

:::accordion{title="An example of defining CPU and memory limits and cores"}
```yaml
resources:
  requests:
    cpu: "500m"
    memory: "1Gi"
  limits:
    cpu: "2"
    memory: "4Gi"
```
:::

## Step 4: Monitoring and Logging

- Use Prometheus and Grafana to collect and analyze performance metrics.
- Implement alerting for issue resolution.

:::accordion{title="An example of enabling service monitoring"}
```yaml
serviceMonitor:
  enabled: true
  interval: 30s
  scrapeTimeout: 10s
```
:::

## Step 5: Upgrades and Backups

- Use the rolling update strategy used by Helm to minimize downtime.

:::accordion{title="An example of configuring the rolling update strategy."}
```yaml
updateStrategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 0
```
:::

- Test new Weaviate versions before deploying into production.
- Implement disaster recovery procedures to ensure that data is restored quickly.

### Conclusion

Voila! You now have a deployment that is _somewhat_ ready for production. Your next step will be to complete the self-assessment and identify any gaps.

### Next Steps: [Production Readiness Self-Assessment](production-readiness.md)

## Questions and feedback

Have a question or feedback? Here's how to reach us.

::::card-grid
:::card{title="Community Forum" href="https://forum.weaviate.io/c/support" icon="messages-square"}
Ask questions and connect with other developers on our **Community forum**.
:::

:::card{title="Support" href="/guides/support-overview" icon="life-buoy"}
Weaviate Cloud user or customer? Find the right channel on the **Support page**.
:::
::::

## Related pages

- [Agents](./agents-index.md)
- [AI-assisted Weaviate code generation](./ai-assisted-vibe-coding-index.md)
- [APIs](./apis-index.md)
- [Authorization and authentication](./authorization-and-authentication-index.md)
- [Benchmarks](./benchmarks-index.md)
- [Best practices](./best-practices-index.md)
- [Client libraries](./clients-index.md)
- [Client Libraries / SDKs](./client-libraries-index.md)
- [Cloud](./cloud-index.md)
- [Cloud account management](./cloud-account-management-index.md)

# Agent Instructions

This portal answers questions programmatically. To receive a synthesized,
source-cited answer instead of crawling page by page, append the `?ask=`
query parameter to any page URL on this site:

    /guides/quickstart?ask=how+do+I+authenticate

Optional parameters:

- `&goal=<what-you-are-trying-to-do>` steers the answer toward your
  objective (e.g. `&goal=write+a+python+client`).
- `&version=<label>` scopes the answer to a mounted version when the
  portal publishes more than one.

The response is `text/markdown`: the answer followed by a `# Sources` list
of the portal pages it was grounded in. Status codes are the contract:

- `200` — the answer; `402` — the portal owner’s plan or answer credits are
  exhausted (surface this to your operator; do NOT retry); `429` — you are
  rate-limited; back off for the `Retry-After` seconds; `503` — the answer
  lane is temporarily unavailable; fall back to crawling the `.md` pages.

For the full corpus map read `llms.txt` at the site root; for the tool
surface (search + page fetch as MCP tools) see `/mcp`.
