Administradores e desenvolvedores podem atuar em recursos de API da Cloud Consumption Interface (CCI) expostos pelo servidor da API Kubernetes da CCI.

Dependendo do tipo de recurso, eles podem usar a API para executar as seguintes ações.

Tipo de recurso Verbos de ação de administradores Verbos de ação de desenvolvedores
CloudAccount obter, listar
Supervisor obter, corrigir, listar
Project criar, obter, atualizar, corrigir, excluir, listar obter, listar
ProjectRole obter, listar obter, listar
ProjectRoleBinding criar, obter, atualizar, corrigir, excluir, listar obter, listar
Region criar, obter, atualizar, corrigir, excluir, listar obter, listar
RegionBinding criar, obter, atualizar, corrigir, excluir, listar obter, listar
RegionBindingConfig criar, obter, atualizar, corrigir, excluir, listar
SupervisorNamespaceClass criar, obter, atualizar, corrigir, excluir, listar obter, listar
SupervisorNamespaceClassConfig criar, obter, atualizar, corrigir, excluir, listar
SupervisorNamespaceClassBinding criar, obter, atualizar, corrigir, excluir, listar obter, listar
SupervisorNamespace criar, obter, excluir, listar criar, obter, excluir, listar
Os exemplos a seguir mostram a chamada da CLI e suas respostas. Usar a CLI requer que você tenha feito o seguinte:
  • Baixou o plug-in da CCI para kubectl.
  • Obtido um token de API.
  • Feito login no servidor da CCI.
Consulte Preparação para usar a Command Line Interface para executar tarefas da CCI

Projetos e Usuários

Projeto
O administrador cria projetos para agrupar usuários e definir o acesso a fontes de conteúdo, como modelos de nuvem no Automation Assembler ou itens de catálogo no Automation Service Broker.
Project inclui as seguintes propriedades:
  • metadata.name Nome do projeto.
  • spec.description Descrição opcional.
  • spec.sharedResources Se "true", o projeto compartilha Namespaces de Supervisor com outros usuários no projeto. Se "false", o projeto limita o acesso ao namespace aos administradores ou ao usuário que criou o namespace.
Exemplo de entrada para criar projeto.
apiVersion: project.cci.vmware.com/v1alpha1
kind: Project
metadata:
  name: demo-project
spec:
  description: This is a demo project
  sharedResources: true
Função do Projeto
A função de projeto reflete as funções disponíveis de administrador, visualização ou edição que podem ser atribuídas a um usuário em um projeto.
Função do Projeto Descrição
administrador Permite a modificação e a exclusão do namespace.
visualizar Uma função somente leitura no namespace.
editar Permite a modificação do namespace.
As funções de projeto são somente leitura e fornecem funções disponíveis ao criar a vinculação de função de projeto.

Exemplo de entrada da função para ler projeto.

apiVersion: authorization.cci.vmware.com/v1alpha1
kind: ProjectRole
metadata:
  name: admin
spec:
  description: project administrator
Vinculação de Função de Projeto
A vinculação de função de projeto é usada para atribuir a um usuário ou grupo uma função em um projeto.
ProjectRoleBinding inclui as seguintes propriedades:
  • metadata.name Nome da vinculação de função de projeto e requer um formato específico para refletir o tipo de assunto (usuário ou grupo) e o nome do assunto:
    cci:<user/group>:<subject domain>:<subject name>
  • metadata.namespace Descreve o nome do projeto.
  • subjects Descreve o usuário ou grupo. Apenas uma entrada é permitida.
  • roleRef Descreve a função.
Exemplo de entrada de vinculação de função para criar projeto.
apiVersion: authorization.cci.vmware.com/v1alpha1
kind: ProjectRoleBinding
metadata:
  # name must match the subject kind and name
  name: cci:user:vmware.com:hello
  namespace: demo-project
subjects:
  - kind: User  # User / Group
    name: [email protected]
roleRef:
  apiGroup: authorization.cci.vmware.com
  kind: ProjectRole
  name: admin # admin / edit / view

vCenters e Supervisores

Essa categoria trata de infraestrutura e suas funções são somente para administradores.

Conta de Nuvem
As contas de nuvem são criadas automaticamente pelo vSphere+ ou manualmente por um administrador para registrar um vCenter e habilitar centros de dados com Supervisores.
Exemplo de saída para criar conta de nuvem.
Name:         cci-ui-volume-service
Namespace:    cci-config
Labels:       <none>
Annotations:  infrastructure.cci.vmware.com/data-collection-status: FINISHED
              infrastructure.cci.vmware.com/last-data-collection-timestamp: 2022-10-24T22:06:08.603Z
