mirror of
https://github.com/TECHNOFAB11/kubenix.git
synced 2025-12-12 16:10:05 +01:00
feat(examples): add nginx deployment
This commit is contained in:
parent
5d8b66f8a0
commit
432cc9e347
6 changed files with 140 additions and 0 deletions
5
examples/default.nix
Normal file
5
examples/default.nix
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
{ kubenix ? import ./.. {} }:
|
||||||
|
|
||||||
|
{
|
||||||
|
nginx-deployment = import ./nginx-deployment { inherit kubenix; };
|
||||||
|
}
|
||||||
18
examples/nginx-deployment/README.md
Normal file
18
examples/nginx-deployment/README.md
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Example: kubernetes nginx deployment
|
||||||
|
|
||||||
|
A simple example creating kubernetes nginx deployment and associated docker
|
||||||
|
image
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Building and applying kubernetes yaml file
|
||||||
|
|
||||||
|
```
|
||||||
|
nix-instantiate --eval --strict --json -A listObject | kubectl apply -f -
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building and pushing docker images
|
||||||
|
|
||||||
|
```
|
||||||
|
nix run -f ./. pushDockerImages -c copy-docker-images
|
||||||
|
```
|
||||||
33
examples/nginx-deployment/default.nix
Normal file
33
examples/nginx-deployment/default.nix
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
{ kubenix ? import ../.. {} }:
|
||||||
|
|
||||||
|
with kubenix.lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
registy = "docker.io/gatehub";
|
||||||
|
in rec {
|
||||||
|
# evaluated configuration
|
||||||
|
config = (kubenix.evalModules {
|
||||||
|
modules = [
|
||||||
|
./module.nix
|
||||||
|
{ docker.registry.url = registy; }
|
||||||
|
];
|
||||||
|
}).config;
|
||||||
|
|
||||||
|
# list of kubernetes objects
|
||||||
|
objects = config.kubernetes.objects;
|
||||||
|
|
||||||
|
# hashed kubernetes List object
|
||||||
|
listObject = k8s.mkHashedList { items = config.kubernetes.objects; };
|
||||||
|
|
||||||
|
# YAML file you can deploy to kubernetes
|
||||||
|
yaml = toYAML listObject;
|
||||||
|
|
||||||
|
# Exported docker images
|
||||||
|
images = config.docker.export;
|
||||||
|
|
||||||
|
# script to push docker images to registry
|
||||||
|
pushDockerImages = docker.copyDockerImages {
|
||||||
|
inherit images;
|
||||||
|
dest = "docker://${registy}";
|
||||||
|
};
|
||||||
|
}
|
||||||
18
examples/nginx-deployment/image.nix
Normal file
18
examples/nginx-deployment/image.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{ dockerTools, nginx }:
|
||||||
|
|
||||||
|
dockerTools.buildLayeredImage {
|
||||||
|
name = "nginx";
|
||||||
|
contents = [ nginx ];
|
||||||
|
extraCommands = ''
|
||||||
|
mkdir etc
|
||||||
|
chmod u+w etc
|
||||||
|
echo "nginx:x:1000:1000::/:" > etc/passwd
|
||||||
|
echo "nginx:x:1000:nginx" > etc/group
|
||||||
|
'';
|
||||||
|
config = {
|
||||||
|
Cmd = ["nginx" "-c" "/etc/nginx/nginx.conf"];
|
||||||
|
ExposedPorts = {
|
||||||
|
"80/tcp" = {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
64
examples/nginx-deployment/module.nix
Normal file
64
examples/nginx-deployment/module.nix
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
{ config, lib, pkgs, test, kubenix, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
nginx = pkgs.callPackage ./image.nix { };
|
||||||
|
in {
|
||||||
|
imports = [ kubenix.module ];
|
||||||
|
|
||||||
|
docker.images.nginx.image = nginx;
|
||||||
|
|
||||||
|
kubernetes.api.deployments.nginx = {
|
||||||
|
spec = {
|
||||||
|
replicas = 10;
|
||||||
|
selector.matchLabels.app = "nginx";
|
||||||
|
template = {
|
||||||
|
metadata.labels.app = "nginx";
|
||||||
|
spec = {
|
||||||
|
securityContext.fsGroup = 1000;
|
||||||
|
containers.nginx = {
|
||||||
|
image = config.docker.images.nginx.path;
|
||||||
|
imagePullPolicy = "IfNotPresent";
|
||||||
|
volumeMounts."/etc/nginx".name = "config";
|
||||||
|
volumeMounts."/var/lib/html".name = "static";
|
||||||
|
};
|
||||||
|
volumes.config.persistentVolumeClaim.claimName = "config";
|
||||||
|
volumes.static.persistentVolumeClaim.claimName = "static";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
kubernetes.api.configmaps.nginx-config.data."nginx.conf" = ''
|
||||||
|
user nginx nginx;
|
||||||
|
daemon off;
|
||||||
|
error_log /dev/stdout info;
|
||||||
|
pid /dev/null;
|
||||||
|
events {}
|
||||||
|
http {
|
||||||
|
access_log /dev/stdout;
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
index index.html;
|
||||||
|
location / {
|
||||||
|
root /var/lib/html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
|
||||||
|
kubernetes.api.configmaps.nginx-static.data."index.html" = ''
|
||||||
|
<html><body><h1>Hello from NGINX</h1></body></html>
|
||||||
|
'';
|
||||||
|
|
||||||
|
kubernetes.api.services.nginx = {
|
||||||
|
spec = {
|
||||||
|
ports = [{
|
||||||
|
name = "http";
|
||||||
|
port = 80;
|
||||||
|
}];
|
||||||
|
selector.app = "nginx";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -82,4 +82,6 @@ in {
|
||||||
tests = import ./tests {
|
tests = import ./tests {
|
||||||
inherit pkgs lib kubenix;
|
inherit pkgs lib kubenix;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
examples = import ./examples {};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue