Giter VIP home page Giter VIP logo

minio's Introduction

Deis Workflow is no longer maintained.
Please read the announcement for more detail.
09/07/2017 Deis Workflow v2.18 final release before entering maintenance mode
03/01/2018 End of Workflow maintenance: critical patches no longer merged
Hephy is a fork of Workflow that is actively developed and accepts code contributions.

Deis Minio v2

Build Status Go Report Card Docker Repository on Quay

Deis (pronounced DAY-iss) Workflow is an open source Platform as a Service (PaaS) that adds a developer-friendly layer to any Kubernetes cluster, making it easy to deploy and manage applications on your own servers.

For more information about the Deis workflow, please visit the main project page at https://github.com/deis/workflow.

We welcome your input! If you have feedback, please submit an issue. If you'd like to participate in development, please read the "Development" section below and submit a pull request.

About

The Deis minio component provides an S3 API compatible object storage server, based on Minio, that can be run on Kubernetes. It's intended for use within the Deis v2 platform as an object storage server, but it's flexible enough to be run as a standalone pod on any Kubernetes cluster.

Note that in the default Helm chart for the Deis platform, this component is used as a storage location for the following components:

Also note that we aren't currently providing this component with any kind of persistent storage, but it may work with persistent volumes.

Development

The Deis project welcomes contributions from all developers. The high level process for development matches many other open source projects. See below for an outline.

  • Fork this repository
  • Make your changes
  • Submit a pull request (PR) to this repository with your changes, and unit tests whenever possible.
  • If your PR fixes any issues, make sure you write Fixes #1234 in your PR description (where #1234 is the number of the issue you're closing)
  • The Deis core contributors will review your code. After each of them sign off on your code, they'll label your PR with LGTM1 and LGTM2 (respectively). Once that happens, you may merge.

Minio Binary Mirror

Also, note that the Dockerfile uses an ADD directive to download pre-built Minio binaries from a Google Cloud Storage bucket. The bucket is in the deis-mirrors project, and if you have access to that project, this link should take you directly to that bucket.

To bump this component to use a newer build of Minio, simply add a new binary to the bucket (under the linux-amd64 folder), check the checkbox under the Share publicly column, and update the URL in the ADD directive in the aforementioned Dockerfile.

Docker Based Development Environment

The preferred environment for development uses the go-dev Docker image. The tools described in this section are used to build, test, package and release each version of Deis.

To use it yourself, you must have make installed and Docker installed and running on your local development machine.

If you don't have Docker installed, please go to https://www.docker.com/ to install it.

After you have those dependencies, build your code with make build and execute unit tests with make test.

Native Go Development Environment

You can also use the standard go toolchain to build and test if you prefer. To do so, you'll need glide 0.9 or above and Go 1.6 or above installed.

After you have those dependencies, you can build and unit-test your code with go build and go test $(glide nv), respectively.

Note that you will not be able to build or push Docker images using this method of development.

Testing

The Deis project requires that as much code as possible is unit tested, but the core contributors also recognize that some code must be tested at a higher level (functional or integration tests, for example).

The end-to-end tests repository has our integration tests. Additionally, the core contributors and members of the community also regularly dogfood the platform.

Running End-to-End Tests

Please see README.md on the end-to-end tests reposotory for instructions on how to set up your testing environment and run the tests.

Dogfooding

Please follow the instructions on the official Deis docs to install and configure your Deis cluster and all related tools, and deploy and configure an app on Deis.

minio's People

Contributors

arschles avatar helgi avatar kmala avatar krancour avatar mboersma avatar technosophos avatar ultimateboy avatar vdice avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

minio's Issues

Can't build deis/minio locally

On Mac OS X, I simply can't get minio ever to build. I've tried newer versions of glide and set GOOS=linux GOARCH=amd64 and nothing seems to help.

