(PRETERIDO) Gerenciamento de contêiner de DC/sistema operacional por meio da API REST do Marathon

Aviso

O ACS (Serviço de Contêiner do Azure) está sendo preterido. Não estão sendo adicionados novos recursos ou funcionalidades ao ACS. Todas as APIs, a experiência do portal, os comandos da CLI e a documentação estão marcados como preteridos.

Para obter mais informações, consulte o Comunicado de preterimento do Serviço de Contêiner do Azure em Azure.com.

É recomendável que você implante uma das seguintes soluções do Azure Marketplace:

Se você quiser usar o Kubernetes, consulte Serviço de Kubernetes do Azure.

O DC/OS fornece um ambiente de implantação e dimensionamento de cargas de trabalho clusterizadas e, ao mesmo tempo, abstrai o hardware subjacente. Sobre o DC/OS, há uma estrutura que gerencia o agendamento e a execução das cargas de trabalho de computação. Embora haja estruturas disponíveis para várias cargas de trabalho populares, este documento lhe ajuda a começar a criar e dimensionar implantações de contêiner usando a API REST do Marathon.

Pré-requisitos

Antes de trabalhar nos exemplos, você precisará de um cluster DC/OS configurado no Serviço de Contêiner do Azure. Você também precisa ter conectividade remota com esse cluster. Para saber mais sobre esses itens, confira os artigos a seguir:

Acessar as APIs de DC/sistema operacional

Depois de se conectar ao cluster do Serviço de Contêiner do Azure, você poderá acessar o DC/OS e as APIs REST relacionadas por meio http://localhost:local-port. Os exemplos neste documento pressupõem que você crie um túnel na porta 80. Por exemplo, os pontos de extremidade marathon podem ser alcançados em URIs começando com http://localhost/marathon/v2/.

Para saber mais sobre as várias APIs, confira a documentação da Mesosphere para a API Marathon e a API Chronos e a documentação do Apache para a API do Agendador do Mesos.

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

Antes de implantar contêineres no cluster DC/OS, colete algumas informações sobre esse cluster, como os nomes e o status dos agentes DC/OS. Para fazer isso, confira o ponto de extremidade master/slaves da API REST DC/OS. Se tudo correr bem, a consulta retornará uma lista de agentes DC/OS e várias propriedades para cada um deles.

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

Agora, use o ponto de extremidade /apps do Marathon para verificar as implantações atuais do Marathon para o cluster DC/OS. Se esse for um cluster novo, você verá uma matriz vazia para os aplicativos.

curl localhost/marathon/v2/apps

{"apps":[]}

Implantar um contêiner formatado pelo Docker

Você implanta os contêineres formatados pelo Docker por meio da API REST do Marathon usando um arquivo JSON que descreve a implantação pretendida. O exemplo a seguir implanta um contêiner Nginx para um agente privado no cluster.

{
  "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 contêiner Docker formatado, armazene o arquivo JSON em um local acessível. Em seguida, para implantar o contêiner, execute o comando a seguir. Especifique o nome do arquivo JSON (neste exemplo, marathon.json).

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

A saída deverá ser semelhante a esta:

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

Agora, se você consultar o Marathon em busca de aplicativos, esse novo aplicativo aparecerá na saída.

curl localhost/marathon/v2/apps

Alcançar o contêiner

Você pode verificar se o Nginx está em execução em um contêiner em um dos agentes privados no cluster. Para localizar o host e a porta em que o contêiner está sendo executado, consulte o Marathon para as tarefas em execução:

curl localhost/marathon/v2/tasks

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

Agora faça uma conexão de terminal SSH (e não uma conexão por túnel) para o FQDN de gerenciamento do cluster. Uma vez conectado, faça a solicitação a seguir substituindo os valores corretos de host e ports:

curl http://host:ports

A saída do servidor Nginx deverá ser semelhante à seguinte:

Nginx from container

Dimensionar seus contêineres

Você pode usar a API do Marathon para expandir ou reduzir horizontalmente as implantações de aplicativos. No exemplo anterior, você implantou uma instância de um aplicativo. Vamos expandir essa saída para três instâncias de um aplicativo. Para fazer isso, crie um arquivo JSON usando o texto JSON a seguir e armazene-o em um local acessível.

{ "instances": 3 }

De sua conexão por túnel, execute o comando a seguir para escalar horizontalmente o aplicativo.

Observação

O URI é http://localhost/marathon/v2/apps/ seguido pela ID do aplicativo a ser dimensionado. Se você estiver usando o exemplo Nginx fornecido aqui, o URI será 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 de extremidade do Marathon para aplicativos. Você vê que agora há três contêineres Nginx.

curl localhost/marathon/v2/apps

Comandos equivalentes do PowerShell

Você pode executar essas mesmas ações usando comandos do PowerShell em um sistema Windows.

Para saber mais sobre o cluster DC/OS, como nomes e status de agentes, execute o comando a seguir:

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

Você implanta os contêineres formatados pelo Docker por meio do Marathon usando um arquivo JSON que descreve a implementação planejada. O exemplo a seguir implanta o contêiner Nginx, associando a porta 80 do agente DC/OS à porta 80 do contêiner.

{
  "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 contêiner Docker formatado, armazene o arquivo JSON em um local acessível. Em seguida, para implantar o contêiner, execute o comando a seguir. Especifique o caminho para o arquivo JSON (neste exemplo, marathon.json).

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

Você também pode usar a API do Marathon para expandir ou reduzir horizontalmente as implantações de aplicativos. No exemplo anterior, você implantou uma instância de um aplicativo. Vamos expandir essa saída para três instâncias de um aplicativo. Para fazer isso, crie um arquivo JSON usando o texto JSON a seguir e armazene-o em um local acessível.

{ "instances": 3 }

Execute o comando a seguir para escalar horizontalmente o aplicativo:

Observação

O URI é http://localhost/marathon/v2/apps/ seguido pela ID do aplicativo a ser dimensionado. Se você estiver usando o exemplo Nginx fornecido aqui, o URI será http://localhost/marathon/v2/apps/nginx.

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

Próximas etapas