API Version:  infrastructure.cci.vmware.com/v1alpha1
Kind:         CloudAccount
Metadata:
  Creation Timestamp:  2022-10-17T12:18:28Z
  UID:                 2163e7cf-f698-3f1f-afca-f3daa8c730fa
Spec:
  Address:           127.193.29.114
  Cloud Proxy Name:  2d164fed-bbf3-47cc-8e6b-5226c5277ee4
Events:              <none>
Supervisor
Um Supervisor é criado pelo sistema após a conclusão da coleta de dados pelo vCenter. O administrador pode atualizar o Supervisor com rótulos de capacidade para posicionamento e atribuí-lo a uma região.
  • metadata.labels Os administradores definem rótulos com configurações de chave/valor que refletem os recursos do Supervisor. Os rótulos são usados para filtrar Supervisores com base em recursos ao criar um namespace.
  • spec.regionNames Os administradores definem nomes de regiões para que um Supervisor possa ser atribuído a uma região. Um Supervisor pode ser atribuído a uma única região e não é atribuído a uma região por padrão.
Exemplo de saída para atualizar Supervisor.
Name:         bugbash-vc:domain-c8
Namespace:    cci-config
Labels:       environment=bug-bash-9
Annotations:  infrastructure.cci.vmware.com/cloud-account-id: 33a0b2d0-91c8-4629-b04a-65448494d54e
API Version:  infrastructure.cci.vmware.com/v1alpha1
Kind:         Supervisor
Metadata:
  Creation Timestamp:  2022-09-28T04:22:38Z
  UID:                 fbd10d08-bc56-4ec2-93f8-693a7a4b2003
Spec:
  Cloud Account Name:  bugbash-vc
  Display Name:        wcp-test-dc-cluster
  External Id:         domain-c8
  Region Names:
    us-demo1
Status:
  Power State:  On
Events:         <none>

Topologia

Região
Um administrador cria regiões como um mecanismo de agrupamento para um ou mais Supervisores. Regiões podem ser baseadas em vários parâmetros, como geografia ou infraestrutura, e podem incluir Supervisores de vários vCenters.
Exemplo de entrada para criar região.
apiVersion: topology.cci.vmware.com/v1alpha1
kind: Region
metadata:
  name: us-west1
spec:
  description: The us-west1 region
Vinculação de Região
Um administrador cria Vinculações de Região para associar regiões a projetos.

Para um usuário em um projeto criar dois Namespaces de Supervisor, tanto RegionBinding quanto RegionBindingConfig devem existir.

RegionBinding inclui as seguintes propriedades:
  • metadata.name Nome da região e deve corresponder a uma região existente.
  • metadata.namespace Nome do projeto.
Exemplo de entrada de vinculação para criar região.
apiVersion: topology.cci.vmware.com/v1alpha1
kind: RegionBinding
metadata:
  name: us-west1
  namespace: demo-project
Configuração de Vinculação de Região
Para controlar a lógica de posicionamento do supervisor por região em um projeto, um administrador define RegionBindingConfig. Com RegionBindingConfig definido, um administrador pode usar pares de chave/valor do rótulo do Supervisor para refinar ainda mais a associação de Supervisores específicos a projetos. Por exemplo, um administrador pode usar uma especificação key: environment para selecionar um Supervisor especificado para testes com value: testing.
RegionBindingConfig inclui as seguintes propriedades:
  • metadata.name Nome da região e deve corresponder a uma região existente.
  • metadata.namespace Nome do projeto.
  • spec.supervisorSelector seleciona os supervisores no projeto que estão disponíveis para criar um namespace. Para selecionar o supervisor correto, matchExpressions defina a chave do rótulo do Supervisor, o operador correspondente e o valor para a correspondência.
    A correspondência de expressões spec.supervisorSelector usa os seguintes operadores:
    • operator: In Os testes de vinculação de região verificam se o valor-chave corresponde ao valor-chave do rótulo do Supervisor. O matchExpressions é uma matriz, mas a matriz está atualmente limitada a um único valor de entrada.
    • operator: NotIn Os testes de vinculação de região verificam se o valor-chave não corresponde ao valor-chave do Rótulo do Supervisor. O matchExpressions é uma matriz, mas a matriz está atualmente limitada a um único valor de entrada.
    • operator: Exists A vinculação de região procura uma correspondência com um Supervisor que contém a chave de rótulo. Valores não são utilizados.
    • operator: DoesNotExist A vinculação de região procura um Supervisor que não contém a chave de rótulo. Valores não são utilizados.
Exemplo de entrada de Configuração de Vinculação de Região.
apiVersion: topology.cci.vmware.com/v1alpha1
kind: RegionBindingConfig
metadata:
  name: us-west1
  namespace: demo-project
