Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add local dev env via skaffold #6

Merged
merged 2 commits into from
Aug 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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