I just wanted to test some latencies from a DCOS cluster.
The first suggestion to run some commands in an existing container comes from DCOS documentation and is dcos task exec
. But it only works for containers launched using the Universal Container Runtime. The second suggestion, if your nodes run docker, is to SSH into the nodes and then docker exec
a shell in a container to do some tests. Although this means you need to have access to the nodes themselves (private key/password), something a sysadmin won't give you without a very good reason.
El cheapo attempt.
If you have access to the dcos cluster you can always start a new app using the DCOS cli tool. An app with only one container with ssh, curl, and your public ssh key in authorized_keys
.
FROM alpine:latest RUN apk --no-cache add openssh curl && \ ssh-keygen -A COPY authorized_keys /root/.ssh/authorized_keys ENTRYPOINT ["/usr/sbin/sshd", "-De"]
Publish it somewhere on the public internet (I used the public docker registry at hub.docker.com). And prepare a new task file (task.json
) to launch it. This task has the id staging-authentication-latencies
that we will use later.
{ "id": "staging-authentication-latencies", "container": { "type": "DOCKER", "docker": { "image": "docker.io/graffic/ssh:latest", "network": "BRIDGE", "portMappings": [ { "hostPort": 22022, "containerPort": 22, "protocol": "tcp" } ], "privileged": false, "force_pull_image": true } }, "instances": 1, "cpus": 0.5, "mem": 512 }
Now we can:
- Start the new app with
dcos marathon app add task.json
- See how the deploy is going:
dcos marathon app show staging-authentication-latencies
Find the task
entry and get the host
IP. You will need that to connect via ssh:
{ "tasks": [ { "appId": "/staging-authentication-latencies", "host": "X.X.X" } ] }
- SSH into the container:
ssh -p 22022 root@host_you_got_from_app_show
and run your tests from there. - Remove the app when you're done:
dcos marathon app remove staging-authentication-latencies