parent
506b5055d5
commit
292058c569
|
@ -169,7 +169,10 @@ export default [
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'service-sync',
|
'service-sync',
|
||||||
'crds',
|
{
|
||||||
|
category: 'crds',
|
||||||
|
content: ['upgrade-to-crds'],
|
||||||
|
},
|
||||||
'dns',
|
'dns',
|
||||||
{
|
{
|
||||||
category: 'upgrade',
|
category: 'upgrade',
|
||||||
|
|
|
@ -1,19 +1,16 @@
|
||||||
---
|
---
|
||||||
layout: docs
|
layout: docs
|
||||||
page_title: Consul Custom Resource Definitions (Beta)
|
page_title: Consul Custom Resource Definitions
|
||||||
sidebar_title: Custom Resource Definitions <sup>(Beta)</sup>
|
sidebar_title: Custom Resource Definitions
|
||||||
description: >-
|
description: >-
|
||||||
Consul now supports managing configuration entries via Kubernetes Custom Resources.
|
Consul supports managing configuration entries via Kubernetes Custom Resources.
|
||||||
These custom resource can be used to manage the configuration for workloads
|
These custom resource can be used to manage the configuration for workloads
|
||||||
deployed within the cluster.
|
deployed within the cluster.
|
||||||
---
|
---
|
||||||
|
|
||||||
# Custom Resource Definitions <sup>(beta)</sup>
|
# Custom Resource Definitions
|
||||||
|
|
||||||
## Overview
|
-> This feature requires consul-helm >= 0.26.0, consul-k8s >= 0.20.0 and consul >= 1.8.4.
|
||||||
|
|
||||||
-> **This feature is currently in Beta.** It requires consul-helm >= 0.25.0 and
|
|
||||||
consul >= 1.8.4.
|
|
||||||
|
|
||||||
We support managing Consul [configuration entries](/docs/agent/config-entries)
|
We support managing Consul [configuration entries](/docs/agent/config-entries)
|
||||||
via Kubernetes Custom Resources. Configuration entries are used to provide
|
via Kubernetes Custom Resources. Configuration entries are used to provide
|
||||||
|
@ -35,15 +32,15 @@ The following kinds are **not** currently supported:
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Ensure you have version `0.25.0` of the helm chart:
|
Ensure you have version `0.26.0` of the helm chart:
|
||||||
|
|
||||||
```shell-session
|
```shell-session
|
||||||
$ helm search repo hashicorp/consul
|
$ helm search repo hashicorp/consul
|
||||||
NAME CHART VERSION APP VERSION DESCRIPTION
|
NAME CHART VERSION APP VERSION DESCRIPTION
|
||||||
hashicorp/consul 0.25.0 1.8.4 Official HashiCorp Consul Chart
|
hashicorp/consul 0.26.0 1.8.5 Official HashiCorp Consul Chart
|
||||||
```
|
```
|
||||||
|
|
||||||
If you don't have `0.25.0`, you will need to update your helm repository cache:
|
If you don't have `0.26.0`, you will need to update your helm repository cache:
|
||||||
|
|
||||||
```shell-session
|
```shell-session
|
||||||
$ helm repo update
|
$ helm repo update
|
||||||
|
@ -59,7 +56,7 @@ and enable the controller that acts on them:
|
||||||
global:
|
global:
|
||||||
name: consul
|
name: consul
|
||||||
image: 'consul:1.9.0-beta1' # consul >= 1.8.4 must be used
|
image: 'consul:1.9.0-beta1' # consul >= 1.8.4 must be used
|
||||||
imageK8S: 'hashicorp/consul-k8s:0.19.0'
|
imageK8S: 'hashicorp/consul-k8s:0.20.0'
|
||||||
|
|
||||||
controller:
|
controller:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
@ -72,13 +69,18 @@ Note that:
|
||||||
|
|
||||||
1. `controller.enabled: true` installs the CRDs and enables the controller.
|
1. `controller.enabled: true` installs the CRDs and enables the controller.
|
||||||
1. `global.image` must be a Consul version `>= 1.8.4`, e.g. `consul:1.8.4` or `consul:1.9.0-beta1`.
|
1. `global.image` must be a Consul version `>= 1.8.4`, e.g. `consul:1.8.4` or `consul:1.9.0-beta1`.
|
||||||
1. `global.imageK8S` must be `>= 0.19.0`
|
1. `global.imageK8S` must be `>= 0.20.0`
|
||||||
1. Configuration entries are used to configure Consul service mesh so it's also
|
1. Configuration entries are used to configure Consul service mesh so it's also
|
||||||
expected that `connectInject` will be enabled.
|
expected that `connectInject` will be enabled.
|
||||||
|
|
||||||
See [Install with Helm Chart](/docs/k8s/installation/install) for further installation
|
See [Install with Helm Chart](/docs/k8s/installation/install) for further installation
|
||||||
instructions.
|
instructions.
|
||||||
|
|
||||||
|
## Upgrading An Existing Cluster to CRDs
|
||||||
|
|
||||||
|
If you have an existing Consul cluster running on Kubernetes you may need to perform
|
||||||
|
extra steps to migrate to CRDs. See [Upgrade An Existing Cluster to CRDs](/docs/k8s/crds/upgrade-to-crds) for full instructions.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Once installed, you can use `kubectl` to create and manage Consul's configuration entries.
|
Once installed, you can use `kubectl` to create and manage Consul's configuration entries.
|
|
@ -0,0 +1,321 @@
|
||||||
|
---
|
||||||
|
layout: docs
|
||||||
|
page_title: Upgrade An Existing Cluster to CRDs
|
||||||
|
sidebar_title: Upgrade An Existing Cluster to CRDs
|
||||||
|
description: >-
|
||||||
|
Upgrade an existing cluster to use custom resources.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Upgrade An Existing Cluster to CRDs
|
||||||
|
|
||||||
|
-> This feature requires consul-helm >= 0.26.0, consul-k8s >= 0.20.0 and consul >= 1.8.4.
|
||||||
|
|
||||||
|
If you have an existing Consul cluster running on Kubernetes you may need to perform
|
||||||
|
extra steps to migrate to CRDs.
|
||||||
|
|
||||||
|
You will need to perform extra steps if you are using any of the following configurations:
|
||||||
|
|
||||||
|
- Helm config `connectInject.centralConfig.defaultProtocol`, e.g.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
connectInject:
|
||||||
|
centralConfig:
|
||||||
|
defaultProtocol: http
|
||||||
|
```
|
||||||
|
|
||||||
|
- Or setting the `consul.hashicorp.com/connect-service-protocol` annotation on your
|
||||||
|
connect pods, e.g.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
annotations:
|
||||||
|
'consul.hashicorp.com/connect-service-protocol': 'http'
|
||||||
|
```
|
||||||
|
|
||||||
|
- Or Helm config `connectInject.centralConfig.proxyDefaults`, e.g.
|
||||||
|
```yaml
|
||||||
|
connectInject:
|
||||||
|
centralConfig:
|
||||||
|
proxyDefaults: |
|
||||||
|
{
|
||||||
|
"local_connect_timeout_ms": 1000
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Why Migrate?
|
||||||
|
|
||||||
|
All of the above settings do not support modification after the initial
|
||||||
|
installation of Consul, i.e. they cannot be updated through the Helm chart.
|
||||||
|
|
||||||
|
By switching to custom resources, these settings can now be modified.
|
||||||
|
|
||||||
|
## Migration Overview
|
||||||
|
|
||||||
|
The migration process will consist of identifying which [config entries](/docs/agent/config-entries)
|
||||||
|
have been created in Consul and adding metadata to them so that they can
|
||||||
|
be managed by a custom resource instead.
|
||||||
|
|
||||||
|
## Default Protocol
|
||||||
|
|
||||||
|
If you are setting `connectInject.centralConfig.defaultProtocol` then you must
|
||||||
|
perform the follow steps to migrate to custom resources.
|
||||||
|
|
||||||
|
1. Find existing `service-defaults` config entries:
|
||||||
|
```shell-session
|
||||||
|
$ consul config list -kind service-defaults
|
||||||
|
static-client
|
||||||
|
static-server
|
||||||
|
```
|
||||||
|
1. For each entry, export the config to a file:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ consul config read -name static-client -kind service-defaults > static-client.json
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Edit the file and add the key `"Meta": {"consul.hashicorp.com/source-datacenter": "dc1"}`.
|
||||||
|
Where `dc1` is the name of your datacenter. Make sure you add any missing trailing commas required for JSON:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Kind": "service-defaults",
|
||||||
|
"Name": "static-client",
|
||||||
|
"Protocol": "http",
|
||||||
|
"MeshGateway": {},
|
||||||
|
"Expose": {},
|
||||||
|
"CreateIndex": 26,
|
||||||
|
"ModifyIndex": 26,
|
||||||
|
"Meta": { "consul.hashicorp.com/source-datacenter": "dc1" }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Write the updated config entry:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ consul config write static-client.json
|
||||||
|
Config entry written: service-defaults/static-client
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Now you're ready to create a custom resource that takes over control of this
|
||||||
|
config entry. The custom resource will look like:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: consul.hashicorp.com/v1alpha1
|
||||||
|
kind: ServiceDefaults
|
||||||
|
metadata:
|
||||||
|
name: static-client
|
||||||
|
spec:
|
||||||
|
protocol: 'http'
|
||||||
|
```
|
||||||
|
|
||||||
|
Where `metadata.name` is the name of your service and `spec.protocol` is
|
||||||
|
the default protocol you've set.
|
||||||
|
|
||||||
|
1. When you run `kubectl apply` on this file, the `ServiceDefaults` custom
|
||||||
|
resource should be created successfully and its `synced` status will be `True`:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ cat <<EOF | kubectl apply -f -
|
||||||
|
apiVersion: consul.hashicorp.com/v1alpha1
|
||||||
|
kind: ServiceDefaults
|
||||||
|
metadata:
|
||||||
|
name: static-client
|
||||||
|
spec:
|
||||||
|
protocol: "http"
|
||||||
|
EOF
|
||||||
|
servicedefaults.consul.hashicorp.com/static-client created
|
||||||
|
|
||||||
|
$ kubectl get servicedefaults static-client
|
||||||
|
NAME SYNCED AGE
|
||||||
|
static-client True 1s
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Repeat steps 2-6 for each service-defaults config entry.
|
||||||
|
|
||||||
|
1. Finally, delete your `connectInject.centralConfig.defaultProtocol` Helm config and run Helm upgrade.
|
||||||
|
|
||||||
|
From here on out, you must create a `ServiceDefaults` custom resource
|
||||||
|
for each new service to set its protocol. As there will no longer be a
|
||||||
|
default.
|
||||||
|
|
||||||
|
## Connect Service Protocol Annotation
|
||||||
|
|
||||||
|
If you are setting the `consul.hashicorp.com/connect-service-protocol` annotation on your
|
||||||
|
connect pods, then you must perform the follow steps to migrate to custom resources.
|
||||||
|
|
||||||
|
1. Find existing `service-defaults` config entries:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ consul config list -kind service-defaults
|
||||||
|
static-client
|
||||||
|
static-server
|
||||||
|
```
|
||||||
|
|
||||||
|
1. For each entry, export the config to a file:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ consul config read -name static-client -kind service-defaults > static-client.json
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Edit the file and add the key `"Meta": {"consul.hashicorp.com/source-datacenter": "dc1"}`.
|
||||||
|
Where `dc1` is the name of your datacenter. Make sure you add any missing trailing commas required for JSON:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Kind": "service-defaults",
|
||||||
|
"Name": "static-client",
|
||||||
|
"Protocol": "http",
|
||||||
|
"MeshGateway": {},
|
||||||
|
"Expose": {},
|
||||||
|
"CreateIndex": 26,
|
||||||
|
"ModifyIndex": 26,
|
||||||
|
"Meta": { "consul.hashicorp.com/source-datacenter": "dc1" }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Write the updated config entry:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ consul config write static-client.json
|
||||||
|
Config entry written: service-defaults/static-client
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Now you're ready to create a custom resource that takes over control of this
|
||||||
|
config entry. The custom resource will look like:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: consul.hashicorp.com/v1alpha1
|
||||||
|
kind: ServiceDefaults
|
||||||
|
metadata:
|
||||||
|
name: static-client
|
||||||
|
spec:
|
||||||
|
protocol: 'http'
|
||||||
|
```
|
||||||
|
|
||||||
|
Where `metadata.name` is the name of your service and `spec.protocol` is
|
||||||
|
the default protocol you've set.
|
||||||
|
|
||||||
|
1. When you run `kubectl apply` on this file, the `ServiceDefaults` custom
|
||||||
|
resource should be created successfully and its `synced` status will be `True`:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ cat <<EOF | kubectl apply -f -
|
||||||
|
apiVersion: consul.hashicorp.com/v1alpha1
|
||||||
|
kind: ServiceDefaults
|
||||||
|
metadata:
|
||||||
|
name: static-client
|
||||||
|
spec:
|
||||||
|
protocol: "http"
|
||||||
|
EOF
|
||||||
|
servicedefaults.consul.hashicorp.com/static-client created
|
||||||
|
|
||||||
|
$ kubectl get servicedefaults static-client
|
||||||
|
NAME SYNCED AGE
|
||||||
|
static-client True 1s
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Repeat steps 2-6 for each service-defaults config entry.
|
||||||
|
|
||||||
|
1. You can now remove the `consul.hashicorp.com/connect-service-protocol`
|
||||||
|
annotation from your deployments to indicate it is no longer used.
|
||||||
|
|
||||||
|
## Proxy Defaults
|
||||||
|
|
||||||
|
If you are setting `connectInject.centralConfig.proxyDefaults` then you must
|
||||||
|
perform the follow steps to migrate to custom resources.
|
||||||
|
|
||||||
|
1. Get your existing proxy-defaults config:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ consul config read -name global -kind proxy-defaults
|
||||||
|
{
|
||||||
|
"Kind": "proxy-defaults",
|
||||||
|
"Name": "global",
|
||||||
|
"Config": {
|
||||||
|
"local_connect_timeout_ms": 1000
|
||||||
|
},
|
||||||
|
"MeshGateway": {
|
||||||
|
"Mode": "local"
|
||||||
|
},
|
||||||
|
"Expose": {},
|
||||||
|
"CreateIndex": 4,
|
||||||
|
"ModifyIndex": 4
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Export to a file:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ consul config read -name global -kind proxy-defaults > proxy-defaults.json
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Edit the file and add the key `"Meta": {"consul.hashicorp.com/source-datacenter": "dc1"}`.
|
||||||
|
Where `dc1` is the name of your datacenter. Make sure you add any missing trailing commas required for JSON:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"Kind": "proxy-defaults",
|
||||||
|
"Name": "global",
|
||||||
|
"Config": {
|
||||||
|
"local_connect_timeout_ms": 1000
|
||||||
|
},
|
||||||
|
"MeshGateway": {
|
||||||
|
"Mode": "local"
|
||||||
|
},
|
||||||
|
"Expose": {},
|
||||||
|
"CreateIndex": 4,
|
||||||
|
"ModifyIndex": 4,
|
||||||
|
"Meta": { "consul.hashicorp.com/source-datacenter": "dc1" }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Write the updated config entry:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ consul config write proxy-defaults.json
|
||||||
|
Config entry written: proxy-defaults/global
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Now you're ready to create a custom resource that takes over control of this
|
||||||
|
config entry. The custom resource will look like:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: consul.hashicorp.com/v1alpha1
|
||||||
|
kind: ProxyDefaults
|
||||||
|
metadata:
|
||||||
|
name: global
|
||||||
|
spec:
|
||||||
|
config:
|
||||||
|
local_connect_timeout_ms: 1000
|
||||||
|
meshGateway:
|
||||||
|
mode: local
|
||||||
|
```
|
||||||
|
|
||||||
|
Any keys you had under `"Config"` must be set in YAML.
|
||||||
|
If you previously had `"MeshGateway"` config this must also be set now
|
||||||
|
under `spec.meshGateway`. Also, `metadata.name` must be `global`.
|
||||||
|
|
||||||
|
1. When you run `kubectl apply` on this file, the `ProxyDefaults` custom
|
||||||
|
resource should be created successfully and its `synced` status will be `True`:
|
||||||
|
|
||||||
|
```shell-session
|
||||||
|
$ cat <<EOF | kubectl apply -f -
|
||||||
|
apiVersion: consul.hashicorp.com/v1alpha1
|
||||||
|
kind: ProxyDefaults
|
||||||
|
metadata:
|
||||||
|
name: global
|
||||||
|
spec:
|
||||||
|
config:
|
||||||
|
local_connect_timeout_ms: 1000
|
||||||
|
meshGateway:
|
||||||
|
mode: local
|
||||||
|
EOF
|
||||||
|
proxydefaults.consul.hashicorp.com/global created
|
||||||
|
|
||||||
|
$ kubectl get proxydefaults global
|
||||||
|
NAME SYNCED AGE
|
||||||
|
global True 1s
|
||||||
|
```
|
||||||
|
|
||||||
|
1. Finally, delete your `connectInject.centralConfig.proxyDefaults` Helm config and run Helm upgrade.
|
||||||
|
|
||||||
|
This will have no effect because changes to this config are not picked up
|
||||||
|
by Consul after initial installation.
|
|
@ -281,7 +281,7 @@ to be stopped and restarted with the new image.
|
||||||
This can be confirmed by issuing `consul members` on one of the previous servers,
|
This can be confirmed by issuing `consul members` on one of the previous servers,
|
||||||
and ensuring that all servers are listed and are `alive`.
|
and ensuring that all servers are listed and are `alive`.
|
||||||
|
|
||||||
Decrease `updatePartition` by one and upgrade again. Continue until
|
1. Decrease `updatePartition` by one and upgrade again. Continue until
|
||||||
`updatePartition` is `0`. At this point, you may remove the
|
`updatePartition` is `0`. At this point, you may remove the
|
||||||
`updatePartition` configuration. Your server upgrade is complete.
|
`updatePartition` configuration. Your server upgrade is complete.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue