Кластеры

Прежде чем перейти к управлению клиентскими кластерами, авторизуйтесь в платформе.

Получить список кластеров

Команда
curl -k -s -L --request GET $BACKENDPOINT/api/v1/clusters --header "Authorization: Bearer $token" | jq -r
Пример ответа в формате json
   {
    "items": [
        {
            "id": "shturval-new-cluster",
            "clusterName": "shturval-new-cluster",
            "clusterType": "platform",
            "annotations": [
                {
                  "key": "shturval.tech/clustername",
                  "value": "shturval-new-cluster"
                }
            ],
            "providerType": "capov",
            "providerConfigID": "capov-test",
            "apiEndpoint": "10.20.10.20:5555",
            "networks": [
                {
                    "type": "Service CIDR",
                    "network": "10.96.0.0/12",
                    "netmask": ""
                },
                {
                    "type": "Pod CIDR",
                    "network": "172.16.0.0/16",
                    "netmask": ""
                }
            ],
            "ingress": "*.shturval-new-cluster.ip-10-20-10-21.shturval.link",
            "argoCdIngress": "",
            "secure": false,
            "phase": "Provisioned",
            "conditions": [
                {
                    "type": "Ready",
                    "status": "True",
                    "lastTransitionTime": "2024-05-27T07:44:37Z"
                },
                {
                    "type": "ControlPlaneInitialized",
                    "status": "True",
                    "lastTransitionTime": "2024-05-27T07:44:37Z"
                },
                {
                    "type": "ControlPlaneReady",
                    "status": "True",
                    "lastTransitionTime": "2024-05-27T07:44:37Z"
                },
                {
                    "type": "InfrastructureReady",
                    "status": "True",
                    "lastTransitionTime": "2024-05-27T07:41:26Z"
                }
            ],
            "controlplaneNodesCount": 1,
            "controlplaneHealthyNodesCount": 3,
            "workersGroups": [
                {
                    "groupName": "shturval-new-cluster-default",
                    "workersScale": null,
                    "workersCount": 3
                },
                {
                    "groupName": "shturval-new-cluster-infra",
                    "workersScale": null,
                    "workersCount": 0
                }
            ],          
            "UpdateReady": true
        }
    ],
    "count": 1
}

Создание кластера с провайдером vSphere

Пример команды создания клиентского кластера с перечнем включаемых сервисов и самоподписным сертификатом
export CLUSTERNAME="capvs-new-cluster"
export PROVIDERTEMPLATENAME="capvs-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capvs
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "10.20.30.40",
    "clusterName": "$CLUSTERNAME",
    "controlPlaneNodesCount": 1,
    "disabledServices": [],
    "enabledServices": ["shturval-cert-manager-crds","shturval-vip-provider","shturval-update-crds","shturval-monitoring-crds","shturval-local-csi","shturval-policy-manager-crds","shturval-vip","shturval-node-config-crds","shturval-services","shturval-services-crds","shturval-caching-dns","shturval-cert-manager","shturval-update","shturval-networking","shturval-node-config"],
    "externalKubeAPILB": false,
    "externalingresslb": false,
    "ingress": "",
    "ingressvip": "10.20.30.42",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "mgmtCluster": false
  },
  "provider": {
    "controlplaneNodeConfig": {
      "capvsNodeConfig": {
        "diskGiB": 60,
        "memoryMiB": 1200,
        "numCPUs": 4
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "enableCSI": false,
    "identityName": "$PROVIDERTEMPLATENAME",
    "workerNodeConfigs": [
              {
        "capvsNodeConfig": {
          "diskGiB": 60,
          "memoryMiB": 1200,
          "numCPUs": 4
        },
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3
              },
      {
        "capvsNodeConfig": {
          "diskGiB": 60,
          "memoryMiB": 1200,
          "numCPUs": 4
        },
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 3
      }
    ]
  }
}
EOF
) | jq -r
Пример команды создания клиентского кластера только с критическими сервисами
export CLUSTERNAME="capvs-new-cluster"
export PROVIDERTEMPLATENAME="capvs-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capvs
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "10.20.30.40",
    "clusterName": "$CLUSTERNAME",
    "controlPlaneNodesCount": 1,
    "disabledServices": ["all"],
    "externalKubeAPILB": false,
    "externalingresslb": false,
    "ingress": "",
    "ingressvip": "10.20.30.42",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "mgmtCluster": false
  },
  "provider": {
    "enableCSI": false,
    "identityName": "$PROVIDERTEMPLATENAME",
    "controlplaneNodeConfig": {
      "capvsNodeConfig": {
        "diskGiB": 60,
        "memoryMiB": 1200,
        "numCPUs": 4
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "workerNodeConfigs": [
              {
        "capvsNodeConfig": {
          "diskGiB": 60,
          "memoryMiB": 1200,
          "numCPUs": 4
        },
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3
              },
      {
        "capvsNodeConfig": {
          "diskGiB": 60,
          "memoryMiB": 1200,
          "numCPUs": 4
        },
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 0
      }
    ]
  }
}
EOF
) | jq -r
Пример ответа в формате json при успешном создании кластера с провайдером vSphere
{
    "cluster": {
        "clusterName": "capvs-new-cluster",
        "clusterConfigProfileName": "",
        "apiEndpoint": "10.20.30.40",
        "ingress": "",
        "ingressvip": "10.20.30.42",
        "externalingresslb": false,
        "secure": false,
        "externalKubeAPILB": false,
        "controlPlaneNodesCount": 1,
        "podSubnet": "172.16.0.0/16",
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.12.0",
        "enabledServices": [ "shturval-snapshotter-crds", "shturval-vip", "shturval-caching-dns", "shturval-ingress-controller", "shturval-monitoring-crds", "shturval-policy-manager-crds", "shturval-cert-manager", "shturval-services-crds", "shturval-cert-manager-crds", "shturval-update-crds", "shturval-node-config-crds", "shturval-trust-manager", "shturval-networking", "shturval-node-config", "shturval-services", "shturval-vip-provider", "shturval-update", "shturval-local-csi", "shturval-snapshotter", "shturval-metrics-collector-crds", "shturval-trust-manager-crds"
        ],
        "disabledServices": [ "shturval-rollouts", "shturval-backup-crds", "shturval-cd-crds", "shturval-rollouts-crds", "shturval-cert-expiration", "shturval-scanner-crds", "shturval-scanner", "shturval-descheduler", "shturval-policy-manager", "shturval-metrics-collector", "shturval-cd", "shturval-log-collector", "shturval-log-collector-crds", "shturval-backup"
        ],
        "ingressCert": "",
        "ingressKey": "",
        "cacert": "",
        "cakey": "",
        "acmeRootCert": "",
        "acmeEmail": "",
        "ACMEURL": "",
        "mgmtCluster": false
    },
    "provider": {
        "identityName": "capvs-template-name",
        "enableCSI": false,
        "controlplaneNodeConfig": {
            "nodeConfig": {
                "groupName": "control-plane",
                "roles": [
                    {
                        "name": "node-role.kubernetes.io/control-plane"
                    }
                ]
            },
            "capvsNodeConfig": {
                "numCPUs": 4,
                "memoryMiB": 1200,
                "diskGiB": 60
            }
        },
        "workerNodeConfigs": [
            {
                "nodeConfig": {
                    "groupName": "default",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/workers"
                        }
                    ]
                },
                "capvsNodeConfig": {
                    "numCPUs": 4,
                    "memoryMiB": 1200,
                    "diskGiB": 60
                },
                "workersScale": null,
                "workersCount": 0
            },
            {
                "nodeConfig": {
                    "groupName": "infra",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/infra"
                        }
                    ]
                },
                "capvsNodeConfig": {
                    "numCPUs": 4,
                    "memoryMiB": 1200,
                    "diskGiB": 60
                },
                "workersScale": null,
                "workersCount": 0
            }
        ]
    },
    "CreatedByUser": "username"
}

