Кластеры

Подготовка переменных для авторизации

export CLUSTERNAME=my-cluster
export SH_USERNAME=admin
export SH_PASS="my-password"
export INGRESS="apps.ip-x-x-x-x.shturval.link"

export AUTHENDPOINT="https://auth.$INGRESS"
export BACKENDPOINT="https://back.$INGRESS"
export KUBECONFIG_PATH=/tmp/$CLUSTERNAME.kubeconfig

export COOKIE_PATH=/tmp/cookie


curl -k -v --silent $AUTHENDPOINT/login -c $COOKIE_PATH --data-urlencode "username=$SH_USERNAME" \
--data-urlencode "password=$SH_PASS" &>/dev/null

echo "Got cookie" 

code=$(curl -k -b $COOKIE_PATH -v "$AUTHENDPOINT/oauth/authorize?response_type=code&client_id=backend&redirect_uri=localhost/cb" -v 2>&1 | grep -E -o "\<code=[A-Z0-9]+")

echo "Got code"

token=$(curl -k --silent "$AUTHENDPOINT/oauth/token" \
--header 'Content-Type: application/x-www-form-urlencoded' \
-b $COOKIE_PATH \
 --data-urlencode 'client_id=backend' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode "$code" \
--data-urlencode "redirect_uri=localhost/cb" | jq -r '.access_token')

echo "Got token"

curl -k --silent "$BACKENDPOINT/api/v1/clusters/$CLUSTERNAME/kubeconfig" -H "Authorization: Bearer $token" -H 'accept: application/json, text/plain, */*' > $KUBECONFIG_PATH

echo "Kubeconfig is ready"
echo "export KUBECONFIG=$KUBECONFIG_PATH"

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

curl --silent --location --request GET $BACKENDPOINT/api/v1/clusters --header "Authorization: Bearer $TOKEN" | jq -r

В ответе ожидается json такого формата:

{
    "items": [
        {
            "id": "capov",
            "clusterName": "capov",
            "ingress": "*.apps.ip-10-31-145-222.shturval.link",
            "providerType": "capov",
            "haType": "ha",
            "status": "Provisioned",
            "workerCount": 3,
            "apiEndpoint": "10.31.145.221:6443",
            "networks": [
                {
                    "type": "Service CIDR",
                    "network": "10.96.0.0/12",
                    "netmask": ""
                },
                {
                    "type": "Pod CIDR",
                    "network": "172.16.0.0/16",
                    "netmask": ""
                }
            ]
        }
    ],
    "count": 1
}

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

export CLUSTERNAME="capvs-new-cluster"
export PROVIDERTEMPLATENAME="capvs-template-name"