spec:
  supervisorSelector:
    matchExpressions:
      - key: environment
        operator: In
        values:
          - testing
      - key: storage
        operator: Exists
      - key: storage
        operator: NotIn
        values:
          - encrypted

Classes de Namespace de Supervisor

Classe de Namespace de Supervisor
SupervisorNamespaceClass define o modelo de namespace e parâmetros opcionais que podem ser usados para personalizar as configurações de namespace durante a criação.
O campo padrão especifica o valor do parâmetro que será usado se um usuário não fornecer o valor do parâmetro na criação do namespace. Por exemplo, se default: false, false será o valor do parâmetro.
Observação: Para garantir que um usuário possa criar um namespace com valores de parâmetros parciais ou nenhum valor, cada parâmetro deve incluir um campo e um valor padrão.
Definições de tipos de parâmetro:
Tipo de parâmetro Propriedades
Boolean
  • default Valor booleano padrão.
  • enum Lista de valores boolean permitidos. Pode ser usada para que um parâmetro tenha apenas um valor: true ou false.
Inteiro
  • minimum Valor inteiro mínimo.
  • maximum Valor inteiro máximo.
  • default Valor inteiro padrão.
  • enum Lista de valores inteiros permitidos.
Cadeia de caracteres
  • minLength Comprimento mínimo da string.
  • maxLength Comprimento máximo da string.
  • default Valor de string padrão, se não for fornecido pelo usuário.
  • pattern Padrão de regex para validar em relação ao valor.
  • enum Lista de valores de string permitidos.
Exemplo de entrada para Criar Classe de Namespace de Supervisor.
apiVersion: infrastructure.cci.vmware.com/v1alpha1
kind: SupervisorNamespaceClass
metadata:
  name: gold-with-gpu
spec:
  description: Gold with GPU enabled supervisor namespace
  parameters:
    - name: environment
      type: String
      default: testing
      enum:
        - testing
        - staging
        - production  
    - name: fastStorageClass
      type: Boolean
      default: false
    - name: podCountLimit
      type: Integer
      minimum: 100
      maximum: 1000
      default: 500
Configuração de Classe de Namespace de Supervisor
Para especificar a implementação de Classes de Namespace de Supervisor, um administrador cria um SupervisorNamespaceClassConfig com configurações de namespace. Para que um projeto tenha acesso à Classe de Namespace de Supervisor, tanto SupervisorNamespaceClass quanto SupervisorNamespaceClassConfig devem existir.
SupervisorNamespaceClassConfig inclui as seguintes propriedades:
  • metadata.name Nome da Classe do Namespace de Supervisor.
  • metadata.namespace Nome do projeto.
  • spec.storageClasses Nomes de classes de armazenamento e limites em megabytes.
  • spec.vmClasses Nomes das classes de VM.
  • spec.contentSource Nomes de bibliotecas de conteúdo que são todos definidos com type: ContentLibrary.
  • spec.limits Nomes e valores limite. Os valores limite válidos incluem:
    • config_map_count
    • cpu_limit
    • cpu_limit_default
    • cpu_request_default
    • daemon_set_count
    • deployment_count
    • job_count
    • memory_limit
    • memory_limit_default
    • memory_request_default
    • persistent_volume_claim_count
    • pod_count
    • replica_set_count
    • replication_controller_count
    • secret_count
    • service_count
    • stateful_set_count
    • storage_request_limit
  • spec.supervisorSelector Supervisores no projeto que estão disponíveis para criar um namespace. Para selecionar o supervisor correto, matchExpressions defina a chave do rótulo, o operador correspondente e o valor do rótulo para a correspondência.

Um administrador expõe parâmetros de classe que podem ser consumidos ao definir os valores das configurações do namespace, para que os usuários possam personalizar as configurações do namespace durante o tempo de solicitação.

Exemplo de entrada para Criar Configuração de Classe de Namespace de Supervisor.
apiVersion: infrastructure.cci.vmware.com/v1alpha1
kind: SupervisorNamespaceClassConfig
metadata:
  name: gold-with-gpu
spec:     
  storageClasses:
    - name: wcp-storage-class
      limit: "100"
    - name: "((parameters.fastStorageClass ? 'fast-storage-class' : 'standard-storage-class'))"
  vmClasses:
    - name: big-vm-class
    - name: small-vm-class
  contentSources:
    - name: global-content-library
      type: ContentLibrary
    - name: "((parameters.environment))-content-library"
      type: ContentLibrary     
  limits:
    - name: cpu_limit
      limit: "1000"
    - name: pod_count
      limit: "((parameters.podCountLimit))"
  supervisorSelector:
    matchExpressions:
      - key: gpu-enabled
        operator: In
        values:
          - true 
