(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:
- Mesosfera DC/OS
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:
- Implementar um cluster do Serviço de Contentor do Azure
- Ligar a um cluster do Serviço de Contentor do Azure
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:
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'