All Projects → vmware-tanzu → carvel-simple-app-on-kubernetes

vmware-tanzu / carvel-simple-app-on-kubernetes

Licence: Apache-2.0 License
K8s simple Go app example deployed with k14s tools

Programming Languages

shell
77523 projects
go
31211 projects - #10 most used programming language
Dockerfile
14818 projects

Projects that are alternatives of or similar to carvel-simple-app-on-kubernetes

terraform-provider-carvel
Carvel Terraform provider with resources for ytt and kapp to template and deploy to Kubernetes
Stars: ✭ 40 (+73.91%)
Mutual labels:  k8s, kapp, ytt, carvel
manifest-summary
print summary of a kubernetes manifest
Stars: ✭ 31 (+34.78%)
Mutual labels:  yaml, k8s
dockerfiles
Dockerfile & kubernetes Yaml Templates
Stars: ✭ 44 (+91.3%)
Mutual labels:  yaml, k8s
carvel-secretgen-controller
secretgen-controller provides CRDs to specify what secrets need to be on Kubernetes cluster (to be generated or not)
Stars: ✭ 54 (+134.78%)
Mutual labels:  k8s, carvel
Carvel Ytt
YAML templating tool that works on YAML structure instead of text
Stars: ✭ 816 (+3447.83%)
Mutual labels:  yaml, k8s
kahoy
Simple Kubernetes raw manifests deployment tool
Stars: ✭ 33 (+43.48%)
Mutual labels:  yaml, k8s
website
Prometheus monitoring mixins
Stars: ✭ 91 (+295.65%)
Mutual labels:  yaml
AgentBaker
Agent Baker is aiming to provide a centralized, portable k8s agent node provisioning lib as well as rich support on different OS image with optimized k8s binaries.
Stars: ✭ 45 (+95.65%)
Mutual labels:  k8s
yaml-front-matter
A to the point yaml front matter parser
Stars: ✭ 200 (+769.57%)
Mutual labels:  yaml
firework8s
Firework8s is a collection of kubernetes objects (yaml files) for deploying workloads in a home lab.
Stars: ✭ 35 (+52.17%)
Mutual labels:  k8s
k8s-log
容器日志搜集套件。
Stars: ✭ 15 (-34.78%)
Mutual labels:  k8s
radondb-mysql-kubernetes
Open Source,High Availability Cluster,based on MySQL
Stars: ✭ 146 (+534.78%)
Mutual labels:  k8s
dataconf
Simple dataclasses configuration management for Python with hocon/json/yaml/properties/env-vars/dict support.
Stars: ✭ 40 (+73.91%)
Mutual labels:  yaml
CoreFormatters
.NET Core Custom Formatter for Yaml
Stars: ✭ 21 (-8.7%)
Mutual labels:  yaml
siddhi-operator
Operator allows you to run stream processing logic directly on a Kubernetes cluster
Stars: ✭ 16 (-30.43%)
Mutual labels:  k8s
examples
Example Prismatic components and integrations
Stars: ✭ 23 (+0%)
Mutual labels:  yaml
conduit
Simplified Data Exchange for HPC Simulations
Stars: ✭ 114 (+395.65%)
Mutual labels:  yaml
blog
My Tech Blog: about Rust / Golang / Python / Flutter / Blockchain etc.
Stars: ✭ 150 (+552.17%)
Mutual labels:  k8s
yajsv
Yet Another JSON Schema Validator [CLI]
Stars: ✭ 42 (+82.61%)
Mutual labels:  yaml
front
Frontmatter
Stars: ✭ 21 (-8.7%)
Mutual labels:  yaml

logo

k8s-simple-app-example

Example repo shows how to use tools from carvel dev: ytt, kbld, kapp and kwt to work with a simple Go app on Kubernetes.

Associated blog post: Deploying Kubernetes Applications with ytt, kbld, and kapp.

Install Carvel Tools

Head over to carvel.dev for installation instructions.

Deploying Application

Each top level step has an associated config-step-* directory. Refer to Directory Layout for details about files.

Step 1: Deploying application

Introduces kapp for deploying k8s resources.

