# Configure Hot warm and cold architecture in an existing openserch cluster

**URL:** https://forum.opensearch.org/t/configure-hot-warm-and-cold-architecture-in-an-existing-openserch-cluster/12284
**Category:** OpenSearch
**Tags:** configure
**Created:** [January 26, 2023, 8:22am UTC](https://forum.opensearch.org/t/configure-hot-warm-and-cold-architecture-in-an-existing-openserch-cluster/12284 "2023-01-26T08:22:25Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![narendrareddy.ala](https://avatars.discourse-cdn.com/v4/letter/n/9de0a6/32.png) [@narendrareddy.ala](https://forum.opensearch.org/u/narendrareddy.ala)
#### Post date: [January 26, 2023, 8:22am UTC](https://forum.opensearch.org/t/configure-hot-warm-and-cold-architecture-in-an-existing-openserch-cluster/12284/1 "2023-01-26T08:22:25Z")

</div>

**Versions** (relevant - OpenSearch/Dashboard/Server OS/Browser):  
opensearch: 2.3.0

**Describe the issue** :

I want to configure H/W/C on my existing cluster, I have configured k8 cluster using opster openserch operator, unfortunately I couldn’t find any helpful documentation on how to configure hot, warm and clod architecture on opensearch.

**Configuration** :

#Minimal configuration of a cluster with version 2.X of the operator.  
#Note the replacement of ‘master’ role with ‘cluster\_manager’ on line 49  
apiVersion: [opensearch.opster.io/v1](http://opensearch.opster.io/v1)  
kind: OpenSearchCluster  
metadata:  
name: opensearch  
namespace: default  
spec:  
security:  
config:  
tls:  
http:  
generate: true  
transport:  
generate: true  
perNode: true  
general:  
httpPort: 9200  
serviceName: opensearch  
version: 2.3.0  
pluginsList: [“repository-s3”]  
drainDataNodes: true  
dashboards:  
tls:  
enable: true  
generate: true  
version: 2.3.0  
enable: true  
replicas: 1  
resources:  
requests:  
memory: “1Gi”  
cpu: “1000m”  
limits:  
memory: “1Gi”  
cpu: “1000m”  
nodePools:  
- component: masters  
replicas: 3  
diskSize: “10Gi”  
resources:  
requests:  
memory: “2Gi”  
cpu: “1000m”  
limits:  
memory: “2Gi”  
cpu: “1000m”  
roles:  
- “cluster\_manager”  
- component: nodes  
replicas: 3  
diskSize: “100Gi”  
resources:  
requests:  
memory: “2Gi”  
cpu: “1000m”  
limits:  
memory: “2Gi”  
cpu: “1000m”  
roles:  
- “data”  
- component: coordinators  
replicas: 1  
diskSize: “10Gi”  
resources:  
requests:  
memory: “2Gi”  
cpu: “1000m”  
limits:  
memory: “2Gi”  
cpu: “1000m”  
roles:  
- “ingest”

**Relevant Logs or Screenshots** :

---

<div class="post-metadata">

### Author: ![vi4life](https://avatars.discourse-cdn.com/v4/letter/v/a88e4f/32.png) [@vi4life](https://forum.opensearch.org/u/vi4life)
#### Post date: [January 29, 2023, 3:07pm UTC](https://forum.opensearch.org/t/configure-hot-warm-and-cold-architecture-in-an-existing-openserch-cluster/12284/2 "2023-01-29T15:07:12Z")

</div>

Hi @narendrareddy.ala,  
you need to configure the Variable “node.attr.temp” and set it to hot, warm or cold.

> **[Cluster formation](https://opensearch.org/docs/latest/opensearch/cluster/)**
>
> Cluster formation

Then you can configure the Index Template and the ISM to move the Shards to the OpenSearch Nodes that have these Attributes.

---

<div class="post-metadata">

### Author: ![narendrareddy.ala](https://avatars.discourse-cdn.com/v4/letter/n/9de0a6/32.png) [@narendrareddy.ala](https://forum.opensearch.org/u/narendrareddy.ala)
#### Post date: [January 31, 2023, 9:48am UTC](https://forum.opensearch.org/t/configure-hot-warm-and-cold-architecture-in-an-existing-openserch-cluster/12284/3 "2023-01-31T09:48:21Z")

</div>

> [@vi4life](#):
>
> node.attr.temp

Thanks for your reply, I understood on how to apply this on a classic cluster, however I am trying to figure out on how I can add these changes in my k8 config file.  
I couldnt find any references to make this change ☹

---

<div class="post-metadata">

### Author: ![narendrareddy.ala](https://avatars.discourse-cdn.com/v4/letter/n/9de0a6/32.png) [@narendrareddy.ala](https://forum.opensearch.org/u/narendrareddy.ala)
#### Post date: [January 31, 2023, 10:51am UTC](https://forum.opensearch.org/t/configure-hot-warm-and-cold-architecture-in-an-existing-openserch-cluster/12284/4 "2023-01-31T10:51:26Z")

</div>

```auto
#Minimal configuration of a cluster with version 2.X of the operator.
#Note the replacement of 'master' role with 'cluster_manager' on line 49
apiVersion: opensearch.opster.io/v1
kind: OpenSearchCluster
metadata:
  name: opensearch-admin-stage
  namespace: default
spec:
  security:
    config:
    tls:
       http:
         generate: true
       transport:
         generate: true
         perNode: true
  general:
    httpPort: 9200
    serviceName: opensearch-admin-stage
    version: 2.3.0
    pluginsList: ["repository-s3"]
    drainDataNodes: true
  dashboards:
    tls:
      enable: true
      generate: true
    version: 2.3.0
    enable: true
    replicas: 1
    resources:
      requests:
         memory: "1Gi"
         cpu: "1000m"
      limits:
         memory: "1Gi"
         cpu: "1000m"
  nodePools:
    - component: masters
      replicas: 3
      diskSize: "10Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      roles:
        - "cluster_manager"
    - component: hot_nodes
      replicas: 3
      diskSize: "100Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      node.attr.temp: hot
      roles:
        - "data"
    - component: warm_nodes
      replicas: 3
      diskSize: "100Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      node.attr.temp: warm
      roles:
        - "data"
    - component: cold_nodes
      replicas: 3
      diskSize: "100Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      node.attr.temp: cold
      roles:
        - "data"
    - component: coordinators
      replicas: 1
      diskSize: "10Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      roles:
        - "ingest"

```

I have tried above changes and got the below error ☹

```auto
The request is invalid: patch: Invalid value: "{\"apiVersion\":\"opensearch.opster.io/v1\",\"kind\":\"OpenSearchCluster\",\"metadata\":{\"annotations\":{\"kubectl.kubernetes.io/last-applied-configuration\":\"{\\\"apiVersion\\\":\\\"opensearch.opster.io/v1\\\",\\\"kind\\\":\\\"OpenSearchCluster\\\",\\\"metadata\\\":{\\\"annotations\\\":{},\\\"name\\\":\\\"opensearch-admin-stage\\\",\\\"namespace\\\":\\\"default\\\"},\\\"spec\\\":{\\\"dashboards\\\":{\\\"enable\\\":true,\\\"replicas\\\":1,\\\"resources\\\":{\\\"limits\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"1Gi\\\"},\\\"requests\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"1Gi\\\"}},\\\"tls\\\":{\\\"enable\\\":true,\\\"generate\\\":true},\\\"version\\\":\\\"2.3.0\\\"},\\\"general\\\":{\\\"drainDataNodes\\\":true,\\\"httpPort\\\":9200,\\\"pluginsList\\\":[\\\"repository-s3\\\"],\\\"serviceName\\\":\\\"opensearch-admin-stage\\\",\\\"version\\\":\\\"2.3.0\\\"},\\\"nodePools\\\":[{\\\"component\\\":\\\"masters\\\",\\\"diskSize\\\":\\\"10Gi\\\",\\\"replicas\\\":3,\\\"resources\\\":{\\\"limits\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"},\\\"requests\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"}},\\\"roles\\\":[\\\"cluster_manager\\\"]},{\\\"component\\\":\\\"hot_nodes\\\",\\\"diskSize\\\":\\\"100Gi\\\",\\\"node.attr.temp\\\":\\\"hot\\\",\\\"replicas\\\":3,\\\"resources\\\":{\\\"limits\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"},\\\"requests\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"}},\\\"roles\\\":[\\\"data\\\"]},{\\\"component\\\":\\\"warm_nodes\\\",\\\"diskSize\\\":\\\"100Gi\\\",\\\"node.attr.temp\\\":\\\"warm\\\",\\\"replicas\\\":3,\\\"resources\\\":{\\\"limits\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"},\\\"requests\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"}},\\\"roles\\\":[\\\"data\\\"]},{\\\"component\\\":\\\"cold_nodes\\\",\\\"diskSize\\\":\\\"100Gi\\\",\\\"node.attr.temp\\\":\\\"cold\\\",\\\"replicas\\\":3,\\\"resources\\\":{\\\"limits\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"},\\\"requests\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"}},\\\"roles\\\":[\\\"data\\\"]},{\\\"component\\\":\\\"coordinators\\\",\\\"diskSize\\\":\\\"10Gi\\\",\\\"replicas\\\":1,\\\"resources\\\":{\\\"limits\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"},\\\"requests\\\":{\\\"cpu\\\":\\\"1000m\\\",\\\"memory\\\":\\\"2Gi\\\"}},\\\"roles\\\":[\\\"ingest\\\"]}],\\\"security\\\":{\\\"config\\\":null,\\\"tls\\\":{\\\"http\\\":{\\\"generate\\\":true},\\\"transport\\\":{\\\"generate\\\":true,\\\"perNode\\\":true}}}}}\\n\"},\"creationTimestamp\":\"2023-01-19T13:21:03Z\",\"finalizers\":[\"Opster\"],\"generation\":2,\"managedFields\":[{\"apiVersion\":\"opensearch.opster.io/v1\",\"fieldsType\":\"FieldsV1\",\"fieldsV1\":{\"f:metadata\":{\"f:annotations\":{\".\":{},\"f:kubectl.kubernetes.io/last-applied-configuration\":{}}},\"f:spec\":{\".\":{},\"f:dashboards\":{\".\":{},\"f:enable\":{},\"f:replicas\":{},\"f:resources\":{\".\":{},\"f:limits\":{\".\":{},\"f:memory\":{}},\"f:requests\":{\".\":{},\"f:memory\":{}}},\"f:tls\":{\".\":{},\"f:enable\":{},\"f:generate\":{}},\"f:version\":{}},\"f:general\":{\".\":{},\"f:drainDataNodes\":{},\"f:httpPort\":{},\"f:pluginsList\":{},\"f:serviceName\":{},\"f:version\":{}},\"f:security\":{\".\":{},\"f:tls\":{\".\":{},\"f:http\":{\".\":{},\"f:generate\":{}},\"f:transport\":{\".\":{},\"f:generate\":{},\"f:perNode\":{}}}}}},\"manager\":\"kubectl-client-side-apply\",\"operation\":\"Update\",\"time\":\"2023-01-19T13:21:03Z\"},{\"apiVersion\":\"opensearch.opster.io/v1\",\"fieldsType\":\"FieldsV1\",\"fieldsV1\":{\"f:metadata\":{\"f:finalizers\":{\".\":{},\"v:\\\"Opster\\\"\":{}}},\"f:spec\":{\"f:bootstrap\":{\".\":{},\"f:resources\":{}},\"f:confMgmt\":{},\"f:dashboards\":{\"f:opensearchCredentialsSecret\":{},\"f:resources\":{\"f:limits\":{\"f:cpu\":{}},\"f:requests\":{\"f:cpu\":{}}},\"f:service\":{\".\":{},\"f:type\":{}},\"f:tls\":{\"f:caSecret\":{},\"f:secret\":{}}},\"f:initHelper\":{},\"f:nodePools\":{},\"f:security\":{\"f:tls\":{\"f:http\":{\"f:caSecret\":{},\"f:secret\":{}},\"f:transport\":{\"f:caSecret\":{},\"f:secret\":{}}}}}},\"manager\":\"manager\",\"operation\":\"Update\",\"time\":\"2023-01-19T13:21:03Z\"},{\"apiVersion\":\"opensearch.opster.io/v1\",\"fieldsType\":\"FieldsV1\",\"fieldsV1\":{\"f:status\":{\".\":{},\"f:componentsStatus\":{},\"f:initialized\":{},\"f:phase\":{},\"f:version\":{}}},\"manager\":\"manager\",\"operation\":\"Update\",\"subresource\":\"status\",\"time\":\"2023-01-19T13:32:18Z\"}],\"name\":\"opensearch-admin-stage\",\"namespace\":\"default\",\"resourceVersion\":\"25076\",\"uid\":\"130bceca-ecd9-430d-a3bc-d0c774753f89\"},\"spec\":{\"bootstrap\":{\"resources\":{}},\"confMgmt\":{},\"dashboards\":{\"enable\":true,\"opensearchCredentialsSecret\":{},\"replicas\":1,\"resources\":{\"limits\":{\"cpu\":\"1000m\",\"memory\":\"1Gi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"1Gi\"}},\"service\":{\"type\":\"ClusterIP\"},\"tls\":{\"caSecret\":{},\"enable\":true,\"generate\":true,\"secret\":{}},\"version\":\"2.3.0\"},\"general\":{\"drainDataNodes\":true,\"httpPort\":9200,\"pluginsList\":[\"repository-s3\"],\"serviceName\":\"opensearch-admin-stage\",\"version\":\"2.3.0\"},\"initHelper\":{},\"nodePools\":[{\"component\":\"masters\",\"diskSize\":\"10Gi\",\"replicas\":3,\"resources\":{\"limits\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"}},\"roles\":[\"cluster_manager\"]},{\"component\":\"hot_nodes\",\"diskSize\":\"100Gi\",\"node.attr.temp\":\"hot\",\"replicas\":3,\"resources\":{\"limits\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"}},\"roles\":[\"data\"]},{\"component\":\"warm_nodes\",\"diskSize\":\"100Gi\",\"node.attr.temp\":\"warm\",\"replicas\":3,\"resources\":{\"limits\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"}},\"roles\":[\"data\"]},{\"component\":\"cold_nodes\",\"diskSize\":\"100Gi\",\"node.attr.temp\":\"cold\",\"replicas\":3,\"resources\":{\"limits\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"}},\"roles\":[\"data\"]},{\"component\":\"coordinators\",\"diskSize\":\"10Gi\",\"replicas\":1,\"resources\":{\"limits\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"},\"requests\":{\"cpu\":\"1000m\",\"memory\":\"2Gi\"}},\"roles\":[\"ingest\"]}],\"security\":{\"tls\":{\"http\":{\"caSecret\":{},\"generate\":true,\"secret\":{}},\"transport\":{\"caSecret\":{},\"generate\":true,\"perNode\":true,\"secret\":{}}}}},\"status\":{\"componentsStatus\":[{}],\"initialized\":true,\"phase\":\"RUNNING\",\"version\":\"2.3.0\"}}": strict decoding error: unknown field "spec.nodePools[1].node.attr.temp", unknown field "spec.nodePools[2].node.attr.temp", unknown field "spec.nodePools[3].node.attr.temp"

```

---

<div class="post-metadata">

### Author: ![madhukarmmallia](https://avatars.discourse-cdn.com/v4/letter/m/3e96dc/32.png) [@madhukarmmallia](https://forum.opensearch.org/u/madhukarmmallia)
#### Post date: [February 3, 2023, 6:13am UTC](https://forum.opensearch.org/t/configure-hot-warm-and-cold-architecture-in-an-existing-openserch-cluster/12284/5 "2023-02-03T06:13:37Z")

</div>

Hi @narendrareddy.ala ,

You could use the `additionalConfig` field available for nodepool components in the operator.

```auto
#Minimal configuration of a cluster with version 2.X of the operator.
#Note the replacement of 'master' role with 'cluster_manager' on line 49
apiVersion: opensearch.opster.io/v1
kind: OpenSearchCluster
metadata:
  name: opensearch-admin-stage
  namespace: default
spec:
  security:
    config:
    tls:
       http:
         generate: true
       transport:
         generate: true
         perNode: true
  general:
    httpPort: 9200
    serviceName: opensearch-admin-stage
    version: 2.3.0
    pluginsList: ["repository-s3"]
    drainDataNodes: true
  dashboards:
    tls:
      enable: true
      generate: true
    version: 2.3.0
    enable: true
    replicas: 1
    resources:
      requests:
         memory: "1Gi"
         cpu: "1000m"
      limits:
         memory: "1Gi"
         cpu: "1000m"
  nodePools:
    - component: masters
      replicas: 3
      diskSize: "10Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      roles:
        - "cluster_manager"
    - component: hot_nodes
      replicas: 3
      diskSize: "100Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      additionalConfig:
        node.attr.temp: hot
      roles:
        - "data"
    - component: warm_nodes
      replicas: 3
      diskSize: "100Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      additionalConfig:
        node.attr.temp: warm
      roles:
        - "data"
    - component: cold_nodes
      replicas: 3
      diskSize: "100Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      additionalConfig:
        node.attr.temp: cold
      roles:
        - "data"
    - component: coordinators
      replicas: 1
      diskSize: "10Gi"
      resources:
         requests:
            memory: "2Gi"
            cpu: "1000m"
         limits:
            memory: "2Gi"
            cpu: "1000m"
      roles:
        - "ingest"

```

I hope this helps.
