diff --git a/Makefile b/Makefile index 7eb0d4643b..85c865181a 100644 --- a/Makefile +++ b/Makefile @@ -209,3 +209,7 @@ dep-ensure: dep version || go get -u github.com/golang/dep/cmd/dep dep ensure -v dep prune -v + +.PHONY: dev-env +dev-env: + @./hack/build-dev-env.sh diff --git a/docs/development.md b/docs/development.md index 836c2c2d35..c351e39539 100644 --- a/docs/development.md +++ b/docs/development.md @@ -3,6 +3,32 @@ This document explains how to get started with developing for NGINX Ingress controller. It includes how to build, test, and release ingress controllers. +## Quick Start + +### Initial developer environment build + +**Prequisites**: Minikube must be installed; See [releases](https://github.com/kubernetes/minikube/releases) for installation instructions. + +If you are using **MacOS** and deploying to **minikube**, the following command will build the local nginx controller container image and deploy the ingress controller onto a minikube cluster with RBAC enabled in the namespace `ingress-nginx`: + +``` +$ make dev-env +``` + +### Updating the deployment + +The nginx controller container image can be rebuilt using: +``` +$ ARCH=amd64 TAG=dev REGISTRY=$USER/ingress-controller make build container +``` + +The image will only be used by pods created after the rebuild. To delete old pods which will cause new ones to spin up: +``` +$ kubectl get pods -n ingress-nginx +$ kubectl delete pod -n ingress-nginx nginx-ingress-controller- +``` + + ## Dependencies The build uses dependencies in the `vendor` directory, which diff --git a/hack/build-dev-env.sh b/hack/build-dev-env.sh new file mode 100755 index 0000000000..0e6cbefe88 --- /dev/null +++ b/hack/build-dev-env.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# Copyright 2018 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +NAMESPACE=ingress-nginx + +minikube start +eval $(minikube docker-env) + +echo "[dev-env] installing dependencies" +go get -u github.com/golang/dep +dep ensure + +echo "[dev-env] building container" +ARCH=amd64 TAG=dev REGISTRY=$USER/ingress-controller make build container + +echo "[dev-env] installing kubectl" +brew install kubectl + +echo "[dev-env] deploying NGINX Ingress controller in namespace $NAMESPACE" +cat ./deploy/namespace.yaml | kubectl apply --namespace=$NAMESPACE -f - +cat ./deploy/default-backend.yaml | kubectl apply --namespace=$NAMESPACE -f - +cat ./deploy/configmap.yaml | kubectl apply --namespace=$NAMESPACE -f - +cat ./deploy/tcp-services-configmap.yaml | kubectl apply --namespace=$NAMESPACE -f - +cat ./deploy/udp-services-configmap.yaml | kubectl apply --namespace=$NAMESPACE -f - +cat ./deploy/rbac.yaml | kubectl apply --namespace=$NAMESPACE -f - +cat ./deploy/with-rbac.yaml | kubectl apply --namespace=$NAMESPACE -f - + +echo "updating image..." +kubectl set image \ + deployments \ + --namespace ingress-nginx \ + --selector app=ingress-nginx \ + nginx-ingress-controller=index.docker.io/$USER/ingress-controller/nginx-ingress-controller:dev