Resources
This page contains information about various tools and technologies that are useful to anyone developing on Knative.
ko
ko
is a tool designed to make development of Go apps on Kubernetes easier, by abstracting away the container image being used, and instead referring to Go packages by their import paths (e.g., github.com/kaniko/serving/cmd/controller
)
The typical usage is ko apply --filename config.yaml
, which reads in the config YAML, and looks for Go import paths representing runnable commands (i.e., package main
). When it finds a matching import path, ko
builds the package using go build
then pushes a container image containing that binary on top of a base image (by default, gcr.io/distroless/base
) to $KO_DOCKER_REPO/unique-string
. After pushing those images, ko
replaces instances of matched import paths with fully-qualified references to the images it pushed.
So if ko apply
was passed this config:
---
image: github.com/my/repo/cmd/foo
…it would produce YAML like:
---
image: gcr.io/my-docker-repo/foo-zyxwvut@sha256:abcdef # image by digest
(This assumes that you have set the environment variable KO_DOCKER_REPO=gcr.io/my-docker-repo
)
ko apply
then passes this generated YAML config to kubectl apply
.
ko
also supports:
ko publish
to simply push images and not produce configs.ko resolve
to push images and output the generated configs, but notkubectl apply
them.ko delete
to simply passthrough tokubectl delete
for convenience.
ko
is used during development and release of Knative components, but is not intended to be required for users of Knative – they should only need to kubectl apply
released configs generated by ko
.