Skip to content

Commit

Permalink
Merge pull request #6 from adrianchiris/add-skaffold-support
Browse files Browse the repository at this point in the history
Add local dev env via skaffold
  • Loading branch information
adrianchiris authored Aug 16, 2023
2 parents 81612a0 + aa28dea commit e8f2483
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 0 deletions.
52 changes: 52 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@
- [Build and Run Locally](#build-and-run-locally)
- [Prerequisites](#prerequisites-1)
- [Build \& Run](#build--run)
- [Build \& Run In K8s Cluster For Development](#build--run-in-k8s-cluster-for-development)
- [Install Prerequisites](#install-prerequisites)
- [Local Cluster](#local-cluster)
- [Create Local K8s Development Environment](#create-local-k8s-development-environment)
- [Cleanup Local K8s Development Environment](#cleanup-local-k8s-development-environment)
- [Remote K8s Cluster (existing cluster)](#remote-k8s-cluster-existing-cluster)

## Overview

Expand Down Expand Up @@ -192,3 +198,49 @@ task build

> __Note__: To build container image run `task image:build`. to deploy this image in your k8 cluster, you should re-tag and upload to your
> own image registry, then create an overlay for exsiting deployment which overrides the image name with your own image path.

### Build & Run In K8s Cluster For Development

For development [skaffold](https://skaffold.dev/) is used to deploy
local changes onto a K8s cluster.

#### Install Prerequisites

1. [install Docker](https://docs.docker.com/engine/install/)
2. [install kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)
3. [install minikube](https://minikube.sigs.k8s.io/docs/start/)
4. [install skaffold](https://skaffold.dev/docs/install/#standalone-binary)

#### Local Cluster

##### Create Local K8s Development Environment

```shell
task -o interleaved localdev:start
```

To trigger a rebuild, press any key in the current shell.

##### Cleanup Local K8s Development Environment

```shell
task -o interleaved localdev:clean
```

#### Remote K8s Cluster (existing cluster)

For this deployment option you should provide the following environment variables

- `LOCALDEV_IMAGE_REPO`: image repository which skaffold will use.
- `LOCALDEV_KUBECONFIG`: optional, path to kubeconfig file which will be used by skaffold to access k8s cluster.
- `LOCALDEV_KUBECONTEXT`: optional. name of kube context which will be used by skaffold to access k8s cluster.

```shell
LOCALDEV_IMAGE_REPO=quay.io/myuser LOCALDEV_KUBECONTEXT=my-remote-cluster task -o interleaved localdev:deploy
```

To trigger a rebuild, press any key in the current shell.

>__NOTE__: if `LOCALDEV_KUBECONFIG` and `LOCALDEV_KUBECONTEXT` are not provided, the current context pointed by
> kubectl will be used.
1 change: 1 addition & 0 deletions Taskfile.dist.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ includes:
BIN_DIR: "{{.LOCAL_BIN}}"
kind: ./taskfiles/Kind.yaml
image: ./taskfiles/Image.yaml
localdev: ./taskfiles/LocalDev.yaml

tasks:
clean:
Expand Down
18 changes: 18 additions & 0 deletions deployment/k8s/overlays/dev/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: nic-feature-discovery

patches:
- target:
version: v1
group: apps
kind: DaemonSet
name: nic-feature-discovery-ds
patch: |-
- op: replace
path: /spec/template/spec/containers/0/args
value: ["--v=5", "--logging-format=text"]
resources:
- ../default
21 changes: 21 additions & 0 deletions skaffold.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
apiVersion: skaffold/v4beta6
kind: Config
metadata:
name: nic-feature-discovery
build:
artifacts:
- image: ghcr.io/mellanox/nic-feature-discovery
docker:
dockerfile: Dockerfile
manifests:
kustomize:
paths:
- deployment/k8s/base
profiles:
- name: local-dev
manifests:
kustomize:
paths:
- deployment/k8s/overlays/dev
activation:
- command: dev
28 changes: 28 additions & 0 deletions taskfiles/LocalDev.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
version: '3'

tasks:
start:
desc: deploy using skaffold to k8s using current kube context (run with -o interleaved for interactive output)
vars:
NFD_VERSION: v0.13.3
cmd: |
minikube --profile nfd-dev start
# this one will point docker cli to the same daemon as used by minikube nfd-dev cluster
# that way skaffold will build images in the correct local repo.
eval $(minikube -p nfd-dev docker-env)
kubectl apply -k "https://github.com/kubernetes-sigs/node-feature-discovery/deployment/overlays/default?ref={{.NFD_VERSION}}"
skaffold dev --trigger=manual
clean:
desc: clean local k8s dev cluster
cmd: minikube --profile nfd-dev delete

deploy:
desc: deploy on pre-created cluster
vars:
LOCALDEV_IMAGE_REPO: '{{.LOCALDEV_IMAGE_REPO | default "harbor.mellanox.com/cloud-orchestration-dev"}}'
#LOCALDEV_KUBECONFIG: "/path/to/kubeconfig" <- optional, pass in via env var
#LOCALDEV_KUBECONTEXT: "kube-context-name" <- optional, pass in via env var
cmd: |
export SK_FLAGS="{{if .LOCALDEV_KUBECONFIG}}--kubeconfig={{.LOCALDEV_KUBECONFIG}}{{else}}{{if .LOCALDEV_KUBECONTEXT}}--kube-context={{.LOCALDEV_KUBECONTEXT}}{{end}}{{end}}"
skaffold dev --trigger=manual --default-repo={{.LOCALDEV_IMAGE_REPO}} $SK_FLAGS

0 comments on commit e8f2483

Please sign in to comment.