kapp deploy -a simple-app -f config-step-1-minimal/
kapp inspect -a simple-app --tree
kapp logs -f -a simple-app

Step 1a: Viewing application

Once deployed successfully, you can access frontend service at 127.0.0.1:8080 in your browser via kubectl port-forward command:

kubectl port-forward svc/simple-app 8080:80

You will have to restart port forward command after making any changes as pods are recreated. Alternatively consider using kwt which exposes cluser IP subnets and cluster DNS to your machine and does not require any restarts:

sudo -E kwt net start

and open http://simple-app.default.svc.cluster.local/.

Step 1b: Modifying application configuration

Modify HELLO_MSG environment value from stranger to something else in config-step-1-minimal/config.yml, and run:

kapp deploy -a simple-app -f config-step-1-minimal/ --diff-changes

In following steps we'll use -c shorthand for --diff-changes.

Step 2: Configuration templating

Introduces ytt templating for more flexible configuration.

kapp deploy -a simple-app -c -f <(ytt -f config-step-2-template/)

ytt provides a way to configure data values from command line as well:

kapp deploy -a simple-app -c -f <(ytt -f config-step-2-template/ -v hello_msg=another-stranger)

New message should be returned from the app in the browser.

Step 2a: Configuration patching

Introduces ytt overlays to patch configuration without modifying original config.yml.

kapp deploy -a simple-app -c -f <(ytt -f config-step-2-template/ -f config-step-2a-overlays/custom-scale.yml)

Step 2b: Customizing configuration data values per environment

Requires ytt v0.13.0+.

Introduces use of multiple data values to show layering of configuration for different environment without modifying default values.yml.

kapp deploy -a simple-app -c -f <(ytt -f config-step-2-template/ -f config-step-2b-multiple-data-values/)

Step 3: Building container images locally

Introduces kbld functionality for building images from source code. This step requires Minikube. If Minikube is not available, skip to the next step.

eval $(minikube docker-env)
kapp deploy -a simple-app -c -f <(ytt -f config-step-3-build-local/ | kbld -f-)

Note that rerunning above command again should be a noop, given that nothing has changed.

Step 3a: Modifying application source code

Uncomment fmt.Fprintf(w, "<p>local change</p>") line in app.go, and re-run above command:

kapp deploy -a simple-app -c -f <(ytt -f config-step-3-build-local/ | kbld -f-)

Observe that new container was built, and deployed. This change should be returned from the app in the browser.

Step 4: Building and pushing container images to registry

Introduces kbld functionality to push to remote registries. This step can work with Minikube or any remote cluster.

docker login -u dkalinin -p ...
kapp deploy -a simple-app -c -f <(ytt -f config-step-4-build-and-push/ -v push_images_repo=gcr.io/projectX/k8s-simple-app | kbld -f-)

Step 5: Clean up cluster resources

kapp delete -a simple-app

There is currently no functionality in kbld to remove pushed images from registry.

Directory Layout

  • app.go: simple Go HTTP server
  • Dockerfile: Dockerfile to build Go app
  • config-step-1-minimal/
    • config.yml: basic k8s Service and Deployment configuration for the app
  • config-step-2-template/
    • config.yml: slightly modified configuration to use ytt features, such as data module and functions
    • values.yml: defines extracted data values used in config.yml
  • config-step-2a-overlays/
  • config-step-3-build-local/
    • build.yml: tells kbld about how to build container image from source (app.go + Dockerfile)
    • config.yml: same as prev step
    • values.yml: same as prev step
  • config-step-4-build-and-push/
    • build.yml: same as prev step
    • push.yml: tells kbld about how to push container image to remote registry
    • config.yml: same as prev step
    • values.yml: defines shared configuration, including configuration for pushing container images

Join the Community and Make Carvel Better

Carvel is better because of our contributors and maintainers. It is because of you that we can bring great software to the community. Please join us during our online community meetings. Details can be found on our Carvel website.

You can chat with us on Kubernetes Slack in the #carvel channel and follow us on Twitter at @carvel_dev.

Check out which organizations are using and contributing to Carvel: Adopter's list

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].