Создание кластера с провайдером oVirt

Пример команды создания клиентского кластера с перечнем включаемых сервисов и ACME сертификатом
export CLUSTERNAME="capov-new-cluster"
export PROVIDERTEMPLATENAME="capov-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capov
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "10.20.30.40",
    "clusterName": "$CLUSTERNAME",
    "controlPlaneNodesCount": 1,
    "disabledServices": [],
    "enabledServices": ["shturval-cert-manager-crds","shturval-vip-provider","shturval-update-crds","shturval-monitoring-crds","shturval-local-csi","shturval-policy-manager-crds","shturval-vip","shturval-node-config-crds","shturval-services","shturval-services-crds","shturval-caching-dns","shturval-cert-manager","shturval-update","shturval-networking","shturval-node-config" 
    ],
    "externalKubeAPILB": false,
    "externalingresslb": false,
    "ingress": "",
    "ingressvip": "10.20.30.42",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "acmeRootCert": "acmeRootCert",
    "ACMEURL": "https://issuer.ip-xx-xx-xx-xx.shturval.link:9443/acme/acme/directory",
    "mgmtCluster": false
  },
  "provider": {
    "controlplaneNodeConfig": {
      "capvsNodeConfig": {
        "cpu": {
          "cores": 4,
          "sockets": 1,
          "threads": 1
        },
        "memory": {
          "sizeMB": 1200
        },
        "osDiskSizeGB": 60
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "enableCSI": false,
    "providerName": "$PROVIDERTEMPLATENAME",
    "workerNodeConfigs": [
      {
        "capovNodeConfig": {
         "cpu": {
            "cores": 4,
            "sockets": 1,
            "threads": 1
          },
          "memory": {
            "sizeMB": 1200
          },
          "osDiskSizeGB": 60
        },
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3
      },
           {
        "capovNodeConfig": {
         "cpu": {
            "cores": 4,
            "sockets": 1,
            "threads": 1
          },
          "memory": {
            "sizeMB": 1200
          },
          "osDiskSizeGB": 60
        },
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 3
      }
    ]
  }
}
EOF
) | jq -r
Пример команды создания клиентского кластера только с критическими сервисами
export CLUSTERNAME="capov-new-cluster"
export PROVIDERTEMPLATENAME="capov-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capov
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "10.20.30.40",
    "clusterName": "$CLUSTERNAME",
    "controlPlaneNodesCount": 1,
    "disabledServices": ["all"],
    "externalKubeAPILB": false,
    "externalingresslb": false,
    "ingress": "",
    "ingressvip": "10.20.30.42",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "mgmtCluster": false
  },
  "provider": {
    "controlplaneNodeConfig": {
      "capvsNodeConfig": {
        "cpu": {
          "cores": 4,
          "sockets": 1,
          "threads": 1
        },
        "memory": {
          "sizeMB": 1200
        },
        "osDiskSizeGB": 60
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "enableCSI": false,
    "providerName": "$PROVIDERTEMPLATENAME",
    "workerNodeConfigs": [
      {
        "capovNodeConfig": {
         "cpu": {
            "cores": 4,
            "sockets": 1,
            "threads": 1
          },
          "memory": {
            "sizeMB": 1200
          },
          "osDiskSizeGB": 60
        },
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3
      },
           {
        "capovNodeConfig": {
         "cpu": {
            "cores": 4,
            "sockets": 1,
            "threads": 1
          },
          "memory": {
            "sizeMB": 1200
          },
          "osDiskSizeGB": 60
        },
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 3
      }
    ]
  }
}
EOF
) | jq -r
Пример ответа в формате json при успешном создании кластера с провайдером oVirt
{
    "cluster": {
        "clusterName": "capov-new-cluster",
        "clusterConfigProfileName": "",
        "apiEndpoint": "10.20.30.40",
        "ingress": "",
        "ingressvip": "10.20.30.42",
        "externalingresslb": false,
        "secure": false,
        "externalKubeAPILB": false,
        "controlPlaneNodesCount": 1,
        "podSubnet": "172.16.0.0/16",
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.12.0",
        "enabledServices": [ "shturval-snapshotter-crds", "shturval-vip", "shturval-caching-dns", "shturval-ingress-controller", "shturval-monitoring-crds", "shturval-policy-manager-crds", "shturval-cert-manager", "shturval-services-crds", "shturval-cert-manager-crds", "shturval-update-crds", "shturval-node-config-crds", "shturval-trust-manager", "shturval-networking", "shturval-node-config", "shturval-services", "shturval-vip-provider", "shturval-update", "shturval-local-csi", "shturval-snapshotter", "shturval-metrics-collector-crds", "shturval-trust-manager-crds"
        ],
        "disabledServices": [ "shturval-rollouts", "shturval-backup-crds", "shturval-cd-crds", "shturval-rollouts-crds", "shturval-cert-expiration", "shturval-scanner-crds", "shturval-scanner", "shturval-descheduler", "shturval-policy-manager", "shturval-metrics-collector", "shturval-cd", "shturval-log-collector", "shturval-log-collector-crds", "shturval-backup"
        ],
        "ingressCert": "",
        "ingressKey": "",
        "cacert": "",
        "cakey": "",
        "acmeRootCert": "",
        "acmeEmail": "",
        "ACMEURL": "",
        "mgmtCluster": false
    },
    "provider": {
        "providerName": "capov-template-name",
        "controlplaneNodeConfig": {
            "nodeConfig": {
                "groupName": "control-plane",
                "roles": [
                    {
                        "name": "node-role.kubernetes.io/control-plane"
                    }
                ]
            },
            "capovNodeConfig": {
                "cpu": {
                    "cores": 4,
                    "sockets": 1,
                    "threads": 1
                },
                "memory": {
                    "sizeMB": 1200,
                    "guaranteedMB": 0
                },
                "osDiskSizeGB": 60
            }
        },
        "enableCSI": false,
        "workerNodeConfigs": [
            {
                "nodeConfig": {
                    "groupName": "default",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/workers"
                        }
                    ]
                },
                "capovNodeConfig": {
                    "cpu": {
                        "cores": 4,
                        "sockets": 1,
                        "threads": 1
                    },
                    "memory": {
                        "sizeMB": 1200,
                        "guaranteedMB": 0
                    },
                    "osDiskSizeGB": 60
                },
                "workersScale": null,
                "workersCount": 1
            },
            {
                "nodeConfig": {
                    "groupName": "infra",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/infra"
                        }
                    ]
                },
                "capovNodeConfig": {
                    "cpu": {
                        "cores": 4,
                        "sockets": 1,
                        "threads": 1
                    },
                    "memory": {
                        "sizeMB": 1200,
                        "guaranteedMB": 0
                    },
                    "osDiskSizeGB": 60
                },
                "workersScale": null,
                "workersCount": 1
            }
        ]
    },
    "CreatedByUser": "username"
}

