在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:swarmkit开源软件地址:https://gitee.com/AliyunContainerService/swarmkit开源软件介绍:SwarmKitSwarmKit is a toolkit for orchestrating distributed systems at any scale. It includes primitives for node discovery, raft-based consensus, task scheduling and more. Its main benefits are:
OverviewMachines running SwarmKit can be grouped together in order to form a Swarm, coordinating tasks with each other.Once a machine joins, it becomes a Swarm Node. Nodes can either be worker nodes or manager nodes.
An operator can dynamically update a Node's role by promoting a Worker to Manager or demoting a Manager to Worker. Tasks are organized in Services. A service is a higher level abstraction that allows the user to declare the desired state of a group of tasks.Services define what type of task should be created as well as how to execute them (e.g. run this many replicas at all times) and how to update them (e.g. rolling updates). FeaturesSome of SwarmKit's main features are:
BuildRequirements:
SwarmKit is built in Go and leverages a standard project structure to work well with Go tooling.If you are new to Go, please see BUILDING.md for a more detailed guide. Once you have SwarmKit checked out in your From the project root directory, run the following to build $ make binaries TestBefore running tests for the first time, setup the tooling: $ make setup Then run: $ make all Usage ExamplesSetting up a SwarmThese instructions assume that (Before starting, make sure Initialize the first node: $ swarmd -d /tmp/node-1 --listen-control-api /tmp/node-1/swarm.sock --hostname node-1 Before joining cluster, the token should be fetched: $ export SWARM_SOCKET=/tmp/node-1/swarm.sock $ swarmctl cluster inspect default ID : 87d2ecpg12dfonxp3g562fru1Name : defaultOrchestration settings: Task history entries: 5Dispatcher settings: Dispatcher heartbeat period: 5sCertificate Authority settings: Certificate Validity Duration: 2160h0m0s Join Tokens: Worker: SWMTKN-1-3vi7ajem0jed8guusgvyl98nfg18ibg4pclify6wzac6ucrhg3-0117z3s2ytr6egmmnlr6gd37n Manager: SWMTKN-1-3vi7ajem0jed8guusgvyl98nfg18ibg4pclify6wzac6ucrhg3-d1ohk84br3ph0njyexw0wdagx In two additional terminals, join two nodes. From the example below, replace $ swarmd -d /tmp/node-2 --hostname node-2 --join-addr 127.0.0.1:4242 --join-token <Worker Token>$ swarmd -d /tmp/node-3 --hostname node-3 --join-addr 127.0.0.1:4242 --join-token <Worker Token> If joining as a manager, also specify the listen-control-api. $ swarmd -d /tmp/node-4 --hostname node-4 --join-addr 127.0.0.1:4242 --join-token <Manager Token> --listen-control-api /tmp/node-4/swarm.sock --listen-remote-api 127.0.0.1:4245 In a fourth terminal, use To list nodes: $ export SWARM_SOCKET=/tmp/node-1/swarm.sock$ swarmctl node lsID Name Membership Status Availability Manager Status-- ---- ---------- ------ ------------ --------------3x12fpoi36eujbdkgdnbvbi6r node-2 ACCEPTED READY ACTIVE4spl3tyipofoa2iwqgabsdcve node-1 ACCEPTED READY ACTIVE REACHABLE *dknwk1uqxhnyyujq66ho0h54t node-3 ACCEPTED READY ACTIVEzw3rwfawdasdewfq66ho34eaw node-4 ACCEPTED READY ACTIVE REACHABLE Creating ServicesStart a redis service: $ swarmctl service create --name redis --image redis:3.0.508ecg7vc7cbf9k57qs722n2le List the running services: $ swarmctl service lsID Name Image Replicas-- ---- ----- --------08ecg7vc7cbf9k57qs722n2le redis redis:3.0.5 1/1 Inspect the service: $ swarmctl service inspect redisID : 08ecg7vc7cbf9k57qs722n2leName : redisReplicas : 1/1Template Container Image : redis:3.0.5Task ID Service Slot Image Desired State Last State Node------- ------- ---- ----- ------------- ---------- ----0xk1ir8wr85lbs8sqg0ug03vr redis 1 redis:3.0.5 RUNNING RUNNING 1 minutes ago node-1 Updating ServicesYou can update any attribute of a service. For example, you can scale the service by changing the instance count: $ swarmctl service update redis --replicas 608ecg7vc7cbf9k57qs722n2le$ swarmctl service inspect redisID : 08ecg7vc7cbf9k57qs722n2leName : redisReplicas : 6/6Template Container Image : redis:3.0.5Task ID Service Slot Image Desired State Last State Node------- ------- ---- ----- ------------- ---------- ----0xk1ir8wr85lbs8sqg0ug03vr redis 1 redis:3.0.5 RUNNING RUNNING 3 minutes ago node-125m48y9fevrnh77til1d09vqq redis 2 redis:3.0.5 RUNNING RUNNING 28 seconds ago node-342vwc8z93c884anjgpkiatnx6 redis 3 redis:3.0.5 RUNNING RUNNING 28 seconds ago node-2d41f3wnf9dex3mk6jfqp4tdjw redis 4 redis:3.0.5 RUNNING RUNNING 28 seconds ago node-266lefnooz63met6yfrsk6myvg redis 5 redis:3.0.5 RUNNING RUNNING 28 seconds ago node-13a2sawtoyk19wqhmtuiq7z9pt redis 6 redis:3.0.5 RUNNING RUNNING 28 seconds ago node-3 Changing replicas from 1 to 6 forced SwarmKit to create 5 additional Tasks in order tocomply with the desired state. Every other field can be changed as well, such as image, args, env, ... Let's change the image from redis:3.0.5 to redis:3.0.6 (e.g. upgrade): $ swarmctl service update redis --image redis:3.0.608ecg7vc7cbf9k57qs722n2le$ swarmctl service inspect redisID : 08ecg7vc7cbf9k57qs722n2leName : redisReplicas : 6/6Update Status State : COMPLETED Started : 3 minutes ago Completed : 1 minute ago Message : update completedTemplate Container Image : redis:3.0.6Task ID Service Slot Image Desired State Last State Node------- ------- ---- ----- ------------- ---------- ----0udsjss61lmwz52pke5hd107g redis 1 redis:3.0.6 RUNNING RUNNING 1 minute ago node-3b8o394v840thk10tamfqlwztb redis 2 redis:3.0.6 RUNNING RUNNING 1 minute ago node-1efw7j66xqpoj3cn3zjkdrwff7 redis 3 redis:3.0.6 RUNNING RUNNING 1 minute ago node-38ajeipzvxucs3776e4z8gemey redis 4 redis:3.0.6 RUNNING RUNNING 1 minute ago node-2f05f2lbqzk9fh4kstwpulygvu redis 5 redis:3.0.6 RUNNING RUNNING 1 minute ago node-27sbpoy82deq7hu3q9cnucfin6 redis 6 redis:3.0.6 RUNNING RUNNING 1 minute ago node-1 By default, all tasks are updated at the same time. This behavior can be changed by defining update options. For instance, in order to update tasks 2 at a time and wait at least 10 seconds between updates: $ swarmctl service update redis --image redis:3.0.7 --update-parallelism 2 --update-delay 10s$ watch -n1 "swarmctl service inspect redis" # watch the update This will update 2 tasks, wait for them to become RUNNING, then wait an additional 10 seconds before moving to other tasks. Update options can be set at service creation and updated later on. If an update command doesn't specify update options, the last set of options will be used. Node ManagementSwarmKit monitors node health. In the case of node failures, it re-schedules tasks to other nodes. An operator can manually define the Availability of a node and can Pause and Drain nodes. Let's put $ swarmctl node drain node-1$ swarmctl node lsID Name Membership Status Availability Manager Status-- ---- ---------- ------ ------------ --------------3x12fpoi36eujbdkgdnbvbi6r node-2 ACCEPTED READY ACTIVE4spl3tyipofoa2iwqgabsdcve node-1 ACCEPTED READY DRAIN REACHABLE *dknwk1uqxhnyyujq66ho0h54t node-3 ACCEPTED READY ACTIVE$ swarmctl service inspect redisID : 08ecg7vc7cbf9k57qs722n2leName : redisReplicas : 6/6Update Status State : COMPLETED Started : 2 minutes ago Completed : 1 minute ago Message : update completedTemplate Container Image : redis:3.0.7Task ID Service Slot Image Desired State Last State Node------- ------- ---- ----- ------------- ---------- ----8uy2fy8dqbwmlvw5iya802tj0 redis 1 redis:3.0.7 RUNNING RUNNING 23 seconds ago node-27h9lgvidypcr7q1k3lfgohb42 redis 2 redis:3.0.7 RUNNING RUNNING 2 minutes ago node-3ae4dl0chk3gtwm1100t5yeged redis 3 redis:3.0.7 RUNNING RUNNING 23 seconds ago node-39fz7fxbg0igypstwliyameobs redis 4 redis:3.0.7 RUNNING RUNNING 2 minutes ago node-3drzndxnjz3c8iujdewzaplgr6 redis 5 redis:3.0.7 RUNNING RUNNING 23 seconds ago node-27rcgciqhs4239quraw7evttyf redis 6 redis:3.0.7 RUNNING RUNNING 2 minutes ago node-2 As you can see, every Task running on |
请发表评论