(PRECADO) Gestão de contentores DC/OS através da API de Descanso da Maratona

Aviso

O Serviço de Contentores Azure (ACS) está a ser depreciado. Não estão a ser adicionadas novas funcionalidades ou funcionalidades ao ACS. Todas as APIs, experiência do portal, comandos CLI e documentação são marcados como precedidos.

Para mais informações, consulte o anúncio de depreciação do Serviço de Contentores Azure no Azure.com.

Recomendamos que implemente uma das seguintes soluções Azure Marketplace:

Se quiser usar Kubernetes, consulte Azure Kubernetes Service.

O DC/OS fornece um ambiente para implementação e dimensionamento de cargas de trabalho em cluster, abstraindo o hardware subjacente. Na parte superior do DC/OS, existe uma estrutura que gere o agendamento e a execução de cargas de trabalho de computação. Embora existam quadros disponíveis para muitas cargas de trabalho populares, este documento leva-o a começar a criar e a escalar as instalações de contentores utilizando a API Marathon REST.

Pré-requisitos

Antes de avançarmos, necessita de um cluster DC/OS configurado no Serviço de Contentor do Azure. Também necessita de conectividade remota a este cluster. Para obter mais informações sobre estes itens, consulte os artigos seguintes:

Aceda às APIs DEC/OS

Depois de estar ligado ao cluster de Serviço de Contentores Azure, pode aceder ao DC/OS e a apis de descanso conexos através http://localhost:local-port. Os exemplos neste documento partem do princípio de que está a utilizar um túnel na porta 80. Por exemplo, os pontos finais da Maratona podem ser alcançados em URIs começando com http://localhost/marathon/v2/.

Para obter mais informações sobre as diversas APIs, consulte a documentação do Mesosphere da API do Marathon e da API do Chronos, bem como a documentação do Apache da API do Mesos Scheduler.

Reunir informações do DC/OS e do Marathon

Antes de colocar os contentores no cluster DC/OS, recolha algumas informações sobre o cluster DC/OS, tais como os nomes e o estado dos agentes DC/OS. Para tal, consulte o ponto final master/slaves da API REST do DC/OS. Se tudo correr bem, a consulta devolve uma lista de agentes DC/OS e as diversas propriedades de cada um.

curl https://localhost/mesos/master/slaves

Agora, utilize o ponto final /apps do Marathon para verificar a existência de implementações de aplicações atuais no cluster DC/OS. Se for um cluster novo, vê uma matriz de aplicações vazia.

curl localhost/marathon/v2/apps

{"apps":[]}

Implementar um contentor formatado para Docker

Você implanta recipientes formatados por Docker através da API Marathon REST usando um ficheiro JSON que descreve a implantação pretendida. A amostra seguinte implanta um contentor Nginx a um agente privado no aglomerado.

{
  "id": "nginx",
  "cpus": 0.1,
  "mem": 32.0,
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "nginx",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 80, "servicePort": 9000, "protocol": "tcp" }
      ]
    }
  }
}

Para implantar um recipiente em formação docker, guarde o ficheiro JSON num local acessível. Em seguida, para implementar o contentor, execute o comando seguinte. Especifique o nome do ficheiro JSON (marathon.json neste exemplo).

curl -X POST https://localhost/marathon/v2/apps -d @marathon.json -H "Content-type: application/json"

O resultado é semelhante ao seguinte:

{"version":"2015-11-20T18:59:00.494Z","deploymentId":"b12f8a73-f56a-4eb1-9375-4ac026d6cdec"}

Agora, se consultar o Marathon quanto a aplicações, esta nova aplicação é apresentada no resultado.

curl localhost/marathon/v2/apps

Chegar ao recipiente

Pode verificar se o Nginx está a funcionar num contentor num dos agentes privados do aglomerado. Para encontrar o hospedeiro e o porto onde o contentor está em funcionamento, consultar a Maratona para as tarefas de execução:

curl localhost/marathon/v2/tasks

Encontre o valor da host saída (um endereço IP semelhante a 10.32.0.x), e o valor de ports.

Agora faça uma ligação terminal SSH (não uma ligação com túneis) à gestão FQDN do cluster. Uma vez ligado, faça o seguinte pedido, substituindo os valores corretos dehost:ports

curl http://host:ports

A saída do servidor Nginx é semelhante à seguinte:

Nginx from container

Dimensionar os contentores

Você pode usar a API maratona para escalar ou escalar em implementações de aplicações. No exemplo anterior, foi implementada uma instância de uma aplicação. Vamos aumentar horizontalmente para três instâncias de uma aplicação. Para tal, crie um ficheiro JSON utilizando o seguinte texto JSON e armazene-o numa localização acessível.

{ "instances": 3 }

A partir da sua ligação com túneis, executar o seguinte comando para escalar a aplicação.

Nota

O URI é http://localhost/marathon/v2/apps/ seguido pelo ID da aplicação à escala. Se estiver a usar a amostra Nginx que é fornecida aqui, o URI seria http://localhost/marathon/v2/apps/nginx.

curl https://localhost/marathon/v2/apps/nginx -H "Content-type: application/json" -X PUT -d @scale.json

Por fim, consulte o ponto final do Marathon quanto a aplicações. Vê que existem agora três contentores Nginx.

curl localhost/marathon/v2/apps

Comandos do PowerShell equivalentes

Pode efetuar estas mesmas ações utilizando comandos do PowerShell num sistema Windows.

Para recolher informações sobre o cluster DC/OS, tais como nomes de agentes e estado do agente, executar o seguinte comando:

Invoke-WebRequest -Uri https://localhost/mesos/master/slaves

Os contentores formatados para Docker são implementados através do Marathon utilizando um ficheiro JSON que descreve a implementação pretendida. O exemplo seguinte implementa o contentor Nginx, a porta de enlace 80 do agente DC/OS para a porta 80 do contentor.

{
  "id": "nginx",
  "cpus": 0.1,
  "mem": 32.0,
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "nginx",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 80, "servicePort": 9000, "protocol": "tcp" }
      ]
    }
  }
}

Para implantar um recipiente em formação docker, guarde o ficheiro JSON num local acessível. Em seguida, para implementar o contentor, execute o comando seguinte. Especifique o caminho para o ficheiro JSON (marathon.json neste exemplo).

Invoke-WebRequest -Method Post -Uri https://localhost/marathon/v2/apps -ContentType application/json -InFile 'c:\marathon.json'

Também pode utilizar a API do Marathon para aumentar ou reduzir horizontalmente em implementações de aplicações. No exemplo anterior, foi implementada uma instância de uma aplicação. Vamos aumentar horizontalmente para três instâncias de uma aplicação. Para tal, crie um ficheiro JSON utilizando o seguinte texto JSON e armazene-o numa localização acessível.

{ "instances": 3 }

Executar o seguinte comando para escalar a aplicação:

Nota

O URI é http://localhost/marathon/v2/apps/ seguido pelo ID da aplicação à escala. Se estiver a usar a amostra Nginx fornecida aqui, o URI seria http://localhost/marathon/v2/apps/nginx.

Invoke-WebRequest -Method Put -Uri https://localhost/marathon/v2/apps/nginx -ContentType application/json -InFile 'c:\scale.json'

Passos seguintes