Создание кластера с провайдером Shturval v2

Пример команды создания клиентского кластера с перечнем включаемых сервисов и ACME сертификатом
export CLUSTERNAME="capsmv2-new-cluster"
export PROVIDERTEMPLATENAME="capsmv2-template-name"

curl -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capsmv2
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "10.20.30.40",
    "clusterName": "$CLUSTERNAME",
    "disabledServices": [],
    "enabledServices": ["shturval-local-csi","shturval-services","shturval-update","shturval-vip","shturval-monitoring-crds","shturval-caching-dns","shturval-node-config","shturval-services-crds","shturval-cert-manager-crds","shturval-cert-manager","shturval-node-config-crds","shturval-policy-manager-crds","shturval-networking","shturval-vip-provider","shturval-update-crds"
    ],
    "externalKubeAPILB": false,
    "externalingresslb": false,
    "ingress": "",
    "controlPlaneNodesCount": 1,
    "ingressvip": "10.20.30.42",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "acmeRootCert": "acmeRootCert",
    "ACMEURL": "https://issuer.ip-xx-xx-xx-xx.shturval.link:9443/acme/directory",
    "mgmtCluster": false
  },
  "provider": {
    "controlPlaneNodeConfig": {
      "controlPlaneSelector": {
        "matchExpressions": [],
        "matchLabels": {
          "role": "controlplane"
        }
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "name": "$PROVIDERTEMPLATENAME",
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3,
        "workerSelector": {
          "matchExpressions": [],
          "matchLabels": {
            "role": "workers"
          }
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 0,
        "workerSelector": {
          "matchExpressions": [],
          "matchLabels": {
            "role": "infra"
          }
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример команды создания клиентского кластера только с критическими сервисами
export CLUSTERNAME="capsmv2-new-cluster"
export PROVIDERTEMPLATENAME="capsmv2-template-name"

curl -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capsmv2
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "10.20.30.40",
    "clusterName": "$CLUSTERNAME",
    "disabledServices": ["all"],
    "externalKubeAPILB": false,
    "externalingresslb": false,
    "ingress": "",
    "controlPlaneNodesCount": 1,
    "ingressvip": "10.20.30.42",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "mgmtCluster": false
  },
  "provider": {
    "controlPlaneNodeConfig": {
      "controlPlaneSelector": {
        "matchExpressions": [],
        "matchLabels": {
          "role": "controlplane"
        }
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "name": "$PROVIDERTEMPLATENAME",
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3,
        "workerSelector": {
          "matchExpressions": [],
          "matchLabels": {
            "role": "workers"
          }
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 0,
        "workerSelector": {
          "matchExpressions": [],
          "matchLabels": {
            "role": "infra"
          }
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример ответа в формате json при успешном создании кластера с провайдером Shturval v2
{
    "cluster": {
        "clusterName": "capsmv2-new-cluster",
        "clusterConfigProfileName": "",
        "apiEndpoint": "10.20.30.40",
        "ingress": "",
        "ingressvip": "10.20.30.42",
        "externalingresslb": false,
        "secure": false,
        "externalKubeAPILB": false,
        "controlPlaneNodesCount": 1,
        "podSubnet": "172.16.0.0/16",
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.12.0",
        "enabledServices": [ "shturval-snapshotter-crds", "shturval-vip", "shturval-caching-dns", "shturval-ingress-controller", "shturval-monitoring-crds", "shturval-policy-manager-crds", "shturval-cert-manager", "shturval-services-crds", "shturval-cert-manager-crds", "shturval-update-crds", "shturval-node-config-crds", "shturval-trust-manager", "shturval-networking", "shturval-node-config", "shturval-services", "shturval-vip-provider", "shturval-update", "shturval-local-csi", "shturval-snapshotter", "shturval-metrics-collector-crds", "shturval-trust-manager-crds"
        ],
        "disabledServices": [ "shturval-rollouts", "shturval-backup-crds", "shturval-cd-crds", "shturval-rollouts-crds", "shturval-cert-expiration", "shturval-scanner-crds", "shturval-scanner", "shturval-descheduler", "shturval-policy-manager", "shturval-metrics-collector", "shturval-cd", "shturval-log-collector", "shturval-log-collector-crds", "shturval-backup"
        ],
        "ingressCert": "",
        "ingressKey": "",
        "cacert": "",
        "cakey": "",
        "acmeRootCert": "",
        "acmeEmail": "",
        "ACMEURL": "",
        "mgmtCluster": false
    },
    "provider": {
        "name": "capsmv2-template-cluster",
        "controlPlaneNodeConfig": {
            "nodeConfig": {
                "groupName": "control-plane",
                "roles": [
                    {
                        "name": "node-role.kubernetes.io/control-plane"
                    }
                ]
            },
            "controlPlaneSelector": {
                "matchLabels": {
                    "role": "controlplane"
                }
            }
        },
        "workerNodeConfigs": [
            {
                "nodeConfig": {
                    "groupName": "default",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/workers"
                        }
                    ]
                },
                "workersCount": 3,
                "workersScale": null,
                "workerSelector": {
                    "matchLabels": {
                        "role": "workers"
                    }
                }
            },
            {
                "nodeConfig": {
                    "groupName": "infra",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/infra"
                        }
                    ]
                },
                "workersCount": 0,
                "workersScale": null,
                "workerSelector": {
                    "matchLabels": {
                        "role": "infra"
                    }
                }
            }
        ]
    },
    "createdByUser": "username"
}

Создание кластера с провайдером OpenStack

Пример команды создания клиентского кластера с перечнем включаемых сервисов и промежуточным сертификатом
export CLUSTERNAME="capos-new-cluster"
export PROVIDERTEMPLATENAME="capos-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capos
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "clusterName": "$CLUSTERNAME",
    "disabledServices": [],
    "enabledServices": [ "shturval-monitoring-crds","shturval-vip","shturval-services-crds","shturval-caching-dns","shturval-cert-manager","shturval-update-crds","shturval-services","shturval-update","shturval-networking","shturval-node-config-crds","shturval-node-config","shturval-cert-manager-crds","shturval-vip-provider","shturval-local-csi","shturval-policy-manager-crds"
    ],
    "externalKubeAPILB": true,
    "externalingresslb": true,
    "ingress": "",
    "controlPlaneNodesCount": 1,
    "ingressvip": "",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "cacert": "cacert",
    "cakey": "cakey",
    "mgmtCluster": false
  },
  "provider": {
    "controlplaneNodeConfig": {
      "caposNodeConfig": {
        "openstackFlavorName": "STD3-4-8",
        "volumeType": "ceph-hdd",
        "volumeSize": 60,
        "availabilityZone": "ME1"
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "providerName": "$PROVIDERTEMPLATENAME",
    "enableCSI": false,
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3,
        "caposNodeConfig": {
          "openstackFlavorName": "$OPENSTACKFLAVORNAME",
          "volumeSize": 60,
          "volumeType": "ceph-hdd",
          "availabilityZone": "ME1"
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 0,
        "caposNodeConfig": {
          "openstackFlavorName": "$OPENSTACKFLAVORNAME",
          "volumeSize": 60,
          "volumeType": "ceph-hdd",
          "availabilityZone": "ME1"
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример команды создания клиентского кластера только с критическими сервисами
export CLUSTERNAME="capos-new-cluster"
export PROVIDERTEMPLATENAME="capos-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capos
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "clusterName": "$CLUSTERNAME",
    "disabledServices": ["all"],
    "externalKubeAPILB": true,
    "externalingresslb": true,
    "ingress": "",
    "controlPlaneNodesCount": 1,
    "ingressvip": "",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "mgmtCluster": false
  },
  "provider": {
    "controlplaneNodeConfig": {
      "caposNodeConfig": {
        "openstackFlavorName": "STD3-4-8",
        "volumeType": "ceph-hdd",
        "volumeSize": 60,
        "availabilityZone": "ME1"
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "providerName": "$PROVIDERTEMPLATENAME",
    "enableCSI": false,
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3,
        "caposNodeConfig": {
          "openstackFlavorName": "$OPENSTACKFLAVORNAME",
          "volumeSize": 60,
          "volumeType": "ceph-hdd",
          "availabilityZone": "ME1"
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 0,
        "caposNodeConfig": {
          "openstackFlavorName": "$OPENSTACKFLAVORNAME",
          "volumeSize": 60,
          "volumeType": "ceph-hdd",
          "availabilityZone": "ME1"
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример ответа в формате json при успешном создании кластера с провайдером OpenStack

{
    "cluster": {
        "clusterName": "capos-new-cluster",
        "clusterConfigProfileName": "",
        "apiEndpoint": "",
        "ingress": "",
        "ingressvip": "",
        "externalingresslb": true,
        "secure": false,
        "externalKubeAPILB": true,
        "controlPlaneNodesCount": 1,
        "podSubnet": "172.16.0.0/16",
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.12.0",
        "enabledServices": [ "shturval-snapshotter-crds", "shturval-vip", "shturval-caching-dns", "shturval-ingress-controller", "shturval-monitoring-crds", "shturval-policy-manager-crds", "shturval-cert-manager", "shturval-services-crds", "shturval-cert-manager-crds", "shturval-update-crds", "shturval-node-config-crds", "shturval-trust-manager", "shturval-networking", "shturval-node-config", "shturval-services", "shturval-vip-provider", "shturval-update", "shturval-local-csi", "shturval-snapshotter", "shturval-metrics-collector-crds", "shturval-trust-manager-crds"
        ],
        "disabledServices": [ "shturval-rollouts", "shturval-backup-crds", "shturval-cd-crds", "shturval-rollouts-crds", "shturval-cert-expiration", "shturval-scanner-crds", "shturval-scanner", "shturval-descheduler", "shturval-policy-manager", "shturval-metrics-collector", "shturval-cd", "shturval-log-collector", "shturval-log-collector-crds", "shturval-backup"
        ],
        "ingressCert": "",
        "ingressKey": "",
        "cacert": "cacert",
        "cakey": "cakey",
        "acmeRootCert": "",
        "acmeEmail": "",
        "ACMEURL": "",
        "mgmtCluster": false
    },
    "provider": {
        "providerName": "capos-template-name",
        "controlplaneNodeConfig": {
            "nodeConfig": {
                "groupName": "control-plane",
                "roles": [
                    {
                        "name": "node-role.kubernetes.io/control-plane"
                    }
                ]
            },
            "caposNodeConfig": {
                "openstackFlavorName": "STD3-4-8",
                "volumeSize": 60,
                "volumeType": "ceph-hdd",
                "availabilityZone": "ME1"
            }
        },
        "workerNodeConfigs": [
            {
                "nodeConfig": {
                    "groupName": "default",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/workers"
                        }
                    ]
                },
                "workersCount": 3,
                "workersScale": null,
                "caposNodeConfig": {
                    "openstackFlavorName": "STD2-4-8",
                    "volumeSize": 60,
                    "volumeType": "ceph-hdd",
                    "availabilityZone": "ME1"
                }
            },
            {
                "nodeConfig": {
                    "groupName": "infra",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/infra"
                        }
                    ]
                },
                "workersCount": 0,
                "workersScale": null,
                "caposNodeConfig": {
                    "openstackFlavorName": "STD2-8-8",
                    "volumeSize": 60,
                    "volumeType": "ceph-ssd",
                    "availabilityZone": "ME1"
                }
            }
        ],
        "enableCSI": false
    },
    "CreatedByUser": "username"
}

Создание кластера с провайдером Basis Dynamix

Пример команды создания клиентского кластера с перечнем включаемых сервисов и самоподписным сертификатом
export CLUSTERNAME="capbd-new-cluster"
export PROVIDERTEMPLATENAME="capbd-template-name"
export NETTYPE="net-type"
export NETWORKNAME="networkname"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capbd
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "10.20.30.40",
    "clusterName": "$CLUSTERNAME",
    "disabledServices": [],
    "enabledServices": ["shturval-node-config-crds","shturval-backup","shturval-services-crds","shturval-services","shturval-rollouts-crds","shturval-descheduler","shturval-vip-provider","shturval-ingress-controller","shturval-policy-manager-crds","shturval-networking","shturval-metrics-collector","shturval-monitoring-crds","shturval-scanner","shturval-caching-dns","shturval-vip","shturval-node-config","shturval-cert-expiration","shturval-update-crds","shturval-backup-crds","shturval-cd-crds","shturval-cert-manager-crds","shturval-cert-manager","shturval-local-csi","shturval-update","shturval-scanner-crds","shturval-policy-manager"
    ],
    "externalKubeAPILB": false,
    "externalingresslb": true,
    "ingress": "",
    "controlPlaneNodesCount": 1,
    "ingressvip": "10.20.30.41",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "mgmtCluster": false
  },
  "provider": {
    "controlplaneNodeConfig": {
      "capbdNodeConfig": {
        "cpu": 4,
        "memory": 12000,
        "networkInterfaces": [{
            "netType": "$NETTYPE",
            "networkName": "$NETWORKNAME"
          }],
        "osDiskSizeGB": 60
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "providerName": "$PROVIDERTEMPLATENAME",
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3,
        "capbdNodeConfig": {
          "cpu": 4,
          "memory": 12000,
          "osDiskSizeGB": 60
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 3,
        "capbdNodeConfig": {
          "cpu": 4,
          "memory": 12000,
          "osDiskSizeGB": 60
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример команды создания клиентского кластера только с критическими сервисами
export CLUSTERNAME="capbd-new-cluster"
export PROVIDERTEMPLATENAME="capbd-template-name"
export NETTYPE="net-type"
export NETWORKNAME="networkname"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capbd
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "10.20.30.40",
    "clusterName": "$CLUSTERNAME",
    "disabledServices": ["all"],
    "externalKubeAPILB": false,
    "externalingresslb": true,
    "ingress": "",
    "controlPlaneNodesCount": 1,
    "ingressvip": "10.20.30.41",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "mgmtCluster": false
  },
  "provider": {
    "controlplaneNodeConfig": {
      "capbdNodeConfig": {
        "cpu": 4,
        "memory": 12000,
        "networkInterfaces": [{
            "netType": "$NETTYPE",
            "networkName": "$NETWORKNAME"
          }],
        "osDiskSizeGB": 60
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "providerName": "$PROVIDERTEMPLATENAME",
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 3,
        "capbdNodeConfig": {
          "cpu": 4,
          "memory": 12000,
          "osDiskSizeGB": 60
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 3,
        "capbdNodeConfig": {
          "cpu": 4,
          "memory": 12000,
          "osDiskSizeGB": 60
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример ответа в формате json при успешном создании кластера с провайдером Basis Dynamix
{
    "id": "capbd-new-cluster",
    "clusterName": "capbd-new-cluster",
    "annotations": null,
    "providerType": "capbd",
    "providerConfigID": "capbd-template-name",
    "apiEndpoint": "10.20.30.40",
    "networks": [
        {
            "type": "PodSubnet",
            "network": "172.16.0.0/16",
            "netmask": ""
        },
        {
            "type": "ServiceSubnet",
            "network": "10.96.0.0/12",
            "netmask": ""
        }
    ],
    "ingress": "*.capbd-new-cluster.ip-10-20-30-41.shturval.link",
    "secure": false,
    "phase": "Pending",
    "conditions": null,
    "workersGroups": null
}

Создание кластера с провайдером Yandex Cloud

Пример команды создания клиентского кластера с перечнем включаемых сервисов
export CLUSTERNAME="capyc-new-cluster"
export PROVIDERTEMPLATENAME="capyc-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capyc
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "clusterName": "$CLUSTERNAME",
    "disabledServices": [],
    "enabledServices": ["shturval-cert-manager-crds","shturval-vip-provider","shturval-update-crds","shturval-monitoring-crds","shturval-local-csi","shturval-policy-manager-crds","shturval-vip","shturval-node-config-crds","shturval-services","shturval-services-crds","shturval-caching-dns","shturval-cert-manager","shturval-update","shturval-networking","shturval-node-config"],
    "externalKubeAPILB": true,
    "externalingresslb": true,
    "ingress": "cluster.shturval.link",
    "controlPlaneNodesCount": 1,
    "ingressvip": "",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "ingressCert": "",
    "ingressKey": "",
    "cacert": "",
    "cakey": "",
    "acmeRootCert": "",
    "acmeEmail": "",
    "ACMEURL": "",
    "mgmtCluster": false
  },
  "provider": {
    "controlplaneNodeConfig": {
      "capycNodeConfig": {
        "cpuCores": 4,
        "memorySize": "800Mi",
        "platformID": "standard",
        "volumeType": "network-ssd",
        "volumeSize": "40Gi"
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "providerName": "$PROVIDERTEMPLATENAME",
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 1,
        "capycNodeConfig": {
          "platformID": "standard",
          "volumeType": "network-ssd",
          "volumeSize": "40Gi",
          "memorySize": "800Mi",
          "cpuCores": 4
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 0,
        "capycNodeConfig": {
          "platformID": "standard",
          "volumeType": "network-ssd",
          "volumeSize": "40Gi",
          "memorySize": "800Mi",
          "cpuCores": 4
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример команды создания клиентского кластера только с критическими сервисами
export CLUSTERNAME="capyc-new-cluster"
export PROVIDERTEMPLATENAME="capyc-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capyc
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "clusterName": "$CLUSTERNAME",
    "disabledServices": ["all"],
    "externalKubeAPILB": true,
    "externalingresslb": true,
    "ingress": "cluster.shturval.link",
    "controlPlaneNodesCount": 1,
    "ingressvip": "",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "cacert": "cacert",
    "cakey": "cakey",
    "mgmtCluster": false
  },
  "provider": {
    "controlplaneNodeConfig": {
      "capycNodeConfig": {
        "cpuCores": 4,
        "memorySize": "800Mi",
        "platformID": "standard",
        "volumeType": "network-ssd",
        "volumeSize": "40Gi"
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "providerName": "$PROVIDERTEMPLATENAME",
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 1,
        "capycNodeConfig": {
          "platformID": "standard",
          "volumeType": "network-ssd",
          "volumeSize": "40Gi",
          "memorySize": "800Mi",
          "cpuCores": 4
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 0,
        "capycNodeConfig": {
          "platformID": "standard",
          "volumeType": "network-ssd",
          "volumeSize": "40Gi",
          "memorySize": "800Mi",
          "cpuCores": 4
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример ответа в формате json при успешном создании кластера с провайдером Yandex Cloud
    {
    "cluster": {
        "clusterName": "capyc-new-cluster",
        "apiEndpoint": "",
        "ingress": "*.cluster.shturval.link",
        "ingressvip": "",
        "externalingresslb": true,
        "secure": false,
        "externalKubeAPILB": true,
        "controlPlaneNodesCount": 1,
        "podSubnet": "172.16.0.0/16",
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.12.0",
        "disabledServices": [],
        "enabledServices": ["shturval-cert-manager-crds","shturval-vip-provider","shturval-update-crds","shturval-monitoring-crds","shturval-local-csi","shturval-policy-manager-crds","shturval-vip","shturval-node-config-crds","shturval-services","shturval-services-crds","shturval-caching-dns","shturval-cert-manager","shturval-update","shturval-networking","shturval-node-config"],
        "ingressCert": "",
        "ingressKey": "",
        "cacert": "",
        "cakey": "",
        "acmeRootCert": "",
        "acmeEmail": "",
        "ACMEURL": "",
        "mgmtCluster": false
    },
    "provider": {
        "providerName": "capyc-template-name",
        "controlplaneNodeConfig": {
            "nodeConfig": {
                "groupName": "control-plane",
                "roles": [
                    {
                        "name": "node-role.kubernetes.io/control-plane"
                    }
                ]
            },
            "capycNodeConfig": {
                "platformID": "standard",
                "cpuCores": 4,
                "memorySize": "800Mi",
                "volumeSize": "40Gi",
                "volumeType": "network-ssd"
            }
        },
        "workerNodeConfigs": [
            {
                "nodeConfig": {
                    "groupName": "default",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/workers"
                        }
                    ]
                },
                "workersCount": 1,
                "workersScale": null,
                "capycNodeConfig": {
                    "platformID": "standard",
                    "cpuCores": 4,
                    "memorySize": "800Mi",
                    "volumeSize": "40Gi",
                    "volumeType": "network-ssd"
                }
            },
            {
                "nodeConfig": {
                    "groupName": "infra",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/infra"
                        }
                    ]
                },
                "workersCount": 0,
                "workersScale": null,
                "capycNodeConfig": {
                    "platformID": "standard",
                    "cpuCores": 4,
                    "memorySize": "800Mi",
                    "volumeSize": "40Gi",
                    "volumeType": "network-ssd"
                }
            }
        ]
    },
    "CreatedByUser": "username"
}

Создание кластера с провайдером vCloud Director

Пример команды создания клиентского кластера с перечнем включаемых сервисов и самоподписным сертификатом
export CLUSTERNAME="capvcd-new-cluster"
export PROVIDERTEMPLATENAME="capvcd-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capcd
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "",
    "clusterName": "$CLUSTERNAME",
    "disabledServices": [],
    "enabledServices": ["shturval-cert-manager-crds","shturval-vip-provider","shturval-update-crds","shturval-monitoring-crds","shturval-local-csi","shturval-policy-manager-crds","shturval-vip","shturval-node-config-crds","shturval-services","shturval-services-crds","shturval-caching-dns","shturval-cert-manager","shturval-update","shturval-networking","shturval-node-config"],
    "externalKubeAPILB": true,
    "externalingresslb": true,
    "ingress": "cluster.shturval.link",
    "controlPlaneNodesCount": 1,
    "ingressvip": "",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "clusterConfigProfileName": "",
    "mgmtCluster": false
  },
  "provider": {
    "enableCSI": false,
    "identityName": "$PROVIDERTEMPLATENAME",
    "kubeAPIVIPSubnet": "",
    "serviceVIPSubnet": "",
    "controlplaneNodeConfig": {
      "capcdNodeConfig": {
        "diskSize": "50Gi",
        "sizingPolicy": "TKG"
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 2,
        "capcdNodeConfig": {
          "diskSize": "50Gi",
          "sizingPolicy": "TKG"
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 0,
        "capcdNodeConfig": {
          "diskSize": "50Gi",
          "sizingPolicy": "TKG"
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример команды создания клиентского кластера только с критическими сервисами
export CLUSTERNAME="capvcd-new-cluster"
export PROVIDERTEMPLATENAME="capvcd-template-name"

curl -k -s -L --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capcd
--header "Authorization: Bearer $token"
--data @<(cat <<EOF
{
  "cluster": {
    "apiEndpoint": "",
    "clusterName": "$CLUSTERNAME",
    "disabledServices": ["all"],
    "externalKubeAPILB": true,
    "externalingresslb": true,
    "ingress": "cluster.shturval.link",
    "controlPlaneNodesCount": 1,
    "ingressvip": "",
    "podSubnet": "172.16.0.0/16",
    "secure": false,
    "serviceSubnet": "10.96.0.0/12",
    "shturvalVersion": "2.12.0",
    "clusterConfigProfileName": "",
    "mgmtCluster": false
  },
  "provider": {
    "enableCSI": false,
    "identityName": "$PROVIDERTEMPLATENAME",
    "kubeAPIVIPSubnet": "",
    "serviceVIPSubnet": "",
    "controlplaneNodeConfig": {
      "capcdNodeConfig": {
        "diskSize": "50Gi",
        "sizingPolicy": "TKG"
      },
      "nodeConfig": {
        "groupName": "control-plane",
        "roles": [
          {
            "name": "node-role.kubernetes.io/control-plane"
          }
        ]
      }
    },
    "workerNodeConfigs": [
      {
        "nodeConfig": {
          "groupName": "default",
          "roles": [
            {
              "name": "node-role.kubernetes.io/workers"
            }
          ]
        },
        "workersCount": 2,
        "capcdNodeConfig": {
          "diskSize": "50Gi",
          "sizingPolicy": "TKG medium 4vCPU"
        }
      },
      {
        "nodeConfig": {
          "groupName": "infra",
          "roles": [
            {
              "name": "node-role.kubernetes.io/infra"
            }
          ]
        },
        "workersCount": 0,
        "capcdNodeConfig": {
          "diskSize": "1Gi",
          "sizingPolicy": "TKG"
        }
      }
    ]
  }
}
EOF
) | jq -r
Пример ответа в формате json при успешном создании кластера с провайдером vCloud Director
    {
    "cluster": {
        "clusterName": "capvcd-new-cluster",
        "clusterConfigProfileName": "",
        "apiEndpoint": "",
        "ingress": "cluster.shturval.link",
        "ingressvip": "",
        "externalingresslb": true,
        "secure": false,
        "externalKubeAPILB": true,
        "controlPlaneNodesCount": 1,
        "podSubnet": "172.16.0.0/16",
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.12.0",
        "enabledServices": [
            "shturval-services-crds",
            "shturval-networking",
            "shturval-node-config-crds",
            "shturval-snapshotter",
            "shturval-update-crds",
            "shturval-monitoring-crds",
            "shturval-update",
            "shturval-snapshotter-crds",
            "shturval-vip-provider",
            "shturval-services",
            "shturval-ingress-controller",
            "shturval-node-config",
            "shturval-metrics-collector-crds",
            "shturval-vip",
            "shturval-caching-dns",
            "shturval-trust-manager",
            "shturval-local-csi",
            "shturval-cert-manager-crds",
            "shturval-cert-manager",
            "shturval-policy-manager-crds",
            "shturval-trust-manager-crds"
        ],
        "disabledServices": [
            "shturval-cd",
            "shturval-dashboards",
            "shturval-cert-expiration",
            "shturval-scanner-crds",
            "shturval-descheduler",
            "shturval-rollouts-crds",
            "shturval-cd-crds",
            "shturval-rollouts",
            "shturval-scanner",
            "shturval-backup",
            "shturval-log-collector",
            "shturval-metrics-collector",
            "shturval-policy-manager",
            "shturval-log-collector-crds",
            "shturval-backup-crds"
        ],
        "ingressCert": "",
        "ingressKey": "",
        "cacert": "",
        "cakey": "",
        "acmeRootCert": "",
        "ACMEURL": "",
        "mgmtCluster": false
    },
    "provider": {
        "identityName": "capvcd-template-name",
        "enableCSI": false,
        "controlplaneNodeConfig": {
            "nodeConfig": {
                "groupName": "control-plane",
                "roles": [
                    {
                        "name": "node-role.kubernetes.io/control-plane"
                    }
                ]
            },
            "capcdNodeConfig": {
                "sizingPolicy": "TKG",
                "diskSize": "50Gi"
            }
        },
        "workerNodeConfigs": [
            {
                "nodeConfig": {
                    "groupName": "default",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/workers"
                        }
                    ]
                },
                "capcdNodeConfig": {
                    "sizingPolicy": "TKG",
                    "diskSize": "50Gi"
                },
                "workersScale": null,
                "workersCount": 2
            },
            {
                "nodeConfig": {
                    "groupName": "infra",
                    "roles": [
                        {
                            "name": "node-role.kubernetes.io/infra"
                        }
                    ]
                },
                "capcdNodeConfig": {
                    "sizingPolicy": "TKG medium 4vCPU",
                    "diskSize": "50Gi"
                },
                "workersScale": null,
                "workersCount": 0
            }
        ],
        "kubeAPIVIPSubnet": "",
        "serviceVIPSubnet": ""
    },
    "CreatedByUser": "username"
}

Удаление кластера

Команда
export CLUSTERNAME="clustername"

curl -k -L --request DELETE $BACKENDPOINT/api/v1/clusters/$CLUSTERNAME --header "Authorization: Bearer $token"
×