+jpeach

The polling mechanism is used by the "disk/du" isolator to handle the case
where we don't have filesystem support for enforcing a quota on a
per-directory basis. I believe the "disk/xfs" isolator will stop writes
with EDQUOT without killing the task:

http://mesos.apache.org/documentation/latest/isolators/disk-xfs/

On Tue, Nov 28, 2017 at 1:19 PM, Gabriel Hartmann <[email protected]>
wrote:

> I agree with pretty much everything Hendrik just said with the exception
> of the use of disk quota.  The polling mechanism employed for enforcing
> disk usage implies that any breach of the disk usage limit by a Task also
> implies loss of access to that data forever.  This is true for ROOT volumes
> at least.  MOUNT volumes can be configured to map to "real" devices which
> can provide normal write failures when exceeding disk limits instead of
> essentially revoking all access to data forever.
>
> On Mon, Nov 27, 2017 at 11:34 PM Hendrik Haddorp <[email protected]>
> wrote:
>
>> As said, I only use persistent volumes with my only scheduler straight
>> on Mesos so do not exactly know how this works in Marathon...
>>
>> The persistent volume is created on a Mesos agent and basically ends up
>> being a folder on that hosts disk. So yes, you can not use the volume on
>> a different agent/slave. For marathon you would need to set a hostname
>> constraint that makes sure the same host is used when restarting the
>> task. You won't be able to use fail over to different agents just have
>> Marathon restart your task once it fails. Also only one task at a time
>> can have the volume bound.
>>
>> Yes, you can achieve persistence in pretty much the same way by using a
>> hostpath but then you are using implicit knowledge about your
>> environment, which is not very clean in my opinion, and thus have a
>> tighter coupling. The nice thing about persistent volumes is that they
>> are managed by Mesos. I do not need to tell the Mesos admin that I need
>> space at some location. I do not need to do something special if I have
>> multiple instances running as they get all their own directory. And I
>> can programatically destroy the volume and then the directory on the
>> host gets deleted again (at least since Mesos 1.0). So in my opinion the
>> usage of persistent volumes is much cleaner. But there are certainly use
>> cases that do not really work with them, like being able to fail over to
>> different host. For that you would wither need a shared network mount or
>> storage like HDFS. Btw, the Mesos containerizer should also enforce disk
>> quotas so your task would not be able to fill the filesystem.
>>
>> On 27.11.2017 16:11, Dino Lokmic wrote:
>> > yes I did. So I don't have to prepare it before task? I can't use
>> > volume created on slave A, from slave B
>> >
>> > Once task fails where will it be restarted? Do I have to specify host?
>> >
>> > If I do, it means I can achieve "persistence" same way I deploy now,
>> > by specifying hostpath for volume and hostname
>> >
>> > ....
>> >   "constraints": [
>> >     [
>> >       "hostname",
>> >       "CLUSTER",
>> >       "MYHOSTNAME"
>> >     ]
>> >   ],
>> >   "container": {
>> >     "type": "DOCKER",
>> >     "volumes": [
>> >       {
>> >         "containerPath": "/opt/storm/storm-local",
>> >         "hostPath": "/opt/docker_data/storm/storm-local",
>> >         "mode": "RW"
>> >       },
>> >       {
>> >         "containerPath": "/opt/storm/logs",
>> >         "hostPath": "/opt/docker_logs/storm/logs",
>> >         "mode": "RW"
>> >       },
>> >       {
>> >         "containerPath": "/home/xx/runtime/storm",
>> >         "hostPath": "/home/xx/runtime/storm",
>> >         "mode": "RO"
>> >       }
>> >     ],
>> >     "docker": {
>> >       "image": "xxx/storm-1.1.0",
>> >       "network": "HOST",
>> >       "portMappings": [],
>> >       "privileged": false,
>> >       "parameters": [],
>> >       "forcePullImage": true
>> >     }
>> >   },
>> >
>> > ....
>> >
>> >
>> >
>> > On Mon, Nov 27, 2017 at 3:05 PM, Hendrik Haddorp
>> > <[email protected] <mailto:[email protected]>> wrote:
>> >
>> >     I have my own scheduler that is performing a create operation. As
>> >     you are using Marathon this call would have to be done by Marathon.
>> >     Did you read
>> >     https://mesosphere.github.io/marathon/docs/persistent-volumes.html
>> >     <https://mesosphere.github.io/marathon/docs/persistent-volumes.html>
>> ?
>> >
>> >     On 27.11.2017 14:59, Dino Lokmic wrote:
>> >
>> >         @hendrik
>> >
>> >         How did you create this
>> >         "my-volume-227927c2-3266-412b-8572-92c5c93c051a" volume?
>> >
>> >         On Mon, Nov 27, 2017 at 7:59 AM, Hendrik Haddorp
>> >         <[email protected] <mailto:[email protected]>
>> >         <mailto:[email protected]
>> >         <mailto:[email protected]>>> wrote:
>> >
>> >             Hi,
>> >
>> >             I'm using persistent volumes directly on Mesos, without
>> >         Marathon.
>> >             For that the scheduler (like Marathon) has to first
>> >         reserve disk
>> >             space and then create a persistent volume with that. The
>> next
>> >             resource offer message then contain the volume in "disk"
>> >         resource
>> >             part of the offer. Now you can start your task. In the
>> >         request you
>> >             would need to include the resources and for the
>> >         "container" part
>> >             of the request you would have:
>> >                 volumes {
>> >                     container_path: "/mount/point/in/container"
>> >                     host_path:
>> >         "my-volume-227927c2-3266-412b-8572-92c5c93c051a"
>> >                     mode: RW
>> >                 }
>> >
>> >             The container path is the mount point in your container
>> >         and the
>> >             host path is the id of your persistent volume.
>> >
>> >             In case you use marathon the documentation should be this:
>> >         https://mesosphere.github.io/marathon/docs/persistent-
>> volumes.html
>> >         <https://mesosphere.github.io/marathon/docs/persistent-
>> volumes.html>
>> >
>> >         <https://mesosphere.github.io/marathon/docs/persistent-
>> volumes.html
>> >         <https://mesosphere.github.io/marathon/docs/persistent-
>> volumes.html>>
>> >
>> >             regards,
>> >             Hendrik
>> >
>> >
>> >             On 23.11.2017 10:00, Dino Lokmic wrote:
>> >
>> >                 I have few machines on Linode and I run Mesos there. Can
>> >                 someone explain to me, how to set volumes right.
>> >
>> >                 Now I run taks via marathon like this
>> >
>> >                 ...
>> >
>> >                 "constraints": [
>> >                     [
>> >                       "hostname",
>> >                       "CLUSTER",
>> >                       "HOSTNAME"
>> >                     ]
>> >                   ],
>> >                   "container": {
>> >                     "type": "DOCKER",
>> >                     "volumes": [
>> >                       {
>> >                         "containerPath": "/opt/storm/storm-local",
>> >                         "hostPath": "/opt/docker_data/storm/storm-
>> local",
>> >                         "mode": "RW"
>> >                       }
>> >                     ],
>> >                     "docker": {
>> >                       "image": "xxxx",
>> >                       "network": "HOST",
>> >                       "portMappings": [],
>> >                       "privileged": false,
>> >                       "parameters": [],
>> >                       "forcePullImage": true
>> >                     }
>> >                   },
>> >                 ...
>> >
>> >                 So if task is restarted I can be sure it has access to
>> >                 previously used data.
>> >                 You can see I have scaling problem and my task is
>> >         depending on
>> >                 this node.
>> >
>> >                 I would like for my apps to be node independent and
>> >         also that
>> >                 they have redundant data.
>> >
>> >                 What is best practice for this?
>> >
>> >                 I want to scale aplication to 2 instances, I1 and I2
>> >
>> >                 Instance I1 runs on agent A1 and uses volume V1
>> >                 Instance I2 runs on agent A2 and uses volume V2
>> >
>> >                 If agent A1 stops, I1 is restared to A3 and uses V1
>> >                 If V1 failes I1 uses copy of data from V3...
>> >
>> >
>> >                 Can someone point to article describing this, or at
>> >         least give
>> >                 me few "keywords"
>> >
>> >
>> >                 Thanks
>> >
>> >
>> >
>> >
>> >
>> >
>>
>>

Reply via email to