mirror of https://github.com/k3s-io/k3s
1631 lines
54 KiB
Protocol Buffer
1631 lines
54 KiB
Protocol Buffer
/**
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package mesosproto;
|
|
|
|
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
|
|
|
|
option (gogoproto.gostring_all) = true;
|
|
option (gogoproto.equal_all) = true;
|
|
option (gogoproto.verbose_equal_all) = true;
|
|
option (gogoproto.goproto_stringer_all) = false;
|
|
option (gogoproto.stringer_all) = true;
|
|
option (gogoproto.populate_all) = true;
|
|
option (gogoproto.testgen_all) = true;
|
|
option (gogoproto.benchgen_all) = true;
|
|
option (gogoproto.marshaler_all) = true;
|
|
option (gogoproto.sizer_all) = true;
|
|
option (gogoproto.unmarshaler_all) = true;
|
|
|
|
/**
|
|
* Status is used to indicate the state of the scheduler and executor
|
|
* driver after function calls.
|
|
*/
|
|
enum Status {
|
|
DRIVER_NOT_STARTED = 1;
|
|
DRIVER_RUNNING = 2;
|
|
DRIVER_ABORTED = 3;
|
|
DRIVER_STOPPED = 4;
|
|
}
|
|
|
|
|
|
/**
|
|
* A unique ID assigned to a framework. A framework can reuse this ID
|
|
* in order to do failover (see MesosSchedulerDriver).
|
|
*/
|
|
message FrameworkID {
|
|
required string value = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* A unique ID assigned to an offer.
|
|
*/
|
|
message OfferID {
|
|
required string value = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* A unique ID assigned to a slave. Currently, a slave gets a new ID
|
|
* whenever it (re)registers with Mesos. Framework writers shouldn't
|
|
* assume any binding between a slave ID and and a hostname.
|
|
*/
|
|
message SlaveID {
|
|
required string value = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* A framework generated ID to distinguish a task. The ID must remain
|
|
* unique while the task is active. However, a framework can reuse an
|
|
* ID _only_ if a previous task with the same ID has reached a
|
|
* terminal state (e.g., TASK_FINISHED, TASK_LOST, TASK_KILLED, etc.).
|
|
*/
|
|
message TaskID {
|
|
required string value = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* A framework generated ID to distinguish an executor. Only one
|
|
* executor with the same ID can be active on the same slave at a
|
|
* time.
|
|
*/
|
|
message ExecutorID {
|
|
required string value = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* A slave generated ID to distinguish a container. The ID must be unique
|
|
* between any active or completed containers on the slave. In particular,
|
|
* containers for different runs of the same (framework, executor) pair must be
|
|
* unique.
|
|
*/
|
|
message ContainerID {
|
|
required string value = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* Represents time since the epoch, in nanoseconds.
|
|
*/
|
|
message TimeInfo {
|
|
required int64 nanoseconds = 1;
|
|
|
|
// TODO(josephw): Add time zone information, if necessary.
|
|
}
|
|
|
|
|
|
/**
|
|
* Represents duration in nanoseconds.
|
|
*/
|
|
message DurationInfo {
|
|
required int64 nanoseconds = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* A network address.
|
|
*
|
|
* TODO(bmahler): Use this more widely.
|
|
*/
|
|
message Address {
|
|
// May contain a hostname, IP address, or both.
|
|
optional string hostname = 1;
|
|
optional string ip = 2;
|
|
|
|
required int32 port = 3;
|
|
}
|
|
|
|
|
|
/**
|
|
* Represents a URL.
|
|
*/
|
|
message URL {
|
|
required string scheme = 1;
|
|
required Address address = 2;
|
|
optional string path = 3;
|
|
repeated Parameter query = 4;
|
|
optional string fragment = 5;
|
|
}
|
|
|
|
|
|
/**
|
|
* Represents an interval, from a given start time over a given duration.
|
|
* This interval pertains to an unavailability event, such as maintenance,
|
|
* and is not a generic interval.
|
|
*/
|
|
message Unavailability {
|
|
required TimeInfo start = 1;
|
|
|
|
// When added to `start`, this represents the end of the interval.
|
|
// If unspecified, the duration is assumed to be infinite.
|
|
optional DurationInfo duration = 2;
|
|
|
|
// TODO(josephw): Add additional fields for expressing the purpose and
|
|
// urgency of the unavailability event.
|
|
}
|
|
|
|
|
|
/**
|
|
* Represents a single machine, which may hold one or more slaves.
|
|
*
|
|
* NOTE: In order to match a slave to a machine, both the `hostname` and
|
|
* `ip` must match the values advertised by the slave to the master.
|
|
* Hostname is not case-sensitive.
|
|
*/
|
|
message MachineID {
|
|
optional string hostname = 1;
|
|
optional string ip = 2;
|
|
}
|
|
|
|
|
|
/**
|
|
* Holds information about a single machine, its `mode`, and any other
|
|
* relevant information which may affect the behavior of the machine.
|
|
*/
|
|
message MachineInfo {
|
|
// Describes the several states that a machine can be in. A `Mode`
|
|
// applies to a machine and to all associated slaves on the machine.
|
|
enum Mode {
|
|
// In this mode, a machine is behaving normally;
|
|
// offering resources, executing tasks, etc.
|
|
UP = 1;
|
|
|
|
// In this mode, all slaves on the machine are expected to cooperate with
|
|
// frameworks to drain resources. In general, draining is done ahead of
|
|
// a pending `unavailability`. The resources should be drained so as to
|
|
// maximize utilization prior to the maintenance but without knowingly
|
|
// violating the frameworks' requirements.
|
|
DRAINING = 2;
|
|
|
|
// In this mode, a machine is not running any tasks and will not offer
|
|
// any of its resources. Slaves on the machine will not be allowed to
|
|
// register with the master.
|
|
DOWN = 3;
|
|
}
|
|
|
|
required MachineID id = 1;
|
|
optional Mode mode = 2;
|
|
|
|
// Signifies that the machine may be unavailable during the given interval.
|
|
// See comments in `Unavailability` and for the `unavailability` fields
|
|
// in `Offer` and `InverseOffer` for more information.
|
|
optional Unavailability unavailability = 3;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a framework.
|
|
*/
|
|
message FrameworkInfo {
|
|
// Used to determine the Unix user that an executor or task should
|
|
// be launched as. If the user field is set to an empty string Mesos
|
|
// will automagically set it to the current user.
|
|
required string user = 1;
|
|
|
|
// Name of the framework that shows up in the Mesos Web UI.
|
|
required string name = 2;
|
|
|
|
// Note that 'id' is only available after a framework has
|
|
// registered, however, it is included here in order to facilitate
|
|
// scheduler failover (i.e., if it is set then the
|
|
// MesosSchedulerDriver expects the scheduler is performing
|
|
// failover).
|
|
optional FrameworkID id = 3;
|
|
|
|
// The amount of time that the master will wait for the scheduler to
|
|
// failover before it tears down the framework by killing all its
|
|
// tasks/executors. This should be non-zero if a framework expects
|
|
// to reconnect after a failover and not lose its tasks/executors.
|
|
optional double failover_timeout = 4 [default = 0.0];
|
|
|
|
// If set, framework pid, executor pids and status updates are
|
|
// checkpointed to disk by the slaves. Checkpointing allows a
|
|
// restarted slave to reconnect with old executors and recover
|
|
// status updates, at the cost of disk I/O.
|
|
optional bool checkpoint = 5 [default = false];
|
|
|
|
// Used to group frameworks for allocation decisions, depending on
|
|
// the allocation policy being used.
|
|
optional string role = 6 [default = "*"];
|
|
|
|
// Used to indicate the current host from which the scheduler is
|
|
// registered in the Mesos Web UI. If set to an empty string Mesos
|
|
// will automagically set it to the current hostname if one is
|
|
// available.
|
|
optional string hostname = 7;
|
|
|
|
// This field should match the credential's principal the framework
|
|
// uses for authentication. This field is used for framework API
|
|
// rate limiting and dynamic reservations. It should be set even
|
|
// if authentication is not enabled if these features are desired.
|
|
optional string principal = 8;
|
|
|
|
// This field allows a framework to advertise its web UI, so that
|
|
// the Mesos web UI can link to it. It is expected to be a full URL,
|
|
// for example http://my-scheduler.example.com:8080/.
|
|
optional string webui_url = 9;
|
|
|
|
message Capability {
|
|
enum Type {
|
|
// Receive offers with revocable resources. See 'Resource'
|
|
// message for details.
|
|
// TODO(vinod): This is currently a no-op.
|
|
REVOCABLE_RESOURCES = 1;
|
|
}
|
|
|
|
required Type type = 1;
|
|
}
|
|
|
|
// This field allows a framework to advertise its set of
|
|
// capabilities (e.g., ability to receive offers for revocable
|
|
// resources).
|
|
repeated Capability capabilities = 10;
|
|
|
|
// Labels are free-form key value pairs supplied by the framework
|
|
// scheduler (e.g., to describe additional functionality offered by
|
|
// the framework). These labels are not interpreted by Mesos itself.
|
|
optional Labels labels = 11;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a health check for a task or executor (or any arbitrary
|
|
* process/command). A "strategy" is picked by specifying one of the
|
|
* optional fields; currently only 'command' is supported.
|
|
* Specifying more than one strategy is an error.
|
|
*/
|
|
message HealthCheck {
|
|
// Describes an HTTP health check. This is not fully implemented and not
|
|
// recommended for use - see MESOS-2533.
|
|
message HTTP {
|
|
// Port to send the HTTP request.
|
|
required uint32 port = 1;
|
|
|
|
// HTTP request path.
|
|
optional string path = 2 [default = "/"];
|
|
|
|
// TODO(benh): Implement:
|
|
// Whether or not to use HTTPS.
|
|
// optional bool ssl = 3 [default = false];
|
|
|
|
// Expected response statuses. Not specifying any statuses implies
|
|
// that any returned status is acceptable.
|
|
repeated uint32 statuses = 4;
|
|
|
|
// TODO(benh): Include an 'optional bytes data' field for checking
|
|
// for specific data in the response.
|
|
}
|
|
|
|
// HTTP health check - not yet recommended for use, see MESOS-2533.
|
|
optional HTTP http = 1;
|
|
|
|
// TODO(benh): Consider adding a URL health check strategy which
|
|
// allows doing something similar to the HTTP strategy but
|
|
// encapsulates all the details in a single string field.
|
|
|
|
// TODO(benh): Other possible health check strategies could include
|
|
// one for TCP/UDP.
|
|
|
|
// Amount of time to wait until starting the health checks.
|
|
optional double delay_seconds = 2 [default = 15.0];
|
|
|
|
// Interval between health checks.
|
|
optional double interval_seconds = 3 [default = 10.0];
|
|
|
|
// Amount of time to wait for the health check to complete.
|
|
optional double timeout_seconds = 4 [default = 20.0];
|
|
|
|
// Number of consecutive failures until considered unhealthy.
|
|
optional uint32 consecutive_failures = 5 [default = 3];
|
|
|
|
// Amount of time to allow failed health checks since launch.
|
|
optional double grace_period_seconds = 6 [default = 10.0];
|
|
|
|
// Command health check.
|
|
optional CommandInfo command = 7;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a command, executed via: '/bin/sh -c value'. Any URIs specified
|
|
* are fetched before executing the command. If the executable field for an
|
|
* uri is set, executable file permission is set on the downloaded file.
|
|
* Otherwise, if the downloaded file has a recognized archive extension
|
|
* (currently [compressed] tar and zip) it is extracted into the executor's
|
|
* working directory. This extraction can be disabled by setting `extract` to
|
|
* false. In addition, any environment variables are set before executing
|
|
* the command (so they can be used to "parameterize" your command).
|
|
*/
|
|
message CommandInfo {
|
|
message URI {
|
|
required string value = 1;
|
|
optional bool executable = 2;
|
|
|
|
// In case the fetched file is recognized as an archive, extract
|
|
// its contents into the sandbox. Note that a cached archive is
|
|
// not copied from the cache to the sandbox in case extraction
|
|
// originates from an archive in the cache.
|
|
optional bool extract = 3 [default = true];
|
|
|
|
// If this field is "true", the fetcher cache will be used. If not,
|
|
// fetching bypasses the cache and downloads directly into the
|
|
// sandbox directory, no matter whether a suitable cache file is
|
|
// available or not. The former directs the fetcher to download to
|
|
// the file cache, then copy from there to the sandbox. Subsequent
|
|
// fetch attempts with the same URI will omit downloading and copy
|
|
// from the cache as long as the file is resident there. Cache files
|
|
// may get evicted at any time, which then leads to renewed
|
|
// downloading. See also "docs/fetcher.md" and
|
|
// "docs/fetcher-cache-internals.md".
|
|
optional bool cache = 4;
|
|
}
|
|
|
|
// Describes a container.
|
|
// Not all containerizers currently implement ContainerInfo, so it
|
|
// is possible that a launched task will fail due to supplying this
|
|
// attribute.
|
|
// NOTE: The containerizer API is currently in an early beta or
|
|
// even alpha state. Some details, like the exact semantics of an
|
|
// "image" or "options" are not yet hardened.
|
|
// TODO(tillt): Describe the exact scheme and semantics of "image"
|
|
// and "options".
|
|
message ContainerInfo {
|
|
// URI describing the container image name.
|
|
required string image = 1;
|
|
|
|
// Describes additional options passed to the containerizer.
|
|
repeated string options = 2;
|
|
}
|
|
|
|
// NOTE: MesosContainerizer does currently not support this
|
|
// attribute and tasks supplying a 'container' will fail.
|
|
optional ContainerInfo container = 4;
|
|
|
|
repeated URI uris = 1;
|
|
|
|
optional Environment environment = 2;
|
|
|
|
// There are two ways to specify the command:
|
|
// 1) If 'shell == true', the command will be launched via shell
|
|
// (i.e., /bin/sh -c 'value'). The 'value' specified will be
|
|
// treated as the shell command. The 'arguments' will be ignored.
|
|
// 2) If 'shell == false', the command will be launched by passing
|
|
// arguments to an executable. The 'value' specified will be
|
|
// treated as the filename of the executable. The 'arguments'
|
|
// will be treated as the arguments to the executable. This is
|
|
// similar to how POSIX exec families launch processes (i.e.,
|
|
// execlp(value, arguments(0), arguments(1), ...)).
|
|
// NOTE: The field 'value' is changed from 'required' to 'optional'
|
|
// in 0.20.0. It will only cause issues if a new framework is
|
|
// connecting to an old master.
|
|
optional bool shell = 6 [default = true];
|
|
optional string value = 3;
|
|
repeated string arguments = 7;
|
|
|
|
// Enables executor and tasks to run as a specific user. If the user
|
|
// field is present both in FrameworkInfo and here, the CommandInfo
|
|
// user value takes precedence.
|
|
optional string user = 5;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes information about an executor. The 'data' field can be
|
|
* used to pass arbitrary bytes to an executor.
|
|
*/
|
|
message ExecutorInfo {
|
|
required ExecutorID executor_id = 1;
|
|
optional FrameworkID framework_id = 8; // TODO(benh): Make this required.
|
|
required CommandInfo command = 7;
|
|
// Executor provided with a container will launch the container
|
|
// with the executor's CommandInfo and we expect the container to
|
|
// act as a Mesos executor.
|
|
optional ContainerInfo container = 11;
|
|
repeated Resource resources = 5;
|
|
optional string name = 9;
|
|
|
|
// Source is an identifier style string used by frameworks to track
|
|
// the source of an executor. This is useful when it's possible for
|
|
// different executor ids to be related semantically.
|
|
// NOTE: Source is exposed alongside the resource usage of the
|
|
// executor via JSON on the slave. This allows users to import
|
|
// usage information into a time series database for monitoring.
|
|
optional string source = 10;
|
|
optional bytes data = 4;
|
|
|
|
// Service discovery information for the executor. It is not
|
|
// interpreted or acted upon by Mesos. It is up to a service
|
|
// discovery system to use this information as needed and to handle
|
|
// executors without service discovery information.
|
|
optional DiscoveryInfo discovery = 12;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a master. This will probably have more fields in the
|
|
* future which might be used, for example, to link a framework webui
|
|
* to a master webui.
|
|
*/
|
|
message MasterInfo {
|
|
required string id = 1;
|
|
|
|
// The IP address (only IPv4) as a packed 4-bytes integer,
|
|
// stored in network order. Deprecated, use `address.ip` instead.
|
|
required uint32 ip = 2;
|
|
|
|
// The TCP port the Master is listening on for incoming
|
|
// HTTP requests; deprecated, use `address.port` instead.
|
|
required uint32 port = 3 [default = 5050];
|
|
|
|
// In the default implementation, this will contain information
|
|
// about both the IP address, port and Master name; it should really
|
|
// not be relied upon by external tooling/frameworks and be
|
|
// considered an "internal" implementation field.
|
|
optional string pid = 4;
|
|
|
|
// The server's hostname, if available; it may be unreliable
|
|
// in environments where the DNS configuration does not resolve
|
|
// internal hostnames (eg, some public cloud providers).
|
|
// Deprecated, use `address.hostname` instead.
|
|
optional string hostname = 5;
|
|
|
|
// The running Master version, as a string; taken from the
|
|
// generated "master/version.hpp".
|
|
optional string version = 6;
|
|
|
|
// The full IP address (supports both IPv4 and IPv6 formats)
|
|
// and supersedes the use of `ip`, `port` and `hostname`.
|
|
// Since Mesos 0.24.
|
|
optional Address address = 7;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a slave. Note that the 'id' field is only available after
|
|
* a slave is registered with the master, and is made available here
|
|
* to facilitate re-registration. If checkpoint is set, the slave is
|
|
* checkpointing its own information and potentially frameworks'
|
|
* information (if a framework has checkpointing enabled).
|
|
*/
|
|
message SlaveInfo {
|
|
required string hostname = 1;
|
|
optional int32 port = 8 [default = 5051];
|
|
repeated Resource resources = 3;
|
|
repeated Attribute attributes = 5;
|
|
optional SlaveID id = 6;
|
|
// TODO(joerg84): Remove checkpoint field as with 0.22.0
|
|
// slave checkpointing is enabled for all slaves (MESOS-2317).
|
|
optional bool checkpoint = 7 [default = false];
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes an Attribute or Resource "value". A value is described
|
|
* using the standard protocol buffer "union" trick.
|
|
*/
|
|
message Value {
|
|
enum Type {
|
|
SCALAR = 0;
|
|
RANGES = 1;
|
|
SET = 2;
|
|
TEXT = 3;
|
|
}
|
|
|
|
message Scalar {
|
|
required double value = 1;
|
|
}
|
|
|
|
message Range {
|
|
required uint64 begin = 1;
|
|
required uint64 end = 2;
|
|
}
|
|
|
|
message Ranges {
|
|
repeated Range range = 1;
|
|
}
|
|
|
|
message Set {
|
|
repeated string item = 1;
|
|
}
|
|
|
|
message Text {
|
|
required string value = 1;
|
|
}
|
|
|
|
required Type type = 1;
|
|
optional Scalar scalar = 2;
|
|
optional Ranges ranges = 3;
|
|
optional Set set = 4;
|
|
optional Text text = 5;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes an attribute that can be set on a machine. For now,
|
|
* attributes and resources share the same "value" type, but this may
|
|
* change in the future and attributes may only be string based.
|
|
*/
|
|
message Attribute {
|
|
required string name = 1;
|
|
required Value.Type type = 2;
|
|
optional Value.Scalar scalar = 3;
|
|
optional Value.Ranges ranges = 4;
|
|
optional Value.Set set = 6;
|
|
optional Value.Text text = 5;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a resource on a machine. A resource can take on one of
|
|
* three types: scalar (double), a list of finite and discrete ranges
|
|
* (e.g., [1-10, 20-30]), or a set of items. A resource is described
|
|
* using the standard protocol buffer "union" trick.
|
|
*
|
|
* TODO(benh): Add better support for "expected" resources (e.g.,
|
|
* cpus, memory, disk, network).
|
|
*/
|
|
message Resource {
|
|
required string name = 1;
|
|
required Value.Type type = 2;
|
|
optional Value.Scalar scalar = 3;
|
|
optional Value.Ranges ranges = 4;
|
|
optional Value.Set set = 5;
|
|
optional string role = 6 [default = "*"];
|
|
|
|
message ReservationInfo {
|
|
// Describes a dynamic reservation. A dynamic reservation is
|
|
// acquired by an operator via the '/reserve' HTTP endpoint or by
|
|
// a framework via the offer cycle by sending back an
|
|
// 'Offer::Operation::Reserve' message.
|
|
// NOTE: We currently do not allow frameworks with role "*" to
|
|
// make dynamic reservations.
|
|
|
|
// This field indicates the principal of the operator or framework
|
|
// that reserved this resource. It is used in conjunction with the
|
|
// "unreserve" ACL to determine whether the entity attempting to
|
|
// unreserve this resource is permitted to do so.
|
|
// NOTE: This field should match the FrameworkInfo.principal of
|
|
// the framework that reserved this resource.
|
|
required string principal = 1;
|
|
}
|
|
|
|
// If this is set, this resource was dynamically reserved by an
|
|
// operator or a framework. Otherwise, this resource is either unreserved
|
|
// or statically reserved by an operator via the --resources flag.
|
|
optional ReservationInfo reservation = 8;
|
|
|
|
message DiskInfo {
|
|
// Describes a persistent disk volume.
|
|
// A persistent disk volume will not be automatically garbage
|
|
// collected if the task/executor/slave terminates, but is
|
|
// re-offered to the framework(s) belonging to the 'role'.
|
|
// A framework can set the ID (if it is not set yet) to express
|
|
// the intention to create a new persistent disk volume from a
|
|
// regular disk resource. To reuse a previously created volume, a
|
|
// framework can launch a task/executor when it receives an offer
|
|
// with a persistent volume, i.e., ID is set.
|
|
// NOTE: Currently, we do not allow a persistent disk volume
|
|
// without a reservation (i.e., 'role' should not be '*').
|
|
message Persistence {
|
|
// A unique ID for the persistent disk volume.
|
|
// NOTE: The ID needs to be unique per role on each slave.
|
|
required string id = 1;
|
|
}
|
|
|
|
optional Persistence persistence = 1;
|
|
|
|
// Describes how this disk resource will be mounted in the
|
|
// container. If not set, the disk resource will be used as the
|
|
// sandbox. Otherwise, it will be mounted according to the
|
|
// 'container_path' inside 'volume'. The 'host_path' inside
|
|
// 'volume' is ignored.
|
|
// NOTE: If 'volume' is set but 'persistence' is not set, the
|
|
// volume will be automatically garbage collected after
|
|
// task/executor terminates. Currently, if 'persistence' is set,
|
|
// 'volume' must be set.
|
|
optional Volume volume = 2;
|
|
}
|
|
|
|
optional DiskInfo disk = 7;
|
|
|
|
message RevocableInfo {}
|
|
|
|
// If this is set, the resources are revocable, i.e., any tasks or
|
|
// executors launched using these resources could get preempted or
|
|
// throttled at any time. This could be used by frameworks to run
|
|
// best effort tasks that do not need strict uptime or performance
|
|
// guarantees. Note that if this is set, 'disk' or 'reservation'
|
|
// cannot be set.
|
|
optional RevocableInfo revocable = 9;
|
|
}
|
|
|
|
/**
|
|
* When the network bandwidth caps are enabled and the container
|
|
* is over its limit, outbound packets may be either delayed or
|
|
* dropped completely either because it exceeds the maximum bandwidth
|
|
* allocation for a single container (the cap) or because the combined
|
|
* network traffic of multiple containers on the host exceeds the
|
|
* transmit capacity of the host (the share). We can report the
|
|
* following statistics for each of these conditions exported directly
|
|
* from the Linux Traffic Control Queueing Discipline.
|
|
*
|
|
* id : name of the limiter, e.g. 'tx_bw_cap'
|
|
* backlog : number of packets currently delayed
|
|
* bytes : total bytes seen
|
|
* drops : number of packets dropped in total
|
|
* overlimits : number of packets which exceeded allocation
|
|
* packets : total packets seen
|
|
* qlen : number of packets currently queued
|
|
* rate_bps : throughput in bytes/sec
|
|
* rate_pps : throughput in packets/sec
|
|
* requeues : number of times a packet has been delayed due to
|
|
* locking or device contention issues
|
|
*
|
|
* More information on the operation of Linux Traffic Control can be
|
|
* found at http://www.lartc.org/lartc.html.
|
|
*/
|
|
message TrafficControlStatistics {
|
|
required string id = 1;
|
|
optional uint64 backlog = 2;
|
|
optional uint64 bytes = 3;
|
|
optional uint64 drops = 4;
|
|
optional uint64 overlimits = 5;
|
|
optional uint64 packets = 6;
|
|
optional uint64 qlen = 7;
|
|
optional uint64 ratebps = 8;
|
|
optional uint64 ratepps = 9;
|
|
optional uint64 requeues = 10;
|
|
}
|
|
|
|
|
|
/**
|
|
* A snapshot of resource usage statistics.
|
|
*/
|
|
message ResourceStatistics {
|
|
required double timestamp = 1; // Snapshot time, in seconds since the Epoch.
|
|
|
|
optional uint32 processes = 30;
|
|
optional uint32 threads = 31;
|
|
|
|
// CPU Usage Information:
|
|
// Total CPU time spent in user mode, and kernel mode.
|
|
optional double cpus_user_time_secs = 2;
|
|
optional double cpus_system_time_secs = 3;
|
|
|
|
// Number of CPUs allocated.
|
|
optional double cpus_limit = 4;
|
|
|
|
// cpu.stat on process throttling (for contention issues).
|
|
optional uint32 cpus_nr_periods = 7;
|
|
optional uint32 cpus_nr_throttled = 8;
|
|
optional double cpus_throttled_time_secs = 9;
|
|
|
|
// Memory Usage Information:
|
|
|
|
// mem_total_bytes was added in 0.23.0 to represent the total memory
|
|
// of a process in RAM (as opposed to in Swap). This was previously
|
|
// reported as mem_rss_bytes, which was also changed in 0.23.0 to
|
|
// represent only the anonymous memory usage, to keep in sync with
|
|
// Linux kernel's (arguably erroneous) use of terminology.
|
|
optional uint64 mem_total_bytes = 36;
|
|
|
|
// Total memory + swap usage. This is set if swap is enabled.
|
|
optional uint64 mem_total_memsw_bytes = 37;
|
|
|
|
// Hard memory limit for a container.
|
|
optional uint64 mem_limit_bytes = 6;
|
|
|
|
// Soft memory limit for a container.
|
|
optional uint64 mem_soft_limit_bytes = 38;
|
|
|
|
// Broken out memory usage information: pagecache, rss (anonymous),
|
|
// mmaped files and swap.
|
|
|
|
// TODO(chzhcn) mem_file_bytes and mem_anon_bytes are deprecated in
|
|
// 0.23.0 and will be removed in 0.24.0.
|
|
optional uint64 mem_file_bytes = 10;
|
|
optional uint64 mem_anon_bytes = 11;
|
|
|
|
// mem_cache_bytes is added in 0.23.0 to represent page cache usage.
|
|
optional uint64 mem_cache_bytes = 39;
|
|
|
|
// Since 0.23.0, mem_rss_bytes is changed to represent only
|
|
// anonymous memory usage. Note that neither its requiredness, type,
|
|
// name nor numeric tag has been changed.
|
|
optional uint64 mem_rss_bytes = 5;
|
|
|
|
optional uint64 mem_mapped_file_bytes = 12;
|
|
// This is only set if swap is enabled.
|
|
optional uint64 mem_swap_bytes = 40;
|
|
optional uint64 mem_unevictable_bytes = 41;
|
|
|
|
// Number of occurrences of different levels of memory pressure
|
|
// events reported by memory cgroup. Pressure listening (re)starts
|
|
// with these values set to 0 when slave (re)starts. See
|
|
// https://www.kernel.org/doc/Documentation/cgroups/memory.txt for
|
|
// more details.
|
|
optional uint64 mem_low_pressure_counter = 32;
|
|
optional uint64 mem_medium_pressure_counter = 33;
|
|
optional uint64 mem_critical_pressure_counter = 34;
|
|
|
|
// Disk Usage Information for executor working directory.
|
|
optional uint64 disk_limit_bytes = 26;
|
|
optional uint64 disk_used_bytes = 27;
|
|
|
|
// Perf statistics.
|
|
optional PerfStatistics perf = 13;
|
|
|
|
// Network Usage Information:
|
|
optional uint64 net_rx_packets = 14;
|
|
optional uint64 net_rx_bytes = 15;
|
|
optional uint64 net_rx_errors = 16;
|
|
optional uint64 net_rx_dropped = 17;
|
|
optional uint64 net_tx_packets = 18;
|
|
optional uint64 net_tx_bytes = 19;
|
|
optional uint64 net_tx_errors = 20;
|
|
optional uint64 net_tx_dropped = 21;
|
|
|
|
// The kernel keeps track of RTT (round-trip time) for its TCP
|
|
// sockets. RTT is a way to tell the latency of a container.
|
|
optional double net_tcp_rtt_microsecs_p50 = 22;
|
|
optional double net_tcp_rtt_microsecs_p90 = 23;
|
|
optional double net_tcp_rtt_microsecs_p95 = 24;
|
|
optional double net_tcp_rtt_microsecs_p99 = 25;
|
|
|
|
optional double net_tcp_active_connections = 28;
|
|
optional double net_tcp_time_wait_connections = 29;
|
|
|
|
// Network traffic flowing into or out of a container can be delayed
|
|
// or dropped due to congestion or policy inside and outside the
|
|
// container.
|
|
repeated TrafficControlStatistics net_traffic_control_statistics = 35;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a snapshot of the resource usage for executors.
|
|
*/
|
|
message ResourceUsage {
|
|
message Executor {
|
|
required ExecutorInfo executor_info = 1;
|
|
|
|
// This includes resources used by the executor itself
|
|
// as well as its active tasks.
|
|
repeated Resource allocated = 2;
|
|
|
|
// Current resource usage. If absent, the containerizer
|
|
// cannot provide resource usage.
|
|
optional ResourceStatistics statistics = 3;
|
|
|
|
// The container id for the executor specified in the executor_info field.
|
|
required ContainerID container_id = 4;
|
|
}
|
|
|
|
repeated Executor executors = 1;
|
|
|
|
// Slave's total resources including checkpointed dynamic
|
|
// reservations and persistent volumes.
|
|
repeated Resource total = 2;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a sample of events from "perf stat". Only available on
|
|
* Linux.
|
|
*
|
|
* NOTE: Each optional field matches the name of a perf event (see
|
|
* "perf list") with the following changes:
|
|
* 1. Names are downcased.
|
|
* 2. Hyphens ('-') are replaced with underscores ('_').
|
|
* 3. Events with alternate names use the name "perf stat" returns,
|
|
* e.g., for the event "cycles OR cpu-cycles" perf always returns
|
|
* cycles.
|
|
*/
|
|
message PerfStatistics {
|
|
required double timestamp = 1; // Start of sample interval, in seconds since the Epoch.
|
|
required double duration = 2; // Duration of sample interval, in seconds.
|
|
|
|
// Hardware event.
|
|
optional uint64 cycles = 3;
|
|
optional uint64 stalled_cycles_frontend = 4;
|
|
optional uint64 stalled_cycles_backend = 5;
|
|
optional uint64 instructions = 6;
|
|
optional uint64 cache_references = 7;
|
|
optional uint64 cache_misses = 8;
|
|
optional uint64 branches = 9;
|
|
optional uint64 branch_misses = 10;
|
|
optional uint64 bus_cycles = 11;
|
|
optional uint64 ref_cycles = 12;
|
|
|
|
// Software event.
|
|
optional double cpu_clock = 13;
|
|
optional double task_clock = 14;
|
|
optional uint64 page_faults = 15;
|
|
optional uint64 minor_faults = 16;
|
|
optional uint64 major_faults = 17;
|
|
optional uint64 context_switches = 18;
|
|
optional uint64 cpu_migrations = 19;
|
|
optional uint64 alignment_faults = 20;
|
|
optional uint64 emulation_faults = 21;
|
|
|
|
// Hardware cache event.
|
|
optional uint64 l1_dcache_loads = 22;
|
|
optional uint64 l1_dcache_load_misses = 23;
|
|
optional uint64 l1_dcache_stores = 24;
|
|
optional uint64 l1_dcache_store_misses = 25;
|
|
optional uint64 l1_dcache_prefetches = 26;
|
|
optional uint64 l1_dcache_prefetch_misses = 27;
|
|
optional uint64 l1_icache_loads = 28;
|
|
optional uint64 l1_icache_load_misses = 29;
|
|
optional uint64 l1_icache_prefetches = 30;
|
|
optional uint64 l1_icache_prefetch_misses = 31;
|
|
optional uint64 llc_loads = 32;
|
|
optional uint64 llc_load_misses = 33;
|
|
optional uint64 llc_stores = 34;
|
|
optional uint64 llc_store_misses = 35;
|
|
optional uint64 llc_prefetches = 36;
|
|
optional uint64 llc_prefetch_misses = 37;
|
|
optional uint64 dtlb_loads = 38;
|
|
optional uint64 dtlb_load_misses = 39;
|
|
optional uint64 dtlb_stores = 40;
|
|
optional uint64 dtlb_store_misses = 41;
|
|
optional uint64 dtlb_prefetches = 42;
|
|
optional uint64 dtlb_prefetch_misses = 43;
|
|
optional uint64 itlb_loads = 44;
|
|
optional uint64 itlb_load_misses = 45;
|
|
optional uint64 branch_loads = 46;
|
|
optional uint64 branch_load_misses = 47;
|
|
optional uint64 node_loads = 48;
|
|
optional uint64 node_load_misses = 49;
|
|
optional uint64 node_stores = 50;
|
|
optional uint64 node_store_misses = 51;
|
|
optional uint64 node_prefetches = 52;
|
|
optional uint64 node_prefetch_misses = 53;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a request for resources that can be used by a framework
|
|
* to proactively influence the allocator. If 'slave_id' is provided
|
|
* then this request is assumed to only apply to resources on that
|
|
* slave.
|
|
*/
|
|
message Request {
|
|
optional SlaveID slave_id = 1;
|
|
repeated Resource resources = 2;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes some resources available on a slave. An offer only
|
|
* contains resources from a single slave.
|
|
*/
|
|
message Offer {
|
|
required OfferID id = 1;
|
|
required FrameworkID framework_id = 2;
|
|
required SlaveID slave_id = 3;
|
|
required string hostname = 4;
|
|
|
|
// URL for reaching the slave running on the host.
|
|
optional URL url = 8;
|
|
|
|
repeated Resource resources = 5;
|
|
repeated Attribute attributes = 7;
|
|
repeated ExecutorID executor_ids = 6;
|
|
|
|
// Signifies that the resources in this Offer may be unavailable during
|
|
// the given interval. Any tasks launched using these resources may be
|
|
// killed when the interval arrives. For example, these resources may be
|
|
// part of a planned maintenance schedule.
|
|
//
|
|
// This field only provides information about a planned unavailability.
|
|
// The unavailability interval may not necessarily start at exactly this
|
|
// interval, nor last for exactly the duration of this interval.
|
|
// The unavailability may also be forever! See comments in
|
|
// `Unavailability` for more details.
|
|
optional Unavailability unavailability = 9;
|
|
|
|
// Defines an operation that can be performed against offers.
|
|
message Operation {
|
|
enum Type {
|
|
LAUNCH = 1;
|
|
RESERVE = 2;
|
|
UNRESERVE = 3;
|
|
CREATE = 4;
|
|
DESTROY = 5;
|
|
}
|
|
|
|
message Launch {
|
|
repeated TaskInfo task_infos = 1;
|
|
}
|
|
|
|
message Reserve {
|
|
repeated Resource resources = 1;
|
|
}
|
|
|
|
message Unreserve {
|
|
repeated Resource resources = 1;
|
|
}
|
|
|
|
message Create {
|
|
repeated Resource volumes = 1;
|
|
}
|
|
|
|
message Destroy {
|
|
repeated Resource volumes = 1;
|
|
}
|
|
|
|
required Type type = 1;
|
|
optional Launch launch = 2;
|
|
optional Reserve reserve = 3;
|
|
optional Unreserve unreserve = 4;
|
|
optional Create create = 5;
|
|
optional Destroy destroy = 6;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* A request to return some resources occupied by a framework.
|
|
*/
|
|
message InverseOffer {
|
|
// This is the same OfferID as found in normal offers, which allows
|
|
// re-use of some of the OfferID-only messages.
|
|
required OfferID id = 1;
|
|
|
|
// URL for reaching the slave running on the host. This enables some
|
|
// optimizations as described in MESOS-3012, such as allowing the
|
|
// scheduler driver to bypass the master and talk directly with a slave.
|
|
optional URL url = 2;
|
|
|
|
// The framework that should release its resources.
|
|
// If no specifics are provided (i.e. which slave), all the framework's
|
|
// resources are requested back.
|
|
required FrameworkID framework_id = 3;
|
|
|
|
// Specified if the resources need to be released from a particular slave.
|
|
// All the framework's resources on this slave are requested back,
|
|
// unless further qualified by the `resources` field.
|
|
optional SlaveID slave_id = 4;
|
|
|
|
// This InverseOffer represents a planned unavailability event in the
|
|
// specified interval. Any tasks running on the given framework or slave
|
|
// may be killed when the interval arrives. Therefore, frameworks should
|
|
// aim to gracefully terminate tasks prior to the arrival of the interval.
|
|
//
|
|
// For reserved resources, the resources are expected to be returned to the
|
|
// framework after the unavailability interval. This is an expectation,
|
|
// not a guarantee. For example, if the unavailability duration is not set,
|
|
// the resources may be removed permanently.
|
|
//
|
|
// For other resources, there is no guarantee that requested resources will
|
|
// be returned after the unavailability interval. The allocator has no
|
|
// obligation to re-offer these resources to the prior framework after
|
|
// the unavailability.
|
|
required Unavailability unavailability = 5;
|
|
|
|
// A list of resources being requested back from the framework,
|
|
// on the slave identified by `slave_id`. If no resources are specified
|
|
// then all resources are being requested back. For the purpose of
|
|
// maintenance, this field is always empty (maintenance always requests
|
|
// all resources back).
|
|
repeated Resource resources = 6;
|
|
|
|
// TODO(josephw): Add additional options for narrowing down the resources
|
|
// being requested back. Such as specific executors, tasks, etc.
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a task. Passed from the scheduler all the way to an
|
|
* executor (see SchedulerDriver::launchTasks and
|
|
* Executor::launchTask). Either ExecutorInfo or CommandInfo should be set.
|
|
* A different executor can be used to launch this task, and subsequent tasks
|
|
* meant for the same executor can reuse the same ExecutorInfo struct.
|
|
*/
|
|
message TaskInfo {
|
|
required string name = 1;
|
|
required TaskID task_id = 2;
|
|
required SlaveID slave_id = 3;
|
|
repeated Resource resources = 4;
|
|
optional ExecutorInfo executor = 5;
|
|
optional CommandInfo command = 7;
|
|
// Task provided with a container will launch the container as part
|
|
// of this task paired with the task's CommandInfo.
|
|
optional ContainerInfo container = 9;
|
|
optional bytes data = 6;
|
|
// A health check for the task (currently in *alpha* and initial
|
|
// support will only be for TaskInfo's that have a CommandInfo).
|
|
optional HealthCheck health_check = 8;
|
|
|
|
// Labels are free-form key value pairs which are exposed through
|
|
// master and slave endpoints. Labels will not be interpreted or
|
|
// acted upon by Mesos itself. As opposed to the data field, labels
|
|
// will be kept in memory on master and slave processes. Therefore,
|
|
// labels should be used to tag tasks with light-weight meta-data.
|
|
optional Labels labels = 10;
|
|
|
|
// Service discovery information for the task. It is not interpreted
|
|
// or acted upon by Mesos. It is up to a service discovery system
|
|
// to use this information as needed and to handle tasks without
|
|
// service discovery information.
|
|
optional DiscoveryInfo discovery = 11;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes possible task states. IMPORTANT: Mesos assumes tasks that
|
|
* enter terminal states (see below) imply the task is no longer
|
|
* running and thus clean up any thing associated with the task
|
|
* (ultimately offering any resources being consumed by that task to
|
|
* another task).
|
|
*/
|
|
enum TaskState {
|
|
TASK_STAGING = 6; // Initial state. Framework status updates should not use.
|
|
TASK_STARTING = 0;
|
|
TASK_RUNNING = 1;
|
|
TASK_FINISHED = 2; // TERMINAL. The task finished successfully.
|
|
TASK_FAILED = 3; // TERMINAL. The task failed to finish successfully.
|
|
TASK_KILLED = 4; // TERMINAL. The task was killed by the executor.
|
|
TASK_LOST = 5; // TERMINAL. The task failed but can be rescheduled.
|
|
TASK_ERROR = 7; // TERMINAL. The task description contains an error.
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes the current status of a task.
|
|
*/
|
|
message TaskStatus {
|
|
// Describes the source of the task status update.
|
|
enum Source {
|
|
SOURCE_MASTER = 0;
|
|
SOURCE_SLAVE = 1;
|
|
SOURCE_EXECUTOR = 2;
|
|
}
|
|
|
|
// Detailed reason for the task status update.
|
|
//
|
|
// TODO(bmahler): Differentiate between slave removal reasons
|
|
// (e.g. unhealthy vs. unregistered for maintenance).
|
|
enum Reason {
|
|
// TODO(jieyu): The default value when a caller doesn't check for
|
|
// presence is 0 and so ideally the 0 reason is not a valid one.
|
|
// Since this is not used anywhere, consider removing this reason.
|
|
REASON_COMMAND_EXECUTOR_FAILED = 0;
|
|
|
|
REASON_CONTAINER_LAUNCH_FAILED = 21;
|
|
REASON_CONTAINER_LIMITATION = 19;
|
|
REASON_CONTAINER_LIMITATION_DISK = 20;
|
|
REASON_CONTAINER_LIMITATION_MEMORY = 8;
|
|
REASON_CONTAINER_PREEMPTED = 17;
|
|
REASON_CONTAINER_UPDATE_FAILED = 22;
|
|
REASON_EXECUTOR_REGISTRATION_TIMEOUT = 23;
|
|
REASON_EXECUTOR_REREGISTRATION_TIMEOUT = 24;
|
|
REASON_EXECUTOR_TERMINATED = 1;
|
|
REASON_EXECUTOR_UNREGISTERED = 2;
|
|
REASON_FRAMEWORK_REMOVED = 3;
|
|
REASON_GC_ERROR = 4;
|
|
REASON_INVALID_FRAMEWORKID = 5;
|
|
REASON_INVALID_OFFERS = 6;
|
|
REASON_MASTER_DISCONNECTED = 7;
|
|
REASON_RECONCILIATION = 9;
|
|
REASON_RESOURCES_UNKNOWN = 18;
|
|
REASON_SLAVE_DISCONNECTED = 10;
|
|
REASON_SLAVE_REMOVED = 11;
|
|
REASON_SLAVE_RESTARTED = 12;
|
|
REASON_SLAVE_UNKNOWN = 13;
|
|
REASON_TASK_INVALID = 14;
|
|
REASON_TASK_UNAUTHORIZED = 15;
|
|
REASON_TASK_UNKNOWN = 16;
|
|
}
|
|
|
|
required TaskID task_id = 1;
|
|
required TaskState state = 2;
|
|
optional string message = 4; // Possible message explaining state.
|
|
optional Source source = 9;
|
|
optional Reason reason = 10;
|
|
optional bytes data = 3;
|
|
optional SlaveID slave_id = 5;
|
|
optional ExecutorID executor_id = 7; // TODO(benh): Use in master/slave.
|
|
optional double timestamp = 6;
|
|
|
|
// Statuses that are delivered reliably to the scheduler will
|
|
// include a 'uuid'. The status is considered delivered once
|
|
// it is acknowledged by the scheduler. Schedulers can choose
|
|
// to either explicitly acknowledge statuses or let the scheduler
|
|
// driver implicitly acknowledge (default).
|
|
//
|
|
// TODO(bmahler): This is currently overwritten in the scheduler
|
|
// driver and executor driver, but executors will need to set this
|
|
// to a valid RFC-4122 UUID if using the HTTP API.
|
|
optional bytes uuid = 11;
|
|
|
|
// Describes whether the task has been determined to be healthy
|
|
// (true) or unhealthy (false) according to the HealthCheck field in
|
|
// the command info.
|
|
optional bool healthy = 8;
|
|
|
|
// Labels are free-form key value pairs which are exposed through
|
|
// master and slave endpoints. Labels will not be interpreted or
|
|
// acted upon by Mesos itself. As opposed to the data field, labels
|
|
// will be kept in memory on master and slave processes. Therefore,
|
|
// labels should be used to tag TaskStatus message with light-weight
|
|
// meta-data.
|
|
optional Labels labels = 12;
|
|
|
|
// Container related information that is resolved dynamically such as
|
|
// network address.
|
|
optional ContainerStatus container_status = 13;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes possible filters that can be applied to unused resources
|
|
* (see SchedulerDriver::launchTasks) to influence the allocator.
|
|
*/
|
|
message Filters {
|
|
// Time to consider unused resources refused. Note that all unused
|
|
// resources will be considered refused and use the default value
|
|
// (below) regardless of whether Filters was passed to
|
|
// SchedulerDriver::launchTasks. You MUST pass Filters with this
|
|
// field set to change this behavior (i.e., get another offer which
|
|
// includes unused resources sooner or later than the default).
|
|
optional double refuse_seconds = 1 [default = 5.0];
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a collection of environment variables. This is used with
|
|
* CommandInfo in order to set environment variables before running a
|
|
* command.
|
|
*/
|
|
message Environment {
|
|
message Variable {
|
|
required string name = 1;
|
|
required string value = 2;
|
|
}
|
|
|
|
repeated Variable variables = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* A generic (key, value) pair used in various places for parameters.
|
|
*/
|
|
message Parameter {
|
|
required string key = 1;
|
|
required string value = 2;
|
|
}
|
|
|
|
|
|
/**
|
|
* Collection of Parameter.
|
|
*/
|
|
message Parameters {
|
|
repeated Parameter parameter = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* Credential used in various places for authentication and
|
|
* authorization.
|
|
*
|
|
* NOTE: A 'principal' is different from 'FrameworkInfo.user'. The
|
|
* former is used for authentication and authorization while the
|
|
* latter is used to determine the default user under which the
|
|
* framework's executors/tasks are run.
|
|
*/
|
|
message Credential {
|
|
required string principal = 1;
|
|
optional string secret = 2;
|
|
}
|
|
|
|
|
|
/**
|
|
* Credentials used for framework authentication, HTTP authentication
|
|
* (where the common 'username' and 'password' are captured as
|
|
* 'principal' and 'secret' respectively), etc.
|
|
*/
|
|
message Credentials {
|
|
repeated Credential credentials = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* Rate (queries per second, QPS) limit for messages from a framework to master.
|
|
* Strictly speaking they are the combined rate from all frameworks of the same
|
|
* principal.
|
|
*/
|
|
message RateLimit {
|
|
// Leaving QPS unset gives it unlimited rate (i.e., not throttled),
|
|
// which also implies unlimited capacity.
|
|
optional double qps = 1;
|
|
|
|
// Principal of framework(s) to be throttled. Should match
|
|
// FrameworkInfo.principal and Credential.principal (if using authentication).
|
|
required string principal = 2;
|
|
|
|
// Max number of outstanding messages from frameworks of this principal
|
|
// allowed by master before the next message is dropped and an error is sent
|
|
// back to the sender. Messages received before the capacity is reached are
|
|
// still going to be processed after the error is sent.
|
|
// If unspecified, this principal is assigned unlimited capacity.
|
|
// NOTE: This value is ignored if 'qps' is not set.
|
|
optional uint64 capacity = 3;
|
|
}
|
|
|
|
|
|
/**
|
|
* Collection of RateLimit.
|
|
* Frameworks without rate limits defined here are not throttled unless
|
|
* 'aggregate_default_qps' is specified.
|
|
*/
|
|
message RateLimits {
|
|
// Items should have unique principals.
|
|
repeated RateLimit limits = 1;
|
|
|
|
// All the frameworks not specified in 'limits' get this default rate.
|
|
// This rate is an aggregate rate for all of them, i.e., their combined
|
|
// traffic is throttled together at this rate.
|
|
optional double aggregate_default_qps = 2;
|
|
|
|
// All the frameworks not specified in 'limits' get this default capacity.
|
|
// This is an aggregate value similar to 'aggregate_default_qps'.
|
|
optional uint64 aggregate_default_capacity = 3;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describe an image used by tasks or executors. Note that it's only
|
|
* for tasks or executors launched by MesosContainerizer currently.
|
|
* TODO(jieyu): This feature not fully supported in 0.24.0. Please do
|
|
* not use it until this feature is announced.
|
|
*/
|
|
message Image {
|
|
enum Type {
|
|
APPC = 1;
|
|
DOCKER = 2;
|
|
}
|
|
|
|
// Protobuf for specifying an Appc container image. See:
|
|
// https://github.com/appc/spec/blob/master/spec/aci.md
|
|
message Appc {
|
|
// The name of the image.
|
|
required string name = 1;
|
|
|
|
// An image ID is a string of the format "hash-value", where
|
|
// "hash" is the hash algorithm used and "value" is the hex
|
|
// encoded string of the digest. Currently the only permitted
|
|
// hash algorithm is sha512.
|
|
optional string id = 2;
|
|
|
|
// Optional labels. Suggested labels: "version", "os", and "arch".
|
|
optional Labels labels = 3;
|
|
}
|
|
|
|
message Docker {
|
|
// The name of the image. Expected format:
|
|
// [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG|@TYPE:DIGEST]
|
|
//
|
|
// See: https://docs.docker.com/reference/commandline/pull/
|
|
required string name = 1;
|
|
}
|
|
|
|
required Type type = 1;
|
|
|
|
// Only one of the following image messages should be set to match
|
|
// the type.
|
|
optional Appc appc = 2;
|
|
optional Docker docker = 3;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a volume mapping either from host to container or vice
|
|
* versa. Both paths can either refer to a directory or a file.
|
|
*/
|
|
message Volume {
|
|
enum Mode {
|
|
RW = 1; // read-write.
|
|
RO = 2; // read-only.
|
|
}
|
|
|
|
required Mode mode = 3;
|
|
|
|
// Path pointing to a directory or file in the container. If the
|
|
// path is a relative path, it is relative to the container work
|
|
// directory. If the path is an absolute path, that path must
|
|
// already exist.
|
|
required string container_path = 1;
|
|
|
|
// The following specifies the source of this volume. At most one of
|
|
// the following should be set.
|
|
|
|
// Absolute path pointing to a directory or file on the host or a
|
|
// path relative to the container work directory.
|
|
optional string host_path = 2;
|
|
|
|
// The source of the volume is an Image which describes a root
|
|
// filesystem which will be provisioned by Mesos.
|
|
optional Image image = 4;
|
|
}
|
|
|
|
|
|
/**
|
|
* Describes a network request from a framework as well as network resolution
|
|
* provided by Mesos.
|
|
*
|
|
* A Framework may request the network isolator on the Agent to isolate the
|
|
* container in a network namespace and create a virtual network interface.
|
|
* The `NetworkInfo` message describes the properties of that virtual
|
|
* interface, including the IP addresses and network isolation policy
|
|
* (network group membership).
|
|
*
|
|
* The NetworkInfo message is not interpreted by the Master or Agent and is
|
|
* intended to be used by Agent and Master modules implementing network
|
|
* isolation. If the modules are missing, the message is simply ignored. In
|
|
* future, the task launch will fail if there is no module providing the
|
|
* network isolation capabilities (MESOS-3390).
|
|
*
|
|
* An executor, Agent, or an Agent module may append NetworkInfos inside
|
|
* TaskStatus::container_status to provide information such as the container IP
|
|
* address and isolation groups.
|
|
*/
|
|
message NetworkInfo {
|
|
enum Protocol {
|
|
IPv4 = 1;
|
|
IPv6 = 2;
|
|
}
|
|
|
|
// Specifies a request for an IP address, or reports the assigned container
|
|
// IP address.
|
|
//
|
|
// Users can request an automatically assigned IP (for example, via an
|
|
// IPAM service) or a specific IP by adding a NetworkInfo to the
|
|
// ContainerInfo for a task. On a request, specifying neither `protocol`
|
|
// nor `ip_address` means that any available address may be assigned.
|
|
message IPAddress {
|
|
// Specify IP address requirement. Set protocol to the desired value to
|
|
// request the network isolator on the Agent to assign an IP address to the
|
|
// container being launched. If a specific IP address is specified in
|
|
// ip_address, this field should not be set.
|
|
optional Protocol protocol = 1;
|
|
|
|
// Statically assigned IP provided by the Framework. This IP will be
|
|
// assigned to the container by the network isolator module on the Agent.
|
|
// This field should not be used with the protocol field above.
|
|
//
|
|
// If an explicit address is requested but is unavailable, the network
|
|
// isolator should fail the task.
|
|
optional string ip_address = 2;
|
|
}
|
|
|
|
// When included in a ContainerInfo, each of these represent a
|
|
// request for an IP address. Each request can specify an explicit address
|
|
// or the IP protocol to use.
|
|
//
|
|
// When included in a TaskStatus message, these inform the framework
|
|
// scheduler about the IP addresses that are bound to the container
|
|
// interface. When there are no custom network isolator modules installed,
|
|
// this field is filled in automatically with the Agent IP address.
|
|
repeated IPAddress ip_addresses = 5;
|
|
|
|
// Specify IP address requirement. Set protocol to the desired value to
|
|
// request the network isolator on the Agent to assign an IP address to the
|
|
// container being launched. If a specific IP address is specified in
|
|
// ip_address, this field should not be set.
|
|
optional Protocol protocol = 1 [deprecated = true]; // Since 0.26.0
|
|
|
|
// Statically assigned IP provided by the Framework. This IP will be assigned
|
|
// to the container by the network isolator module on the Agent. This field
|
|
// should not be used with the protocol field above.
|
|
// NOTE: It is up to the networking 'provider' (IPAM/Isolator) to interpret
|
|
// this either as a hint of as a requirement for assigning the IP.
|
|
optional string ip_address = 2 [deprecated = true]; // Since 0.26.0
|
|
|
|
// A group is the name given to a set of logically-related interfaces that
|
|
// are allowed to communicate among themselves. Network traffic is allowed
|
|
// between two container interfaces that share at least one network group.
|
|
// For example, one might want to create separate groups for isolating dev,
|
|
// testing, qa and prod deployment environments.
|
|
repeated string groups = 3;
|
|
|
|
// To tag certain metadata to be used by Isolator/IPAM, e.g., rack, etc.
|
|
optional Labels labels = 4;
|
|
};
|
|
|
|
|
|
/**
|
|
* Describes a container configuration and allows extensible
|
|
* configurations for different container implementations.
|
|
*/
|
|
message ContainerInfo {
|
|
// All container implementation types.
|
|
enum Type {
|
|
DOCKER = 1;
|
|
MESOS = 2;
|
|
}
|
|
|
|
message DockerInfo {
|
|
// The docker image that is going to be passed to the registry.
|
|
required string image = 1;
|
|
|
|
// Network options.
|
|
enum Network {
|
|
HOST = 1;
|
|
BRIDGE = 2;
|
|
NONE = 3;
|
|
}
|
|
|
|
optional Network network = 2 [default = HOST];
|
|
|
|
message PortMapping {
|
|
required uint32 host_port = 1;
|
|
required uint32 container_port = 2;
|
|
// Protocol to expose as (ie: tcp, udp).
|
|
optional string protocol = 3;
|
|
}
|
|
|
|
repeated PortMapping port_mappings = 3;
|
|
|
|
optional bool privileged = 4 [default = false];
|
|
|
|
// Allowing arbitrary parameters to be passed to docker CLI.
|
|
// Note that anything passed to this field is not guaranteed
|
|
// to be supported moving forward, as we might move away from
|
|
// the docker CLI.
|
|
repeated Parameter parameters = 5;
|
|
|
|
// With this flag set to true, the docker containerizer will
|
|
// pull the docker image from the registry even if the image
|
|
// is already downloaded on the slave.
|
|
optional bool force_pull_image = 6;
|
|
}
|
|
|
|
message MesosInfo {
|
|
optional Image image = 1;
|
|
}
|
|
|
|
required Type type = 1;
|
|
repeated Volume volumes = 2;
|
|
optional string hostname = 4;
|
|
|
|
// Only one of the following *Info messages should be set to match
|
|
// the type.
|
|
optional DockerInfo docker = 3;
|
|
optional MesosInfo mesos = 5;
|
|
|
|
// A list of network requests. A framework can request multiple IP addresses
|
|
// for the container.
|
|
repeated NetworkInfo network_infos = 7;
|
|
}
|
|
|
|
|
|
/**
|
|
* Container related information that is resolved during container setup. The
|
|
* information is sent back to the framework as part of the TaskStatus message.
|
|
*/
|
|
message ContainerStatus {
|
|
// This field can be reliably used to identify the container IP address.
|
|
repeated NetworkInfo network_infos = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* Collection of labels.
|
|
*/
|
|
message Labels {
|
|
repeated Label labels = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* Key, value pair used to store free form user-data.
|
|
*/
|
|
message Label {
|
|
required string key = 1;
|
|
optional string value = 2;
|
|
}
|
|
|
|
|
|
/**
|
|
* Named port used for service discovery.
|
|
*/
|
|
message Port {
|
|
required uint32 number = 1;
|
|
optional string name = 2;
|
|
optional string protocol = 3;
|
|
optional DiscoveryInfo.Visibility visibility = 4;
|
|
}
|
|
|
|
|
|
/**
|
|
* Collection of ports.
|
|
*/
|
|
message Ports {
|
|
repeated Port ports = 1;
|
|
}
|
|
|
|
|
|
/**
|
|
* Service discovery information.
|
|
* The visibility field restricts discovery within a framework (FRAMEWORK),
|
|
* within a Mesos cluster (CLUSTER), or places no restrictions (EXTERNAL).
|
|
* Each port in the ports field also has an optional visibility field.
|
|
* If visibility is specified for a port, it overrides the default service-wide
|
|
* DiscoveryInfo.visibility for that port.
|
|
* The environment, location, and version fields provide first class support for
|
|
* common attributes used to differentiate between similar services. The
|
|
* environment may receive values such as PROD/QA/DEV, the location field may
|
|
* receive values like EAST-US/WEST-US/EUROPE/AMEA, and the version field may
|
|
* receive values like v2.0/v0.9. The exact use of these fields is up to each
|
|
* service discovery system.
|
|
*/
|
|
message DiscoveryInfo {
|
|
enum Visibility {
|
|
FRAMEWORK = 0;
|
|
CLUSTER = 1;
|
|
EXTERNAL = 2;
|
|
}
|
|
|
|
required Visibility visibility = 1;
|
|
optional string name = 2;
|
|
optional string environment = 3;
|
|
optional string location = 4;
|
|
optional string version = 5;
|
|
optional Ports ports = 6;
|
|
optional Labels labels = 7;
|
|
}
|
|
|
|
|
|
/**
|
|
* Protobuf for the Appc image manifest JSON schema:
|
|
* https://github.com/appc/spec/blob/master/spec/aci.md#image-manifest-schema
|
|
* Where possible, any field required in the schema is required in the protobuf
|
|
* but some cannot be expressed, e.g., a repeated string that has at least one
|
|
* element. Further validation should be performed after parsing the JSON into
|
|
* the protobuf.
|
|
* This version of Appc protobuf is based on Appc spec version 0.6.1.
|
|
* TODO(xujyan): This protobuf currently defines a subset of fields in the spec
|
|
* that Mesos makes use of to avoid confusion. New fields are going to be added
|
|
* when Mesos starts to support them.
|
|
*/
|
|
message AppcImageManifest {
|
|
required string acKind = 1;
|
|
required string acVersion = 2;
|
|
required string name = 3;
|
|
|
|
message Label {
|
|
required string name = 1;
|
|
required string value = 2;
|
|
}
|
|
|
|
repeated Label labels = 4;
|
|
|
|
message Annotation {
|
|
required string name = 1;
|
|
required string value = 2;
|
|
}
|
|
|
|
repeated Annotation annotations = 5;
|
|
}
|