$ make bootstrap test build docker-build docker-push
...
[INFO] Setting version for gopkg.in/v2/yaml to 53feefa2559fb8dfa8d81baad31be332c97d6c77.
[INFO] Setting version for k8s.io/heapster to 0e1b652781812dee2c51c75180fc590223e0b9c6.
[ERROR] Failed to set version to 444684342d4c12c7c05bed13bd249034370840a9: exit status 128
[WARN] Failed to set version on gopkg.in/olivere/elastic.v2 to 444684342d4c12c7c05bed13bd249034370840a9: exit status 128
[INFO] Setting version for k8s.io/kubernetes to 92635e23dfafb2ddc828c8ac6c03c7a7205a84d8.
[ERROR] Failed to set version to 0e1b652781812dee2c51c75180fc590223e0b9c6: exit status 128
[WARN] Failed to set version on k8s.io/heapster to 0e1b652781812dee2c51c75180fc590223e0b9c6: exit status 128
[ERROR] Failed to set version to 92635e23dfafb2ddc828c8ac6c03c7a7205a84d8: exit status 128
[WARN] Failed to set version on k8s.io/kubernetes to 92635e23dfafb2ddc828c8ac6c03c7a7205a84d8: exit status 128
[INFO] Setting version for speter.net/go/exp/math/dec/inf to 42ca6cd68aa922bc3f32f1e056e61b65945d9ad7.
docker run --rm -v /Users/matt/Projects/src/github.com/deis/minio:/go/src/github.com/deis/minio -w /go/src/github.com/deis/minio quay.io/deis/go-dev:0.7.0 go test ./genssl/... ./src/... .
vendor/github.com/deis/pkg/aboutme/aboutme.go:21:2: cannot find package "k8s.io/kubernetes/pkg/api" in any of:
    /go/src/github.com/deis/minio/vendor/k8s.io/kubernetes/pkg/api (vendor tree)
    /usr/local/go/src/k8s.io/kubernetes/pkg/api (from $GOROOT)
    /go/src/k8s.io/kubernetes/pkg/api (from $GOPATH)
vendor/github.com/deis/pkg/k8s/client.go:5:2: cannot find package "k8s.io/kubernetes/pkg/client/unversioned" in any of:
    /go/src/github.com/deis/minio/vendor/k8s.io/kubernetes/pkg/client/unversioned (vendor tree)
    /usr/local/go/src/k8s.io/kubernetes/pkg/client/unversioned (from $GOROOT)
    /go/src/k8s.io/kubernetes/pkg/client/unversioned (from $GOPATH)
vendor/github.com/deis/pkg/k8s/client.go:6:2: cannot find package "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" in any of:
    /go/src/github.com/deis/minio/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd (vendor tree)
    /usr/local/go/src/k8s.io/kubernetes/pkg/client/unversioned/clientcmd (from $GOROOT)
    /go/src/k8s.io/kubernetes/pkg/client/unversioned/clientcmd (from $GOPATH)
vendor/github.com/deis/pkg/aboutme/aboutme.go:23:2: cannot find package "k8s.io/kubernetes/pkg/labels" in any of:
    /go/src/github.com/deis/minio/vendor/k8s.io/kubernetes/pkg/labels (vendor tree)
    /usr/local/go/src/k8s.io/kubernetes/pkg/labels (from $GOROOT)
    /go/src/k8s.io/kubernetes/pkg/labels (from $GOPATH)
make: *** [test] Error 1
$ 

Update aboutme and handle the returned error

Carried over from the already-merged #39:

So the error FromEnv is returning is a legit error. It's coming from the k8s API server. The API server is reporting that it doesn't have a record for that pod. We need to look into why that is the case, and whether this is a transient issue.

Prior to version 0.2.1 the pkg/aboutme was silently ignoring a number of errors that the API server was returning, and instead just returning a stripped-down set of fields (including IP, which it got from aboutme.MyIP()). We decided that this was the wrong approach, and so I started returning more errors.

If you are really only using pod.IP, you could skip the k8s API lookup and simply use aboutme.MyIP. Otherwise, we should figure out why the API server is getting a 404 on that record.