Este exemplo usa parâmetros do exemplo de Classe de Namespace de Supervisor, da seguinte forma:
  • ((parameters.fastStorageClass ? 'fast-storage-class' : 'standard-storage-class')) mostra uma verificação condicional para especificar um nome de classe de armazenamento. fastStorageClass é um tipo Boolean.
    • Se o usuário especificar o valor do parâmetro como "true", o nome será fast-storage-class.
    • Se o usuário especificar o valor como "false", o nome será standard-storage-class.
  • ((parameters.podCountLimit)) mostra como especificar um valor para o limite de contagem de pods. podCountLimit é um tipo inteiro.
    • Se o usuário especificar um valor que esteja dentro dos valores mínimo e máximo de 100 a 1000, conforme definido na Classe de Namespace de Supervisor, esse será o valor para o limite de contagem de pods.
    • Se o usuário não especificar um valor, o limite de contagem de pods será o valor padrão de 500, conforme definido na Classe de Namespace de Supervisor.
    • Se o usuário especificar um valor fora dos valores mínimo e máximo, o valor será inválido, e a criação do Namespace de Supervisor falhará com um erro mostrando que o limite de contagem de pods está fora do intervalo de valores permitidos.
Vinculação de Classe de Namespace de Supervisor
A Vinculação de Classe de Namespace de Supervisor permite o uso de Classes de Namespace de Supervisor ao criar um Namespace de Supervisor em um projeto.
SupervisorNamespaceClassBinding inclui as seguintes propriedades:
  • metadata.name Nome da Vinculação de Classe de Namespace de Supervisor.
  • metadata.namespace Nome do projeto.
  • spec.overrideParameters Criados pelo administrador, esses parâmetros definem valores que não podem ser alterados por um usuário ao criar o Namespace de Supervisor. const especifica o valor do parâmetro. Esses parâmetros são opcionais e, se definidos, não são obrigatórios para todos os parâmetros de classe.
Exemplo de entrada para Criar Vinculação Classe de Namespace de Supervisor.
apiVersion: infrastructure.cci.vmware.com/v1alpha1
kind: SupervisorNamespaceClassBinding
metadata:
  name: gold-with-gpu
  namespace: demo-project
spec:
  overrideParameters:
    - name: environment
      type: string
      const: testing
supervisorNamespaceClassRef:
  apiVersion: infrastructure.cci.vmware.com/v1alpha1
  kind: SupervisorNamespaceClass
  name: gold
Neste exemplo, name: environment é um parâmetro de substituição usando o parâmetro environment da Classe de Namespace de Supervisor. Ao especificar const: testing, o usuário só pode criar um Namespace de Supervisor usando essa classe em um ambiente de teste.

Namespaces de Supervisor

Namespace de Supervisor
Os usuários podem criar Namespaces de Supervisor em uma região específica usando uma Classe de Namespace de Supervisor como modelo. Se expostos, parâmetros de classe opcionais podem ser usados para definir as configurações do Namespace.
SupervisorNamespace inclui as seguintes propriedades:
  • metadata.name Nome do namespace no projeto e no Supervisor.
  • metadata.namespace Nome do projeto.
  • spec.regionName Nome da região.
  • spec.className Nome da Classe do Namespace de Supervisor.
  • spec.classParameters Valor-chave opcional para substituir valores de parâmetros padrão.
  • spec.description Descrição opcional do namespace.
Exemplo de entrada para Criar Namespace de Supervisor.
apiVersion: infrastructure.cci.vmware.com/v1alpha1
kind: SupervisorNamespace
metadata:
  name: demo-ns5
  namespace: demo-project
spec:
  description: Demonstrating supervisor namespace creation
  regionName: us-west2
  className: bronze
Exemplo de saída para Criar Namespace de Supervisor.
Name:         demo-1
Namespace:    sprint-demo-project
Labels:       <none>
Annotations:  infrastructure.cci.vmware.com/wcp-address: 10.161.81.40
API Version:  infrastructure.cci.vmware.com/v1alpha1
Kind:         SupervisorNamespace
Metadata:
  Creation Timestamp:  2022-09-13T01:55:57Z
  UID:                 my-example-demo-1
Spec:
  Class Name:  demo-class
  Class Parameters:
    Pods:       30
  Description:
  Region Name:  us-demo-1
Status:
  Conditions:
    Last Transition Time:  2022-09-13T01:55:58Z
    Status:                True
    Type:                  Ready
  Phase:                   Created
Events:                    <none>