(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:
- Mesosphere DC/OS
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:
- Como implantar um cluster do Serviço de Contêiner do Azure
- Conexão a um cluster do Serviço de Contêiner do Azure
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:
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'