Mirror Minio binary builds

As seen in the fix in #106, the Minio download links can change, and when they do, our builds fail. After #106, they will "go red" (as opposed to the former behavior, in which they failed silently), but it would be even better for us to mirror the binary builds on our own S3 or GCS bucket, so that we control the download URLs.

This issue is for copying binaries into the S3/GCS bucket that we own, and changing the Dockerfile to point to that bucket.

Remove unused mc build targets & scripts

Since we download an mc binary, we don't need to build it anymore, so we can remove the build targets in the Makefiles (the one at the root directory and in the mc directory) and the install script in the mc directory as well

Remove mc and integration tests

Part of #1 prescribed the following requirements:

Requirement 1:

Create a Minio MC pod to be used for testing Minio from within a Kubernetes cluster (#19)

Requirement 2:

Write an entry point on the MC pod that will run integration tests against the Minio RC to verify that it is up, running, and correctly configured. (#19)

These two requirements led to the creation of a mc directory and an integration directory under it. The direct contents of the mc directory are intended to build the mc CLI, and then the mc/integration directory is meant to package that CLI and an integration test (implemented as a bash script) into an image. The idea behind the integration testing image was to allow anyone to run it in a pod so it can run some basic CRUD operations against a running minio server to see if it's properly set up and running (i.e. ensure it's configured with the credentials that are stored in the object storage creds secret, it's running, its filesystem is properly set up, etc...)

We've since created e2e tests which have exceeded the functionality of these tests, we haven't automated these integration tests, and we don't automatically create the integration test image.

This proposal issue is for removing the mc directory entirely, which would hence remove the build scripts for the mc CLI and the Dockerfile and image creation targets for integration tests.

Of course, if we do decide to pursue integration tests in the future (another larger discussion), we can revive the integration test script and image creation logic (and we'll need to automate test runs).

This issue would obviate #99

refactor the makefile

it's gotten very large, and is responsible for a few different tasks:

  1. building the project, dockerizing, deploying to k8s
    • requires a second target to build the minio binary from master on https://github.com/minio/minio. that target may go away when the minio server becomes stable
  2. building the mc binary from master on https://github.com/minio/mc, dockerizing a second image and deploying that to k8s. The build step may go away when the mc client becomes stable
  3. build the mc integration tests, dockerizing a third image, and deploying that to k8s

It may make sense to split the integration tests in (3) into a separate repository. Regardless, the makefile is hard to follow.

Targets should be grouped together, and have a comment for each group, and each target should also be commented.

Also, an overview of the high level targets and workflows should be on the README.

Finally, dependencies don't make a ton of sense right now. Some ideas:

  • docker-push could depend on docker-build but it isn't now
  • does it make sense for docker-build to depend on build-server and build at once?

minio in CrashLoopBackoff, unable to create `/.minio`

Minio RC: https://gist.github.com/slack/cc8959d79adfc40a7b0b

Latest travis build (3 hours ago): https://travis-ci.org/deis/minio/builds/100192456

Docker log:

{"log":"minio server /home/minio/\n","stream":"stdout","time":"2016-01-04T22:32:35.982394182Z"}
{"log":"time=\"2016-01-04T22:32:35Z\" level=fatal msg=\"Failed to read config for minio.\" error=\"mkdir /.minio: permission denied\" probe=\"{\\\"cause\\\":{\\\"Op\\\":\\\"mkdir\\\",\\\"Path\\\":\\\"/.minio\\\",\\\"Err\\\":13},\\\"trace\\\":[{\\\"line\\\":156,\\\"file\\\":\\\"server-config.go\\\",\\\"func\\\":\\\"main.createConfigPath\\\"},{\\\"line\\\":199,\\\"file\\\":\\\"server-main.go\\\",\\\"func\\\":\\\"main.getConfig\\\"},{\\\"line\\\":240,\\\"file\\\":\\\"server-main.go\\\",\\\"func\\\":\\\"main.initServer\\\"},{\\\"line\\\":283,\\\"file\\\":\\\"server-main.go\\\",\\\"func\\\":\\\"main.serverMain\\\"}],\\\"sysinfo\\\":{\\\"host.arch\\\":\\\"amd64\\\",\\\"host.cpus\\\":\\\"2\\\",\\\"host.lang\\\":\\\"go1.5.2\\\",\\\"host.name\\\":\\\"deis-minio-hgkwx\\\",\\\"host.os\\\":\\\"linux\\\",\\\"mem.heap.total\\\":\\\"786kB\\\",\\\"mem.heap.used\\\":\\\"297kB\\\",\\\"mem.total\\\":\\\"3.1MB\\\",\\\"mem.used\\\":\\\"297kB\\\"}}\" \n","stream":"stderr","time":"2016-01-04T22:32:35.989732424Z"}
{"log":"error at command wait\n","stream":"stdout","time":"2016-01-04T22:32:35.989995342Z"}
{"log":"2016/01/04 22:32:35 exit status 1\n","stream":"stderr","time":"2016-01-04T22:32:35.990378133Z"}

Use quay.io/deis/go-dev:0.5.0

The current version is on 0.4.0, which has glide 0.8.0. Version 0.5.0 should bump glide to 0.8.3, which introduces a breaking change (in 0.8.2) to the glide.lock file. Therefore, this issue may require a make glideup so that future make bootsrap command will work.

Basic Kubernetes Minio component

The idea of this project is that we can provide a simple, single-pod S3 object storage system for developers and for light-weight clusters.

The following tasks need to be done to get this project ready for a 0.0.1 release:

  • Create a repository that follows the standard Deis pattern for Kubernetes components
  • Kubernetes service defined
  • Kubernetes RC defined, scaling to 1 by default (Minio doesn't yet support multiple replicas)
  • Build Minio from source from the master branch, and create a Docker image
  • Create Minio admin account locally, and then upload the credential as a Kubernetes secret. There should be a Makefile target for this. (#13)
  • Create a shared account (Token/Secret) that all other Deis services can use to work with minio, and upload that as a Kubernetes secret. This can use the same Makefile target as the above. (#13)
  • Configure Minio to use those secrets in its RC
  • Add support for generating an SSL certificate locally, and then storing that in a secret. There should be a Makefile target for this (make ssl-cert). Self-signed is fine for now. (#15)
  • Configure Minio to read the SSL key and cert from the secret and use it in the RC (#17)
  • Create a Minio MC pod to be used for testing Minio from within a Kubernetes cluster (#19)
  • Write an entry point on the MC pod that will run integration tests against the Minio RC to verify that it is up, running, and correctly configured. (#19)
  • Update the README file with information on how to install and configure this package (#14)
  • Add an example in the _docs directory for accessing and using Minio object storage from another pod. (#14)
  • Test this installation on the below installs. It must run on both with no modifications to the underlying environment.
    • Kubernetes + Vagrant (local)
    • GKE

A few guidelines:

  • For now, we are not assuming persistent storage. (Later, we will add volumes to the RC to provide that)
  • All installation and configuration should be done in the Makefile. No shell scripts unless absolutely necessary.
  • All code in the container should be written in Go. If you need a bootstrapping program, it should be called boot.go, located in the root of this repository, and when compiled should be placed in rootfs/bin/boot.
  • As far as is possible, we should be working off of Minio's master branch, not a snapshot of an older version.

Minio pod not starting

Fatal error open /var/run/secrets/kubernetes.io/serviceaccount/token: no such file or directory

Publish immutable artifact tags + canary version to Docker registries

We want to have the ability to have deis/charts reference a specific immutable image which will enable us better traceability on issues that come into various components.

What we've done with efforts in other repositories is publish a version:

  • git-[short sha] that will never be overwritten
  • canary that will move to reference the latest version available of a component

Examples of the easiest way to roll this change out can be seen in deis/workflow#487, deis/builder#246, and deis/workflow-manager#11

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.