- DC/OS, Azure a cloud native platforma (1): Úvod
- DC/OS, Azure a cloud native platforma (2): Start DC/OS v Azure
- DC/OS, Azure a cloud native platforma (3): Dlouhohrající aplikace s Marathon
V předchozím díle jsme si popsali Mesosphere DC/OS, Apache Mesos i projekt Marathon. Dnes už se chceme na DC/OS podívat konkrétně a tak jej musíme někde nainstalovat. Zvolil jsem velmi jednoduchou variantu – zprovoznění kompletního clusteru jednoduše přímo v Azure Container Service.
Provisioning DC/OS v Azure
Můžeme použít GUI portálu a nebo ARM šablonu. Kloním se ke druhé variantě, protože můj Azure rozpočet je omezený a při studiu DC/OS chci vždy sestavit cluster a pak ho zase smazat. Žádné běžící instance přes noc, za které bych zbytečně platil. ARM šablonu nemusíme vymýšlet, je k dispozici v https://github.com/Azure/azure-quickstart-templates/tree/master/101-acs-dcos
Tahle vypadá:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "dnsNamePrefix": { "type": "string", "metadata": { "description": "Sets the Domain name prefix for the cluster. The concatenation of the domain name and the regionalized DNS zone make up the fully qualified domain name associated with the public IP address." } }, "agentCount": { "type": "int", "defaultValue": 1, "metadata": { "description": "The number of agents for the cluster. This value can be from 1 to 100 (note, for DC/OS clusters you will also get 1 or 2 public agents in addition to these seleted masters)" }, "minValue":1, "maxValue":100 }, "agentVMSize": { "type": "string", "defaultValue": "Standard_D2", "allowedValues": [ "Standard_A0", "Standard_A1", "Standard_A2", "Standard_A3", "Standard_A4", "Standard_A5", "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A9", "Standard_A10", "Standard_A11", "Standard_D1", "Standard_D2", "Standard_D3", "Standard_D4", "Standard_D11", "Standard_D12", "Standard_D13", "Standard_D14", "Standard_D1_v2", "Standard_D2_v2", "Standard_D3_v2", "Standard_D4_v2", "Standard_D5_v2", "Standard_D11_v2", "Standard_D12_v2", "Standard_D13_v2", "Standard_D14_v2", "Standard_G1", "Standard_G2", "Standard_G3", "Standard_G4", "Standard_G5", "Standard_DS1", "Standard_DS2", "Standard_DS3", "Standard_DS4", "Standard_DS11", "Standard_DS12", "Standard_DS13", "Standard_DS14", "Standard_GS1", "Standard_GS2", "Standard_GS3", "Standard_GS4", "Standard_GS5" ], "metadata": { "description": "The size of the Virtual Machine." } }, "linuxAdminUsername": { "type": "string", "defaultValue": "azureuser", "metadata": { "description": "User name for the Linux Virtual Machines." } }, "orchestratorType": { "type": "string", "defaultValue": "DCOS", "allowedValues": [ "DCOS", "Swarm" ], "metadata": { "description": "The type of orchestrator used to manage the applications on the cluster." } }, "masterCount": { "type": "int", "defaultValue": 1, "allowedValues": [ 1, 3, 5 ], "metadata": { "description": "The number of DC/OS masters for the cluster." } }, "sshRSAPublicKey": { "type": "string", "metadata": { "description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm'" } }, "enableDiagnostics": { "type": "bool", "defaultValue": false, "metadata": { "description": "Enable or disable VM diagnostics." } } }, "variables": { "adminUsername":"[parameters('linuxAdminUsername')]", "agentCount":"[parameters('agentCount')]", "agentsEndpointDNSNamePrefix":"[concat(parameters('dnsNamePrefix'),'agents')]", "agentVMSize":"[parameters('agentVMSize')]", "masterCount":"[parameters('masterCount')]", "mastersEndpointDNSNamePrefix":"[concat(parameters('dnsNamePrefix'),'mgmt')]", "orchestratorType":"[parameters('orchestratorType')]", "sshRSAPublicKey":"[parameters('sshRSAPublicKey')]", "enableDiagnostics":"[parameters('enableDiagnostics')]" }, "resources": [ { "apiVersion": "2016-03-30", "type": "Microsoft.ContainerService/containerServices", "location": "[resourceGroup().location]", "name":"[concat('containerservice-',resourceGroup().name)]", "properties": { "orchestratorProfile": { "orchestratorType": "[variables('orchestratorType')]" }, "masterProfile": { "count": "[variables('masterCount')]", "dnsPrefix": "[variables('mastersEndpointDNSNamePrefix')]" }, "agentPoolProfiles": [ { "name": "agentpools", "count": "[variables('agentCount')]", "vmSize": "[variables('agentVMSize')]", "dnsPrefix": "[variables('agentsEndpointDNSNamePrefix')]" } ], "diagnosticsProfile": { "vmDiagnostics" : { "enabled": "[variables('enableDiagnostics')]" } }, "linuxProfile": { "adminUsername": "[variables('adminUsername')]", "ssh": { "publicKeys": [ { "keyData": "[variables('sshRSAPublicKey')]" } ] } } } } ], "outputs": { "masterFQDN": { "type": "string", "value": "[reference(concat('Microsoft.ContainerService/containerServices/', 'containerservice-', resourceGroup().name)).masterProfile.fqdn]" }, "sshMaster0": { "type": "string", "value": "[concat('ssh ', variables('adminUsername'), '@', reference(concat('Microsoft.ContainerService/containerServices/', 'containerservice-', resourceGroup().name)).masterProfile.fqdn, ' -A -p 2200')]" }, "agentFQDN": { "type": "string", "value": "[reference(concat('Microsoft.ContainerService/containerServices/', 'containerservice-', resourceGroup().name)).agentPoolProfiles[0].fqdn]" } } }
Připravme si soubor s parametry a uložme si jako azuredeploy.parameters.json. Vyplníme tam zejména velikost clusteru (počet nodů), velikost VM jednotlivých nodů a SSH klíč pro správu clusteru.
{ "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "dnsNamePrefix": { "value": "tomuvdcos" }, "agentCount": { "value": 3 }, "agentVMSize": { "value": "Standard_A2" }, "linuxAdminUsername": { "value": "tomas" }, "orchestratorType": { "value": "DCOS" }, "masterCount": { "value": 3 }, "sshRSAPublicKey": { "value": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFhm1FUhzt/9roX7SmT/dI+vkpyQVZp3Oo5HC23YkUVtpmTdHje5oBV0LMLBB1Q5oSNMCWiJpdfD4VxURC31yet4mQxX2DFYz8oEUh0Vpv+9YWwkEhyDy4AVmVKVoISo5rAsl3JLbcOkSqSO8FaEfO5KIIeJXB6yGI3UQOoL1owMR9STEnI2TGPZzvk/BdRE73gJxqqY0joyPSWOMAQ75Xr9ddWHul+v//hKjibFuQF9AFzaEwNbW5HxDsQj8gvdG/5d6mt66SfaY+UWkKldM4vRiZ1w11WlyxRJn5yZNTeOxIYU4WLrDtvlBklCMgB7oF0QfiqahauOEo6m5Di2Ex Generated-by-Nova" } } }
Máme připravené vše potřebné. Stačí se nalogovat do Azure, vytvořit si resource group a šablonu tam poslat:
Login-AzureRmAccount New-AzureRmResourceGroup -Name dcos -Location westeurope New-AzureRmResourceGroupDeployment -ResourceGroupName dcos -TemplateFile "C:\Azure\dcos\azuredeploy.json" -TemplateParameterFile "C:\Azure\dcos\azuredeploy.parameters.json"
Po pár desítkách minutách bude hotova – naše kontejnerové prostředí je připraveno. Podívejte se na output našeho příkazu, najdeme tam informace o připojení.
Outputs : Name Type Value =============== ========================= ========== masterFQDN String tomuvdcosmgmt.westeurope.cloudapp.azure.com sshMaster0 String ssh tomas@tomuvdcosmgmt.westeurope.cloudapp.azure.com -A -p 2200 agentFQDN String tomuvdcosagents.westeurope.cloudapp.azure.com
Vypišme si zdroje v naší resource group – uvidíme naše nody, balancery, agenty s venkovní IP.
Find-AzureRmResource -ResourceNameContains dcos | Format-Table -Property Name Name ---- dcos-master-availabilitySet-7ADE8A17 dcos-master-7ADE8A17-0 dcos-master-7ADE8A17-0/linuxdiagnostic dcos-master-7ADE8A17-1 dcos-master-7ADE8A17-1/linuxdiagnostic dcos-master-7ADE8A17-2 dcos-master-7ADE8A17-2/linuxdiagnostic dcos-master-7ADE8A17-2/waitforleader dcos-agent-private-7ADE8A17-vmss0 dcos-agent-public-7ADE8A17-vmss0 containerservice-dcos dcos-agent-lb-7ADE8A17 dcos-master-lb-7ADE8A17 dcos-master-7ADE8A17-nic-0 dcos-master-7ADE8A17-nic-1 dcos-master-7ADE8A17-nic-2 dcos-agent-private-nsg-7ADE8A17 dcos-agent-public-nsg-7ADE8A17 dcos-master-nsg-7ADE8A17 dcos-agent-ip-tomuvdcosagents-7ADE8A17 dcos-master-ip-tomuvdcosmgmt-7ADE8A17 dcos-vnet-7ADE8A17
Připojme se do clusteru
Z bezpečnostních důvodů se nemůžeme připojit přímo na webové rozhraní DC/OS. Můžeme se ovšem přes SSH klíč připojit na management node clusteru a v rámci tohoto SSH připojení vytvořit tunel, který protáhneme port 80 z management nodu (tam běží GUI) na nějaký lokální port v počítači (já použiji 82). To uděláta v Linuxu použitím ssh příkazu, ve Windows použijeme Putty.
Vytvořte připojení na master management node na portu 2200:
Zapněte ověřování klíčem a agent forwarding (namiřte Putty na váš privátní klíč odpovídající tomu veřejnému, který jste zadali v ARM šabloně):
Přidejme tunelování z portu 80 na lokální 82:
Otevřete prohlížeč a připojte se na lokální počítač na portu 82 – naběhne vám interface DC/OS.
Kromě GUI budeme potřebovat také příkazovou řádku. Návod na stažení najdete přímo v GUI a také tam je konkrétní příkaz, kterým pak dcos konzoli napojíme na cluster.
Připojte si dcos a vypišme si třeba seznam nodů.
E:\>dcos config set core.dcos_url http://localhost:82 E:\>dcos node HOSTNAME IP ID 10.0.0.10 10.0.0.10 160aab92-7ae2-4cea-9208-dea5acaf0400-S1 10.0.0.6 10.0.0.6 160aab92-7ae2-4cea-9208-dea5acaf0400-S0 10.0.0.9 10.0.0.9 160aab92-7ae2-4cea-9208-dea5acaf0400-S4 10.32.0.5 10.32.0.5 160aab92-7ae2-4cea-9208-dea5acaf0400-S5 10.32.0.6 10.32.0.6 160aab92-7ae2-4cea-9208-dea5acaf0400-S3 10.32.0.8 10.32.0.8 160aab92-7ae2-4cea-9208-dea5acaf0400-S2
Pro dnešek nám to stačí. Podařilo se nám rozběhat poměrně slušný DC/OS cluster s využitím Azure Container Service a připojili jsme se na něj. Příště už se budeme věnovat samotnému DC/OS.