curl --silent --location --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capvs
--header "Authorization: Bearer $TOKEN" | jq -r
--data @<(cat <<EOF
{
    "cluster": {
        "apiEndpoint": "10.20.30.40",
        "clusterName": "$CLUSTERNAME",
        "disabledServices": ["shturval-ceph-cephfs", "shturval-rollouts", "shturval-nfs-csi", "shturval-rollouts-crds", "shturval-descheduler", "shturval-ceph-rbd", "shturval-dashboards"],
        "enabledServices": ["shturval-policy-manager-crds", "shturval-policy-manager", "shturval-networking", "shturval-local-csi", "shturval-node-config", "shturval-backup-crds", "shturval-scanner-crds", "shturval-vip-provider", "shturval-services-crds", "shturval-update", "shturval-node-config-crds", "shturval-update-crds", "shturval-backup", "shturval-cert-expiration", "shturval-services", "shturval-scanner", "shturval-vip", "shturval-cd-crds", "shturval-cert-manager", "shturval-cert-manager-crds", "shturval-caching-dns", "shturval-cluster-roles", "shturval-policies", "shturval-log-operator-crds", "shturval-ingress-controller", "shturval-cd", "shturval-metrics", "shturval-monitoring-crds", "shturval-log-operator"],
        "externalKubeAPILB": false,
        "externalingresslb": false,
        "haType": "ha",
        "ingress": "",
        "ingressvip": "10.20.30.41",
        "kubernetesVersion": "",
        "podSubnet": "172.16.0.0/16",
        "secure": false,
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.6.0"
    },
    "provider": {
        "controlplaneNodeConfig": {
            "diskGiB": 50,
            "memoryMiB": 8192,
            "numCPUs": 4
        },
        "enableCSI": false,
        "identityName": "$PROVIDERTEMPLATENAME",
        "workerNodeConfig": {
            "diskGiB": 50,
            "memoryMiB": 8192,
            "numCPUs": 4
        },
        "workersCount": 3,
        "workersScale": null
    }
}

При успешном создании кластера с провайдером vSphere, в ответе ожидается json такого формата:

{
    "id": "capvs-new-cluster",
    "clusterName": "capvs-new-cluster",
    "ingress": "",
    "providerType": "capvs",
    "providerConfigID": "",
    "haType": "ha",
    "phase": "",
    "conditions": null,
    "workerCount": 3,
    "apiEndpoint": ":6443",
    "networks": [{
            "type": "PodSubnet",
            "network": "172.16.0.0/16",
            "netmask": ""
        }, {
            "type": "ServiceSubnet",
            "network": "10.96.0.0/12",
            "netmask": ""
        }
    ],
    "secure": false,
    "annotations": null
}

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

export CLUSTERNAME=“capvs-new-cluster”

curl –location –request DELETE $BACKENDPOINT/api/v1/clusters/$CLUSTERNAME –header “Authorization: Bearer $TOKEN”

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

export CLUSTERNAME="capov-new-cluster"
export PROVIDERTEMPLATENAME="capov-template-name"

curl --silent --location --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capov
--header "Authorization: Bearer $TOKEN" | jq -r
--data @<(cat <<EOF
{
    "cluster": {
        "apiEndpoint": "10.20.30.40",
        "clusterName": "$CLUSTERNAME",
        "disabledServices": ["shturval-rollouts-crds", "shturval-ceph-rbd", "shturval-descheduler", "shturval-rollouts", "shturval-ceph-cephfs", "shturval-nfs-csi", "shturval-dashboards"],
        "enabledServices": ["shturval-cert-manager-crds", "shturval-vip-provider", "shturval-node-config-crds", "shturval-services", "shturval-log-operator", "shturval-log-operator-crds", "shturval-update", "shturval-scanner-crds", "shturval-cert-manager", "shturval-cert-expiration", "shturval-caching-dns", "shturval-monitoring-crds", "shturval-update-crds", "shturval-cd", "shturval-policy-manager", "shturval-metrics", "shturval-cluster-roles", "shturval-cd-crds", "shturval-networking", "shturval-backup", "shturval-backup-crds", "shturval-policies", "shturval-local-csi", "shturval-services-crds", "shturval-policy-manager-crds", "shturval-vip", "shturval-ingress-controller", "shturval-node-config", "shturval-scanner"],
        "externalKubeAPILB": false,
        "externalingresslb": false,
        "haType": "ha",
        "ingress": "",
        "ingressvip": "10.20.30.41",
        "kubernetesVersion": null,
        "podSubnet": "172.16.0.0/16",
        "secure": false,
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.6.0"
    },
    "provider": {
        "controlplaneNodeConfig": {
            "cpu": {
                "cores": 4,
                "sockets": 1,
                "threads": 1
            },
            "memory": {
                "guaranteedMB": null,
                "sizeMB": 8192
            },
            "osDiskSizeGB": 50
        },
        "enableCSI": false,
        "providerName": "$PROVIDERTEMPLATENAME",
        "workerNodeConfig": {
            "cpu": {
                "cores": 4,
                "sockets": 1,
                "threads": 1
            },
            "memory": {
                "sizeMB": 8192
            },
            "osDiskSizeGB": 50
        },
        "workersCount": 3,
        "workersScale": null
    }
}

При успешном создании кластера с провайдером oVirt, в ответе ожидается json такого формата:

{
    "info": {
        "id": "capov-new-cluster",
        "clusterName": "capov-new-cluster",
        "ingress": "*.apps.ip-10-20-30-31.shturval.link",
        "providerType": "capov",
        "providerConfigID": "capov-template-name",
        "haType": "single",
        "phase": "Provisioned",
        "workerCount": 2,
        "apiEndpoint": "10.20.30.40:6443",
        "secure": false,
    "createdBy": "admin",
    "createdDate": "timestapmptz"
}

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

export CLUSTERNAME="capsmv2-new-cluster"
export PROVIDERTEMPLATENAME="capsmv2-template-name"

curl --silent --location --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capsmv2
--header "Authorization: Bearer $TOKEN" | jq -r
--data @<(cat <<EOF
{
    "cluster": {
        "apiEndpoint": "10.20.30.40",
        "clusterName": "$CLUSTERNAME",
        "disabledServices": ["shturval-rollouts", "shturval-descheduler", "shturval-dashboards", "shturval-ceph-cephfs", "shturval-rollouts-crds", "shturval-nfs-csi", "shturval-ceph-rbd"],
        "enabledServices": ["shturval-log-operator-crds", "shturval-monitoring-crds", "shturval-policy-manager-crds", "shturval-services-crds", "shturval-networking", "shturval-local-csi", "shturval-ingress-controller", "shturval-update-crds", "shturval-scanner-crds", "shturval-cert-manager-crds", "shturval-log-operator", "shturval-metrics", "shturval-update", "shturval-backup", "shturval-cd", "shturval-caching-dns", "shturval-node-config", "shturval-scanner", "shturval-cert-manager", "shturval-policies", "shturval-cd-crds", "shturval-node-config-crds", "shturval-services", "shturval-policy-manager", "shturval-vip", "shturval-vip-provider", "shturval-cluster-roles", "shturval-backup-crds", "shturval-cert-expiration"],
        "externalKubeAPILB": false,
        "externalingresslb": false,
        "haType": "ha",
        "ingress": "",
        "ingressvip": "10.20.30.41",
        "kubernetesVersion": null,
        "podSubnet": "172.16.0.0/16",
        "secure": false,
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.6.0"
    },
    "provider": {
        "controlPlaneSelector": {
            "matchLabels": {},
            "matchExpressions": []
        },
        "workerSelector": {
            "matchLabels": {},
            "matchExpressions": []
        },
        "name": "$PROVIDERTEMPLATENAME",
        "workersCount": 3,
        "workersScale": null
    }
}

При успешном создании кластера с провайдером Shturval v2, в ответе ожидается json такого формата:

{
    "id": "capsmv2-new-cluster",
    "clusterName": "capsmv2-new-cluster",
    "ingress": "",
    "providerType": "shturvalv2",
    "providerConfigID": "capsmv2-template-name",
    "haType": "ha",
    "phase": "",
    "conditions": null,
    "workerCount": 3,
    "apiEndpoint": ":6443",
    "networks": [{
            "type": "PodSubnet",
            "network": "172.16.0.0/16",
            "netmask": ""
        }, {
            "type": "ServiceSubnet",
            "network": "10.96.0.0/12",
            "netmask": ""
        }
    ],
    "secure": false,
    "annotations": null
}

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

export CLUSTERNAME="capos-new-cluster"
export PROVIDERTEMPLATENAME="capos-template-name"
export OPENSTACKFLAVOURNAME = "os-flavour-name"

curl --silent --location --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capos
--header "Authorization: Bearer $TOKEN" | jq -r
--data @<(cat <<EOF
{
    "cluster": {
        "apiEndpoint": "10.20.30.40", 
        "clusterName": "$CLUSTERNAME", 
        "disabledServices": ["shturval-rollouts-crds", "shturval-ceph-cephfs", "shturval-descheduler", "shturval-nfs-csi", "shturval-ceph-rbd", "shturval-rollouts", "shturval-dashboards"], 
        "enabledServices": ["shturval-caching-dns", "shturval-monitoring-crds", "shturval-services", "shturval-vip", "shturval-node-config-crds", "shturval-cd-crds", "shturval-cert-manager-crds", "shturval-node-config", "shturval-cd", "shturval-metrics", "shturval-services-crds", "shturval-update-crds", "shturval-cert-expiration", "shturval-scanner", "shturval-policy-manager", "shturval-cluster-roles", "shturval-networking", "shturval-log-operator-crds", "shturval-ingress-controller", "shturval-backup-crds", "shturval-local-csi", "shturval-update", "shturval-policy-manager-crds", "shturval-vip-provider", "shturval-log-operator", "shturval-scanner-crds", "shturval-backup", "shturval-policies", "shturval-cert-manager"],
        "externalKubeAPILB": false,
        "externalingresslb": false,
        "haType": "ha",
        "ingress": "",
        "ingressvip": "10.20.30.41",
        "kubernetesVersion": "",
        "podSubnet": "172.16.0.0/16",
        "secure": false,
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.6.0"
    },
    "provider": {
        "controlplaneNodeConfig": {
            "openstackFlavorName": "STD3-6-12",
            "volumeSize": 50,
            "volumeType": "ssd"
        },
        "providerName": "$PROVIDERTEMPLATENAME",
        "workerNodeConfig": {
            "openstackFlavorName": "$OPENSTACKFLAVOURNAME",
            "volumeSize": 50,
            "volumeType": "ssd"
            },
        "workersCount": 3,
        "workersScale": null
    }
}

При успешном создании кластера с провайдером OpenStack, в ответе ожидается json такого формата:

{
    "id":"capos-new-cluster",
    "clusterName":"capos-new-cluster",
    "ingress":"*.apps.ip-10-20-30-41.shturval.link",
    "providerType":"capos",
    "providerConfigID":"capos-template-name",
    "haType":"ha",
    "phase":"Pending",
    "conditions":null,
    "workerCount":3,
    "apiEndpoint":"10.20.30.40",
    "networks": [{
            "type": "PodSubnet",
            "network": "172.16.0.0/16",
            "netmask": ""
        }, {
            "type": "ServiceSubnet",
            "network": "10.96.0.0/12",
            "netmask": ""
        }
    ],
    "secure": false,
    "annotations": null
}

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

export CLUSTERNAME="capbd-new-cluster"
export PROVIDERTEMPLATENAME="capbd-template-name"
export NETTYPE = "net-type"
export METWORKNAME = "networkname"

curl --silent --location --request POST $BACKENDPOINT/api/v1/platform/providers/clusters/capbd
--header "Authorization: Bearer $TOKEN" | jq -r
--data @<(cat <<EOF
{
    "cluster": {
        "apiEndpoint": "10.20.30.40",
        "clusterName": "$CLUSTERNAME",
        "disabledServices": ["shturval-ceph-rbd", "shturval-descheduler", "shturval-rollouts-crds", "shturval-rollouts", "shturval-ceph-cephfs", "shturval-nfs-csi", "shturval-dashboards"],
        "enabledServices": ["shturval-caching-dns", "shturval-monitoring-crds", "shturval-services", "shturval-vip", "shturval-node-config-crds", "shturval-cd-crds", "shturval-cert-manager-crds", "shturval-node-config", "shturval-cd", "shturval-metrics", "shturval-services-crds", "shturval-update-crds", "shturval-cert-expiration", "shturval-scanner", "shturval-policy-manager", "shturval-cluster-roles", "shturval-networking", "shturval-log-operator-crds", "shturval-ingress-controller", "shturval-backup-crds", "shturval-local-csi", "shturval-update", "shturval-policy-manager-crds", "shturval-vip-provider", "shturval-log-operator", "shturval-scanner-crds", "shturval-backup", "shturval-policies", "shturval-cert-manager"],
        "externalingresslb": false,
        "externalKubeAPILB": false,
        "haType": "ha",
        "ingress": "",
        "ingressvip": "10.20.30.41",
        "kubernetesVersion": "",
        "podSubnet": "172.16.0.0/16",
        "secure": false,
        "serviceSubnet": "10.96.0.0/12",
        "shturvalVersion": "2.6.0"
    },
    "provider": {
        "controlplaneNodeConfig": {
            "cpu": 4,
            "memory": 8192,
            "networkInterfaces": [
                {
                    "netType": "$NETTYPE",
                    "networkName": "$METWORKNAME"
                }
            ],
            "osDiskSizeGB": 25
        },
        "providerName": "$PROVIDERTEMPLATENAME",
        "workerNodeConfig": {
            "cpu": 4,
            "memory": 8192,
            "networkInterfaces": [
                {
                    "netType": "$NETTYPE",
                    "networkName": "$METWORKNAME"
                }
            ],
            "osDiskSizeGB": 25
        },
        "workersCount": 3,
        "workersScale": null
    }
}

При успешном создании кластера с провайдером Basis Dynamix, в ответе ожидается json такого формата:

{
    "annotations": null,
    "apiEndpoint": "10.20.30.40",
    "clusterName": "capbd-new-cluster",
    "conditions": null,
    "haType": "ha",
    "id": "capbd-new-cluster",
    "ingress": "*.apps.ip-10-20-30-41.shturval.link",
    "networks": [
        {
            "netmask": "",
            "network": "172.16.0.0/16",
            "type": "PodSubnet"
        },
        {
            "netmask": "",
            "network": "10.96.0.0/12",
            "type": "ServiceSubnet"
        }
    ],
    "phase": "Pending",
    "providerConfigID": "capbd-template-name",
    "providerType": "capbd",
    "secure": false,
    "workerCount": 3
}