mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 21:09:23 +00:00 
			
		
		
		
	Initial swarmkit package
This is based on https://github.com/docker/swarmkit/pull/1965 which adds a direct containerd executor to swarmkit. It is very much a work in progress. With a suitable moby image (such as projects/swarmd/swarmd.yml) something like this should work: runc exec swarmd swarmctl service create --image docker.io/library/nginx:alpine --name nginx runc exec swarmd swarmctl service ls Signed-off-by: Ian Campbell <ian.campbell@docker.com>
This commit is contained in:
		| @@ -16,6 +16,7 @@ If you want to create a project, please submit a pull request to create a new di | |||||||
| - [OKernel](okernel/) intra-kernel protection using EPT (HPE) | - [OKernel](okernel/) intra-kernel protection using EPT (HPE) | ||||||
| - [eBPF](ebpf/) iovisor eBPF tools | - [eBPF](ebpf/) iovisor eBPF tools | ||||||
| - [AWS](aws/) AWS build support | - [AWS](aws/) AWS build support | ||||||
|  | - [Swarmd](swarmd) Standalone swarmkit based orchestrator | ||||||
|  |  | ||||||
| ## Current projects not yet documented | ## Current projects not yet documented | ||||||
| - Clear Linux integration (Intel) | - Clear Linux integration (Intel) | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								projects/swarmd/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								projects/swarmd/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | ### swarmd package | ||||||
|  |  | ||||||
|  | This adds a `swarmd` package for Moby which contains the standalone | ||||||
|  | swarmkit orchestration daemon (`swarmd`) and CLI tool (`swarmctl`). | ||||||
|  |  | ||||||
|  | The package tracks [docker/swarmkit#1965][PR1965] which | ||||||
|  | is a WIP PR adding a containerd executor to swarmkit. | ||||||
|  |  | ||||||
|  | With a suitable moby image (such as `swarmd.yml` from this directory) | ||||||
|  | something like this should work: | ||||||
|  |  | ||||||
|  |     runc exec swarmd swarmctl service create --image docker.io/library/nginx:alpine --name nginx | ||||||
|  |     runc exec swarmd swarmctl service ls | ||||||
|  |  | ||||||
|  | ### TODO | ||||||
|  |  | ||||||
|  | Currently the swarm state directory needs to be at a path which is | ||||||
|  | identical from the PoV of both the `containerd` and `swarmd` | ||||||
|  | processes. For now this means that the swarmkit state is put in | ||||||
|  | `/var/lib/containerd/swarmd`. | ||||||
|  |  | ||||||
|  | Bootstrapping a cluster needs more invesigation. Tokens and join | ||||||
|  | addresses can currently only be passed on the `swarmd` command line | ||||||
|  | which is inconvenient for automated image deployment. | ||||||
|  |  | ||||||
|  | Swarmkit [PR 1965][PR1965] also contains a number of TODOs which are not | ||||||
|  | separately listed here. | ||||||
|  |  | ||||||
|  | [PR1665]: https://github.com/docker/swarmkit/pull/1965 | ||||||
							
								
								
									
										56
									
								
								projects/swarmd/swarmd.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								projects/swarmd/swarmd.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | |||||||
|  | kernel: | ||||||
|  |   image: "mobylinux/kernel:4.9.x" | ||||||
|  |   cmdline: "console=ttyS0 console=tty0 page_poison=1" | ||||||
|  | init: "mobylinux/init:1ceddd8914f233fdc8a2c2f1de9569bb3a562a52" | ||||||
|  | system: | ||||||
|  |   - name: sysctl | ||||||
|  |     image: "mobylinux/sysctl:2cf2f9d5b4d314ba1bfc22b2fe931924af666d8c" | ||||||
|  |     net: host | ||||||
|  |     pid: host | ||||||
|  |     ipc: host | ||||||
|  |     capabilities: | ||||||
|  |      - CAP_SYS_ADMIN | ||||||
|  |     readonly: true | ||||||
|  |   - name: binfmt | ||||||
|  |     image: "mobylinux/binfmt:bdb754f25a5d851b4f5f8d185a43dfcbb3c22d01" | ||||||
|  |     binds: | ||||||
|  |      - /proc/sys/fs/binfmt_misc:/binfmt_misc | ||||||
|  |     readonly: true | ||||||
|  | daemon: | ||||||
|  |   - name: rngd | ||||||
|  |     image: "mobylinux/rngd:3dad6dd43270fa632ac031e99d1947f20b22eec9@sha256:1c93c1db7196f6f71f8e300bc1d15f0376dd18e8891c8789d77c8ff19f3a9a92" | ||||||
|  |     capabilities: | ||||||
|  |      - CAP_SYS_ADMIN | ||||||
|  |     oomScoreAdj: -800 | ||||||
|  |     readonly: true | ||||||
|  |   - name: swarmd | ||||||
|  |     image: "mobylinux/swarmd:cf11a7626278ebf17efe2780c138b4e626b02c73@sha256:7b31bb4482e6823d2aec291d13782669c22bc03c9fac1dfd7ed207d942c3c061" | ||||||
|  |     command: ["/usr/bin/swarmd", "--containerd-addr=/run/containerd/containerd.sock", "--log-level=debug", "--state-dir=/var/lib/containerd/swarmd"] | ||||||
|  |     capabilities: | ||||||
|  |      - CAP_CHOWN | ||||||
|  |      - CAP_DAC_OVERRIDE | ||||||
|  |      - CAP_FSETID | ||||||
|  |      - CAP_FOWNER | ||||||
|  |      - CAP_MKNOD | ||||||
|  |      - CAP_NET_RAW | ||||||
|  |      - CAP_SETGID | ||||||
|  |      - CAP_SETUID | ||||||
|  |      - CAP_SETFCAP | ||||||
|  |      - CAP_SETPCAP | ||||||
|  |      - CAP_NET_BIND_SERVICE | ||||||
|  |      - CAP_SYS_CHROOT | ||||||
|  |      - CAP_KILL | ||||||
|  |      - CAP_AUDIT_WRITE | ||||||
|  |     net: host | ||||||
|  |     binds: | ||||||
|  |       - /run/containerd/containerd.sock:/run/containerd/containerd.sock | ||||||
|  |       - /var/lib/containerd:/var/lib/containerd | ||||||
|  |       - /etc/resolv.conf:/etc/resolv.conf | ||||||
|  |       - /etc/ssl:/etc/ssl | ||||||
|  | files: | ||||||
|  |   - path: etc/docker/daemon.json | ||||||
|  |     contents: '{"debug": true}' | ||||||
|  | outputs: | ||||||
|  |   - format: kernel+initrd | ||||||
|  |   - format: iso-bios | ||||||
|  |   - format: iso-efi | ||||||
							
								
								
									
										36
									
								
								projects/swarmd/swarmd/Dockerfile.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								projects/swarmd/swarmd/Dockerfile.build
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | FROM golang:1.7-alpine3.5 | ||||||
|  |  | ||||||
|  | RUN \ | ||||||
|  |   apk update && apk upgrade && \ | ||||||
|  |   apk add --no-cache \ | ||||||
|  |   ca-certificates \ | ||||||
|  |   gcc \ | ||||||
|  |   git \ | ||||||
|  |   libc-dev \ | ||||||
|  |   make \ | ||||||
|  |   && true | ||||||
|  |  | ||||||
|  | WORKDIR / | ||||||
|  | COPY Dockerfile.build Dockerfile.pkg Makefile /build/ | ||||||
|  |  | ||||||
|  | # PR https://github.com/docker/swarmkit/pull/1965 from ijc25/containerd | ||||||
|  | ENV SWARMKIT_PR=1965 | ||||||
|  | ENV SWARMKIT_COMMIT=82e9f43d84e9a0586903392cbe5bbac15fdbf552 | ||||||
|  |  | ||||||
|  | RUN mkdir -p $GOPATH/src/github.com/docker && \ | ||||||
|  |   cd $GOPATH/src/github.com/docker && \ | ||||||
|  |   git clone https://github.com/docker/swarmkit.git | ||||||
|  | WORKDIR $GOPATH/src/github.com/docker/swarmkit | ||||||
|  | RUN [ -z "$SWARMKIT_PR" ] || git fetch origin pull/$SWARMKIT_PR/head | ||||||
|  | RUN git checkout $SWARMKIT_COMMIT | ||||||
|  |  | ||||||
|  | RUN make binaries GO_GCFLAGS="-buildmode pie --ldflags '-extldflags \"-fno-PIC -static\"'" | ||||||
|  |  | ||||||
|  | RUN mkdir -p /build/dist/usr/bin/ /build/dist/etc | ||||||
|  | RUN cp bin/swarmd bin/swarmctl /build/dist/usr/bin/ | ||||||
|  | RUN strip /build/dist/usr/bin/swarmd /build/dist/usr/bin/swarmctl | ||||||
|  |  | ||||||
|  | RUN cp -r /etc/ssl /build/dist/etc/ssl | ||||||
|  |  | ||||||
|  | WORKDIR /build | ||||||
|  | CMD ["/bin/tar", "cf", "-", "-C", "dist", "."] | ||||||
							
								
								
									
										4
									
								
								projects/swarmd/swarmd/Dockerfile.pkg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								projects/swarmd/swarmd/Dockerfile.pkg
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | |||||||
|  | FROM scratch | ||||||
|  | WORKDIR / | ||||||
|  | ADD swarmd.tar . | ||||||
|  | CMD ["/usr/bin/swarmd", "--containerd-addr=/run/containerd/containerd.sock", "--log-level=debug", "--state-dir=/var/lib/swarmd"] | ||||||
							
								
								
									
										38
									
								
								projects/swarmd/swarmd/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								projects/swarmd/swarmd/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | .PHONY: tag push clean container | ||||||
|  | all: push | ||||||
|  |  | ||||||
|  | SHASUM=alpine:3.5 | ||||||
|  | IMAGE=swarmd | ||||||
|  | DEPS=Dockerfile.build Makefile | ||||||
|  |  | ||||||
|  | # Include  Dockerfile.pkg here so hash works | ||||||
|  | swarmd.tag: $(DEPS) Dockerfile.pkg | ||||||
|  | 	BUILD=$$(tar cf - $^ | docker build -f $< -q -) && [ -n "$$BUILD" ] && echo "Built $$BUILD" && echo "$$BUILD" > $@ | ||||||
|  |  | ||||||
|  | swarmd.tar: swarmd.tag | ||||||
|  | 	docker run --rm --net=none --log-driver=none $(shell cat swarmd.tag) > $@ | ||||||
|  |  | ||||||
|  | container: Dockerfile.pkg swarmd.tar | ||||||
|  | 	tar cf - $^ | docker build --no-cache -f $< -t $(IMAGE):build - | ||||||
|  |  | ||||||
|  | hash: $(DEPS) Dockerfile.pkg | ||||||
|  | 	find $^ -type f | xargs cat  | DOCKER_CONTENT_TRUST=1 docker run --rm -i $(SHASUM) sha1sum | sed 's/ .*//' > $@ | ||||||
|  |  | ||||||
|  | push: hash container | ||||||
|  | 	docker pull mobylinux/$(IMAGE):$(shell cat hash) || \ | ||||||
|  | 		(docker tag $(IMAGE):build mobylinux/$(IMAGE):$(shell cat hash) && \ | ||||||
|  | 		 docker push mobylinux/$(IMAGE):$(shell cat hash)) | ||||||
|  | 	docker rmi $(IMAGE):build | ||||||
|  | 	rm -f hash | ||||||
|  |  | ||||||
|  | tag: hash container | ||||||
|  | 	docker pull mobylinux/$(IMAGE):$(shell cat hash) || \ | ||||||
|  | 		docker tag $(IMAGE):build mobylinux/$(IMAGE):$(shell cat hash) | ||||||
|  | 	docker rmi $(IMAGE):build | ||||||
|  | 	rm -f hash | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	rm -f hash | ||||||
|  | 	rm -f swarmd.tag swarmd.tar | ||||||
|  |  | ||||||
|  | .DELETE_ON_ERROR: | ||||||
		Reference in New Issue
	
	Block a user