Giter VIP home page Giter VIP logo

bedrock's Introduction

Bedrock

Build Status Go Report Card

Bedrock provides patterns, implementation, and automation for operating production Kubernetes clusters based on a GitOps workflow, building on the best practices we have discovered in working with dozens of deployments with customers in operationalizing Kubernetes clusters.

Bedrock helps you:

  • Define and maintain infrastructure deployments across multiple clusters.
  • Deploy and automate a secure end to end GitOps workflow.
  • Deploy and manage service workloads from source code to their deployment in-cluster.
  • Observe ongoing deployments across multiple services and their revisions and multiple clusters deploying those services.

Quick Start

Getting Started

Infrastructure Management

GitOps Pipeline

Service Management

Rings Management

Deployment Observability

Community

Please join us on Slack for discussion and/or questions.

Contributing

We do not claim to have all the answers and would greatly appreciate your ideas, issues, and pull requests.

If you'd like to contribute, start by searching through the issues and pull requests to see whether someone else has raised a similar idea or question.

If you don't see your idea listed, and you think it fits into the goals of this project, do one of the following:

  • If your contribution is minor, such as a typo or grammar fix, open a pull request.
  • If your contribution is major, such as a new guide or feature we suggest starting by opening an issue first. That way, there is more visiblity to other contributors.

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

For project level questions, please contact Tim Park.

bedrock's People

Contributors

amit1411 avatar andrebriggs avatar bnookala avatar dennisseah avatar dependabot[bot] avatar dtzar avatar edaena avatar evanlouie avatar frodopwns avatar jmspring avatar jred55 avatar jsturtevant avatar mattdot avatar mikedodaro avatar mtarng avatar nathanielrose avatar orktopus avatar rameshmanian avatar reenusaluja avatar rguthriemsft avatar sakintoye avatar samiyaakhtar avatar sarath-p avatar sayar avatar seushermsft avatar timfpark avatar utf18 avatar williammortlmicrosoft avatar yayitserica avatar yradsmikham 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  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

bedrock's Issues

Describe how bedrock aligns with GitOps

Briefly describe what GitOps is and the main principles we want to adhere by in bedrock regardless of the CI/CD technology used this README.

We follow a release flow

  1. Branch
  2. Push
  3. PR
  4. Merge

We believe Git to be a source of truth.
We believe Git is enables collaboration at scale

We leverage operational features of the CI/CD platform to

  • Configure
  • Build
  • Test
  • Deploy
  • Monitor

We align to the patterns of

  • CI build artifacts
  • Updates Config (in a git repo)
  • Trigger Rollout(PR merge/commit)
  • Observe
  • Control

etc

Investigate how flux can access Azure DevOps Git Repos

Investigate and prototype.

Flux uses SSH based "deploy keys" to communicate with GitHub repos. It's unclear how we would authenticate with Azure DevOps git repos. Flux provides a guide on how to set up SSH keys on non GitHub repos here.

Add scaffolding for microservices

As a developer, I want to focus on my application code and have all of the supporting infrastructure scaffolded out for me:

  1. Application container builds (with buildpacks.io?)
  2. Helm deployment charts

Documentation update

in the setup section of cluster deployment, you need to install the Helm client... I had an error until I did so (I know its probably obvious - but I forgot to do it first, and got an error that helm was not found).

Investigate automation to update keys on repo after they periodically expire

We're planning to use deploy keys for flux and ssh keys for pushing to the second repo from a script, but we would like to refresh these keys periodically and when we do that, it would need to be automatically updated on the github repo via a script. Explore the options for automating it (see github API)

Jaeger dashboard not displaying traces

Commit #21 fixed the Jaeger UI not showing up but no services show up in the UI. The correct way to pull the Istio based Jaeger UI is

kubectl port-forward -n istio-system $(kubectl get pod -n istio-system -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686 &

As referenced here.

After making this change I see a trace from the simple-service application with custom user-agent referenced. I only see one reference. This could be due to how tracing is implemented in simple-service. I'm going to investigate further to try other jaeger-client operations.

image

deploying the simple service is not working correctly

The deployment of the simple service is IMHO not working correctly.

the repo name refers to @timfpark and i cannot push to this docker repo.
https://github.com/Microsoft/bedrock/blob/master/services/common/deploy-service#L26

screenshot 2018-11-29 at 13 42 42

possbile way to go:

we change the values in the file:https://github.com/Microsoft/bedrock/blob/master/services/modules/simple-service/deploy-simple-service

or update the README with an overwrite of the default values.

or we could stop building it and relying on a prebuilt docker image.

The Dockerfile is currently missing the docker package and we would have to mount the docker socket into the container while starting it.

Steps done:
tried to test it via minikube:

docker build -t bedrock:latest .

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --net=host -it -v ~/.minikube:/.minikube -v ~/.kube/config:/.kube/config -e TF_VAR_grafana_admin_password="SECRETpass" bedrock:latest /bin/bash
cd services/environments/dev
./init
./apply

@timfpark what do you think?

All the best,

Benjamin

Provide guidance on how to set up a bedrock gitops flow with Azure DevOps

Expand on the README with detail instruction for steps that we currently can't automate.

The expectation here is that from scratch one can:

  • Create an AKS cluster
    • Reference bedrock cluster instructions
  • See an example of a HLD repo and a manifest repo
    • Suggest forking the repos?
    • Suggest repo policies to prevent commits to master
  • Set up a build pipeline in Azure Pipelines associated with the HLD repo
    • Set appropriate environment variables
    • Setup a GitHub Personal Access Token
    • Reference provided shell scripts in build pipeline
  • Experience a bedrock Gitops flow™
    • Describe how to make a PR against their HLD repo

CI/CI that publishes Fabrikate artifacts

Related to #27 we need to take the generated yam artifacts and git commit/push this files to a source of truth repo. For the moment we may be able to utilize the Azure Pipelines GitHub App to authenticate the git push command.

Develop a shell script that will validate components of Azure DevOps Pipeline build.sh

  1. Refactor build.sh so that it is broken up into functions. That way, the unit test can source build.sh and reference reusable blocks of code from the script for testing.

  2. Develop unit test shell script that will specify default environment variables and call functions from build.sh to run for testing. This should be able to run locally and report results.

implement / deploy Kubernetes based chaos

Allow for the deployment of a Kubernetes / pod level chaos solution.

Implementation should include documenting available tests as well as implementing knobs to enable/disable tests.

  • Implement Pod level chaos testing
  • Implement latency injection istio fabrikate HDL
  • Implement Fabrikate component for chaos stack
  • Add Documentation for fabrikate component

Support for Windows for CI/CD hosts

The null resource provisioning requires bash shell. This should be at least called out in the readme or refactored to support both Windows and Linux.

Add Service Mesh

As a person with operations responsibilities, I'd like to be able to:

  1. Observe the success rate of requests to services in the system.
  2. Secure east-west traffic between services with TLS.
  3. Be able to flight new versions of services with traffic splitting.

Ideas for implementation include Istio, Linkerd2, or using a higher level management platform around these like supergloo

Spike: Investigate ways to test CI/CD shell scripts

Looked at a few options for developing unit tests, and it appears the using a shell script may be the simplest approach for now. Stumbled upon shUnit2, which is a unit test framework, and could be using it to aid in developing the unit test.

After discussing with the team, it appears that the following steps will take place:

  1. Refactor build.sh so that it is broken up into functions. That way, the unit test can source build.sh and reference reusable blocks of code from the script for testing.

  2. Develop unit test shell script that will specify default environment variables and call functions from build.sh to run for testing. This should be able to run locally and report results.

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.