V1.0.0
This commit is contained in:
commit
d993995eb3
17
.env.dist
Normal file
17
.env.dist
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# docker image
|
||||||
|
DOCKER_IMAGE=hello-kube
|
||||||
|
DOCKER_IMAGE_VERSION=1.0
|
||||||
|
PORT_LOCAL=8081
|
||||||
|
PORT=8080 # do not change var name. It using by server.js
|
||||||
|
|
||||||
|
# registry docker
|
||||||
|
DOCKER_REGISTRY=docker.io
|
||||||
|
DOCKER_REGISTRY_USER=gmouchet
|
||||||
|
DOCKER_REGISTRY_PASSWORD=TO_BE_COMPLETED
|
||||||
|
|
||||||
|
# variable used by the application
|
||||||
|
KUBERNETES_NAMESPACE=Docker
|
||||||
|
KUBERNETES_NODE_NAME=${HOSTNAME}
|
||||||
|
MESSAGE="Welcome on Docker environment"
|
||||||
|
|
||||||
|
|
||||||
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.env
|
||||||
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"editor.fontSize": 13,
|
||||||
|
"terminal.integrated.fontSize": 13,
|
||||||
|
"window.zoomLevel": 1.4,
|
||||||
|
}
|
||||||
47
README.md
Normal file
47
README.md
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# Hello kube application
|
||||||
|
## Description
|
||||||
|
This application display a web page with:
|
||||||
|
* message
|
||||||
|
* namespace
|
||||||
|
* pod
|
||||||
|
* node
|
||||||
|
* image details
|
||||||
|
|
||||||
|
## clone repositopry
|
||||||
|
```bash
|
||||||
|
git clone https://gitweb.dyndns.org/helm/hello-kube.git
|
||||||
|
```
|
||||||
|
|
||||||
|
## Helm variables
|
||||||
|
|
||||||
|
| Variable name | Value sample | Description |
|
||||||
|
|:---|:---|:---|
|
||||||
|
| message | `hello world` | Message display on web page |
|
||||||
|
| ingress.hostUrl | `hello-kube.gmolab.net`| Site URL. Must be define in DNS or hosts file |
|
||||||
|
| deployment.replicaCount | `2` | Number of deployment's replica |
|
||||||
|
| deployment.container.image.repository | `docker.io/gmouchet/hello-kube:1.0` | Docker image repository |
|
||||||
|
| deployment.container.image.repository.pullPolicy | `IfNotPresent` | [Image Pull Policy](https://kubernetes.io/docs/concepts/containers/images/) |
|
||||||
|
| deployment.container.port | `8080` | Docker image port. Do not change without rebuild docker image |
|
||||||
|
|
||||||
|
## Deploy
|
||||||
|
```bash
|
||||||
|
KENV=gmo|vdg
|
||||||
|
helm upgrade hello-kube . \
|
||||||
|
--install \
|
||||||
|
--atomic \
|
||||||
|
--cleanup-on-fail \
|
||||||
|
--values=values-$KENV-env.yaml \
|
||||||
|
--namespace hello-kube \
|
||||||
|
--create-namespace
|
||||||
|
```
|
||||||
|
## Test
|
||||||
|
Go to http://hello-kube.gmolab.net (<ingress.hostUrl>)
|
||||||
|
|
||||||
|
## Building images
|
||||||
|
|
||||||
|
If you'd like to build the `hello-kube` container image yourself and reference from your own registry or DockerHub repository, then you can get more details on how to do this in the [Build and push container images](README_BUILD.md) documentation.
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
### v1.0.0 (2025-04-12)
|
||||||
|
#### Added
|
||||||
|
- initial version
|
||||||
64
README_BUILD.md
Normal file
64
README_BUILD.md
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# Hello Kube demo app
|
||||||
|
|
||||||
|
A demo app that can be deployd to a Kubernetes cluster (k8s, kind, etc.). It displays a message, and also namespace, pod, node and image details.
|
||||||
|
|
||||||
|
This is a fork from [paulbouwer/hello-kubernetes](https://github.com/paulbouwer/hello-kubernetes)
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
| Variables | Required | Default Value | Description |
|
||||||
|
| --- | -------- | ------------- | ----------- |
|
||||||
|
| DOCKER_IMAGE | Yes | hello-kube | Docker image name |
|
||||||
|
| DOCKER_IMAGE_VERSION | Yes | 1.0 | Docker image version |
|
||||||
|
| DOCKER_REGISTRY | yes | docker.io | Docker registry name |
|
||||||
|
| DOCKER_REGISTRY_USER | Yes | gmouchet | Docker registry user |
|
||||||
|
| DOCKER_REGISTRY_PASSWORD| Yes | secret | Docker registry user password |
|
||||||
|
| PORT_LOCAL| No| 8080 | The port for URL <server_fqdn>:<PORT_LOCAL>|
|
||||||
|
| PORT | No | 8080 | The port that the app listens on. |
|
||||||
|
| MESSAGE | No | "Hello world!" | The message displayed by the app. |
|
||||||
|
| RENDER_PATH_PREFIX | No | "" | The path prefix to use when rendering the urls for the static assets in the handlebar templates. <br/> Must be used when app is deployed with an ingress using a backend path for traffic to app. |
|
||||||
|
| HANDLER_PATH_PREFIX | No | "" | The path prefix to use by handlers when serving the dynamic and static assets. <br/> Note: Must be used when app is deployed with an ingress that has a backend path for traffic to the app, but which does not rewrite the backend paths to '/'. |
|
||||||
|
| KUBERNETES_NAMESPACE | Yes | "-" | The Kubernetes namespace that the app has been deployed to. |
|
||||||
|
| KUBERNETES_NODE_NAME | Yes | "-" | The name of the Kubernetes node that the app is deployed on. |
|
||||||
|
|
||||||
|
The application relies on the following files for configuration and operational information.
|
||||||
|
|
||||||
|
| File | Required | Information | Description |
|
||||||
|
| ---- | -------- | ----------- | ----------- |
|
||||||
|
| package.json | Yes | `.version` | The release version is used when the CONTAINER_IMAGE env is not provided. |
|
||||||
|
| info.json | Yes | `.containerImageArch` | The container image architecture is used for display. This file will be overwritten in future versions as part of the container image build process when multi-arch images are suppoted. |
|
||||||
|
|
||||||
|
## Build image
|
||||||
|
**Multi architecture**
|
||||||
|
|
||||||
|
To create a multi-architecture image, proceed as follows:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker buildx create --use --name gmobuilder
|
||||||
|
docker buildx inspect gmobuilder --bootstrap
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker buildx build --platform linux/amd64,linux/arm64 -t gmouchet/hello-kube:latest . --push
|
||||||
|
```
|
||||||
|
or user script `./docker.sh build`
|
||||||
|
|
||||||
|
**Variables**
|
||||||
|
```bash
|
||||||
|
cp .env.dist .env
|
||||||
|
vim .env
|
||||||
|
```
|
||||||
|
|
||||||
|
**Build image**
|
||||||
|
```bash
|
||||||
|
./docker.sh build-no-cache
|
||||||
|
```
|
||||||
|
**Others actions**
|
||||||
|
```bash
|
||||||
|
./docker.sh help
|
||||||
|
```
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
### v1.0.0 (2025-04-12)
|
||||||
|
#### Added
|
||||||
|
- initial version
|
||||||
10
docker-compose.yml
Normal file
10
docker-compose.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
services:
|
||||||
|
hello-kube:
|
||||||
|
container_name: hello-kube
|
||||||
|
hostname: hello-kube
|
||||||
|
image: ${DOCKER_REGISTRY_USER}/${DOCKER_IMAGE}:${DOCKER_IMAGE_VERSION}
|
||||||
|
ports:
|
||||||
|
- '${PORT_LOCAL:-9090}:${PORT:-8080}' #local:docker
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
|
||||||
101
docker.sh
Executable file
101
docker.sh
Executable file
@ -0,0 +1,101 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
progName="./$(/bin/basename $0)"
|
||||||
|
|
||||||
|
DOCKER_REGISTRY="$(grep -s 'DOCKER_REGISTRY=' .env | cut -f2 -d=)"
|
||||||
|
DOCKER_REGISTRY_USER="$(grep -s 'DOCKER_REGISTRY_USER=' .env | cut -f2 -d=)"
|
||||||
|
DOCKER_REGISTRY_PASSWORD="$(grep -s 'DOCKER_REGISTRY_PASSWORD=' .env | cut -f2 -d=)"
|
||||||
|
DOCKER_IMAGE="$(grep -s 'DOCKER_IMAGE=' .env | cut -f2 -d=)"
|
||||||
|
DOCKER_IMAGE_VERSION="$(grep -s 'DOCKER_IMAGE_VERSION=' .env | cut -f2 -d=)"
|
||||||
|
|
||||||
|
function print_usage {
|
||||||
|
# print
|
||||||
|
/bin/cat << EOF
|
||||||
|
|
||||||
|
Usage: $progName [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
start Start docker container
|
||||||
|
stop Stop docker container
|
||||||
|
down Stop docker container and delete container and image
|
||||||
|
bash Open a shell bash
|
||||||
|
bash-root Open a root shell
|
||||||
|
logs Display container logs
|
||||||
|
build Build docker images and push on registry
|
||||||
|
build-no-cache Build docker images without use cache and push on registry
|
||||||
|
help,-h,--help Display this help
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
To start container
|
||||||
|
$progName start
|
||||||
|
To stop container
|
||||||
|
$progName stop
|
||||||
|
To create a new functional environment after recovering the sources
|
||||||
|
$progName build
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then
|
||||||
|
echo "${progName}: you must specify an option"
|
||||||
|
echo -e "Try '$progName help' for more information.\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
while test $# -gt 0
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
docker compose up -d;
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
docker compose stop
|
||||||
|
;;
|
||||||
|
down)
|
||||||
|
docker compose down --rmi all
|
||||||
|
;;
|
||||||
|
bash)
|
||||||
|
docker exec -it hello-kube /bin/sh
|
||||||
|
;;
|
||||||
|
bash-root)
|
||||||
|
docker exec --user root -it hello-kube /bin/sh
|
||||||
|
;;
|
||||||
|
logs)
|
||||||
|
docker logs hello-kube -f
|
||||||
|
;;
|
||||||
|
build-no-cache)
|
||||||
|
echo $DOCKER_REGISTRY_PASSWORD| docker login -u ${DOCKER_REGISTRY_USER} --password-stdin ${DOCKER_REGISTRY}
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# need for multi architecture
|
||||||
|
docker buildx create --append --use --name gmobuilder
|
||||||
|
docker buildx inspect gmobuilder --bootstrap
|
||||||
|
# build multi architecture image
|
||||||
|
docker buildx build --no-cache --platform linux/amd64,linux/arm64 \
|
||||||
|
-t ${DOCKER_REGISTRY_USER}/${DOCKER_IMAGE}:${DOCKER_IMAGE_VERSION} \
|
||||||
|
-f ./docker/hello-kube/Dockerfile . --output=type=registry
|
||||||
|
docker logout ${DOCKER_REGISTRY}
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
build)
|
||||||
|
echo $DOCKER_REGISTRY_PASSWORD| docker login -u ${DOCKER_REGISTRY_USER} --password-stdin ${DOCKER_REGISTRY}
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# need for multi architecture
|
||||||
|
docker buildx create --append --use --name gmobuilder
|
||||||
|
docker buildx inspect gmobuilder --bootstrap
|
||||||
|
# build multi architecture image
|
||||||
|
docker buildx build --platform linux/amd64,linux/arm64 \
|
||||||
|
-t ${DOCKER_REGISTRY_USER}/${DOCKER_IMAGE}:${DOCKER_IMAGE_VERSION} \
|
||||||
|
-f ./docker/hello-kube/Dockerfile . --output=type=registry
|
||||||
|
docker logout ${DOCKER_REGISTRY}
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
-h|--help|help)
|
||||||
|
print_usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "${progName}: invalid option -- '$1'!"
|
||||||
|
echo -e "Try '$progName help' for more information.\n"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
|
|
||||||
3
docker/hello-kube/.dockerignore
Normal file
3
docker/hello-kube/.dockerignore
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
node_modules
|
||||||
|
package-lock.json
|
||||||
|
README.md
|
||||||
17
docker/hello-kube/Dockerfile
Normal file
17
docker/hello-kube/Dockerfile
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
FROM node:18.20.8-alpine3.21
|
||||||
|
|
||||||
|
# Create app directory
|
||||||
|
RUN mkdir -p /usr/src/app
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
# Install app dependencies
|
||||||
|
COPY ./docker/hello-kube/package.json /usr/src/app/
|
||||||
|
#COPY package.json /usr/src/app/
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
# Bundle app source
|
||||||
|
COPY ./docker/hello-kube/ /usr/src/app
|
||||||
|
#COPY . /usr/src/app
|
||||||
|
|
||||||
|
USER node
|
||||||
|
CMD [ "npm", "start" ]
|
||||||
3
docker/hello-kube/info.json
Normal file
3
docker/hello-kube/info.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"containerImageArch": "linux/amd64,linux/arm64"
|
||||||
|
}
|
||||||
18
docker/hello-kube/package.json
Normal file
18
docker/hello-kube/package.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "hello-kube",
|
||||||
|
"version": "1.0",
|
||||||
|
"description": "Hello Kube!",
|
||||||
|
"author": "Gilles Mouchet",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "server.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node server.js"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.17.1",
|
||||||
|
"express-handlebars": "^5.2.1",
|
||||||
|
"express-pino-logger": "^6.0.0",
|
||||||
|
"handlebars": "^4.7.7",
|
||||||
|
"pino": "^6.11.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
18
docker/hello-kube/package.json.reold
Normal file
18
docker/hello-kube/package.json.reold
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "hello-kube",
|
||||||
|
"version": "1.0",
|
||||||
|
"description": "Hello Kube!",
|
||||||
|
"author": "Gilles Mouchet",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "server.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node server.js"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.17.1",
|
||||||
|
"express-handlebars": "^5.2.1",
|
||||||
|
"pino-http": "^10.4.0",
|
||||||
|
"handlebars": "^4.7.7",
|
||||||
|
"pino": "^6.11.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
82
docker/hello-kube/server.js
Normal file
82
docker/hello-kube/server.js
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const exphbs = require('express-handlebars');
|
||||||
|
const os = require("os");
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
|
const pino = require('pino');
|
||||||
|
const expressPino = require('express-pino-logger');
|
||||||
|
const logger = pino({ level: process.env.LOG_LEVEL || 'info' });
|
||||||
|
const expressLogger = expressPino({ logger });
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
app.use(expressLogger);
|
||||||
|
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
|
||||||
|
app.set('view engine', 'handlebars');
|
||||||
|
|
||||||
|
// Configuration
|
||||||
|
|
||||||
|
var port = process.env.PORT || 8080;
|
||||||
|
var message = process.env.MESSAGE || 'Hello world!';
|
||||||
|
var renderPathPrefix = (
|
||||||
|
process.env.RENDER_PATH_PREFIX ?
|
||||||
|
'/' + process.env.RENDER_PATH_PREFIX.replace(/^[\\/]+/, '').replace(/[\\/]+$/, '') :
|
||||||
|
''
|
||||||
|
);
|
||||||
|
var handlerPathPrefix = (
|
||||||
|
process.env.HANDLER_PATH_PREFIX ?
|
||||||
|
'/' + process.env.HANDLER_PATH_PREFIX.replace(/^[\\/]+/, '').replace(/[\\/]+$/, '') :
|
||||||
|
''
|
||||||
|
);
|
||||||
|
|
||||||
|
var namespace = process.env.KUBERNETES_NAMESPACE || '-';
|
||||||
|
var podName = process.env.KUBERNETES_POD_NAME || os.hostname();
|
||||||
|
var nodeName = process.env.KUBERNETES_NODE_NAME || '-';
|
||||||
|
var nodeOS = os.type() + ' ' + os.release();
|
||||||
|
var applicationVersion = JSON.parse(fs.readFileSync('package.json', 'utf8')).version;
|
||||||
|
var containerImage = process.env.CONTAINER_IMAGE || 'gmouchet/hello-kube:' + applicationVersion
|
||||||
|
var containerImageArch = JSON.parse(fs.readFileSync('info.json', 'utf8')).containerImageArch;
|
||||||
|
|
||||||
|
logger.debug();
|
||||||
|
logger.debug('Configuration');
|
||||||
|
logger.debug('-----------------------------------------------------');
|
||||||
|
logger.debug('PORT=' + process.env.PORT);
|
||||||
|
logger.debug('MESSAGE=' + process.env.MESSAGE);
|
||||||
|
logger.debug('RENDER_PATH_PREFIX=' + process.env.RENDER_PATH_PREFIX);
|
||||||
|
logger.debug('HANDLER_PATH_PREFIX=' + process.env.HANDLER_PATH_PREFIX);
|
||||||
|
logger.debug('KUBERNETES_NAMESPACE=' + process.env.KUBERNETES_NAMESPACE);
|
||||||
|
logger.debug('KUBERNETES_POD_NAME=' + process.env.KUBERNETES_POD_NAME);
|
||||||
|
logger.debug('KUBERNETES_NODE_NAME=' + process.env.KUBERNETES_NODE_NAME);
|
||||||
|
logger.debug('CONTAINER_IMAGE=' + process.env.CONTAINER_IMAGE);
|
||||||
|
|
||||||
|
// Handlers
|
||||||
|
|
||||||
|
logger.debug();
|
||||||
|
logger.debug('Handlers');
|
||||||
|
logger.debug('-----------------------------------------------------');
|
||||||
|
|
||||||
|
logger.debug('Handler: static assets');
|
||||||
|
logger.debug('Serving from base path "' + handlerPathPrefix + '"');
|
||||||
|
app.use(handlerPathPrefix, express.static('static'))
|
||||||
|
|
||||||
|
logger.debug('Handler: /');
|
||||||
|
logger.debug('Serving from base path "' + handlerPathPrefix + '"');
|
||||||
|
app.get(handlerPathPrefix + '/', function (req, res) {
|
||||||
|
res.render('home', {
|
||||||
|
message: message,
|
||||||
|
namespace: namespace,
|
||||||
|
pod: podName,
|
||||||
|
node: nodeName + ' (' + nodeOS + ')',
|
||||||
|
container: containerImage + ' (' + containerImageArch + ')',
|
||||||
|
renderPathPrefix: renderPathPrefix
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Server
|
||||||
|
|
||||||
|
logger.debug();
|
||||||
|
logger.debug('Server');
|
||||||
|
logger.debug('-----------------------------------------------------');
|
||||||
|
|
||||||
|
app.listen(port, function () {
|
||||||
|
logger.info("Listening on: http://%s:%s", podName, port);
|
||||||
|
});
|
||||||
59
docker/hello-kube/static/css/main.css
Normal file
59
docker/hello-kube/static/css/main.css
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
body {
|
||||||
|
margin:0;
|
||||||
|
padding:0;
|
||||||
|
background-color:#333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main img {
|
||||||
|
margin: 40px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.content {
|
||||||
|
color:#f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content #message {
|
||||||
|
margin: 10px 0 50px 0;
|
||||||
|
padding: 30px 0;
|
||||||
|
font-family: 'Ubuntu', sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 32pt;
|
||||||
|
background-color: #505050;
|
||||||
|
border-top: 2px solid #909090;
|
||||||
|
border-bottom: 2px solid #909090;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content #footer {
|
||||||
|
margin: 50px 0;
|
||||||
|
padding: 30px 0;
|
||||||
|
font-family: 'Ubuntu', sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 12pt;
|
||||||
|
color: #909090;
|
||||||
|
border-top: 2px solid #909090;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content #info {
|
||||||
|
margin: 0 auto;
|
||||||
|
font-family: 'Ubuntu', sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 12pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content #info table {
|
||||||
|
margin: 10px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content #info table th {
|
||||||
|
text-align: right;
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content #info table td {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
BIN
docker/hello-kube/static/favicon.ico
Normal file
BIN
docker/hello-kube/static/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 66 KiB |
BIN
docker/hello-kube/static/images/kubernetes.png
Normal file
BIN
docker/hello-kube/static/images/kubernetes.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
22
docker/hello-kube/views/home.handlebars
Normal file
22
docker/hello-kube/views/home.handlebars
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<div id="message">
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
|
<div id="info">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th>namespace:</th>
|
||||||
|
<td>{{ namespace }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>pod:</th>
|
||||||
|
<td>{{ pod }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>node:</th>
|
||||||
|
<td>{{ node }}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div id="footer">
|
||||||
|
{{ container }}
|
||||||
|
</div>
|
||||||
18
docker/hello-kube/views/layouts/main.handlebars
Normal file
18
docker/hello-kube/views/layouts/main.handlebars
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Hello Kube!</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="{{ renderPathPrefix }}/css/main.css">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu:300" >
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="main">
|
||||||
|
<img src="{{ renderPathPrefix }}/images/kubernetes.png"/>
|
||||||
|
<div class="content">
|
||||||
|
{{{body}}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
29
helm/Chart.yaml
Normal file
29
helm/Chart.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: hello-kube
|
||||||
|
description: Display a simple web page
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- name: GMOLab
|
||||||
|
email: gilles.mouchet@gmail.com
|
||||||
|
|
||||||
|
# A chart can be either an 'application' or a 'library' chart.
|
||||||
|
#
|
||||||
|
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||||
|
# to be deployed.
|
||||||
|
#
|
||||||
|
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||||
|
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||||
|
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||||
|
type: application
|
||||||
|
|
||||||
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
|
# to the chart and its templates, including the app version.
|
||||||
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
|
version: 1.0.0
|
||||||
|
|
||||||
|
# This is the version number of the application being deployed. This version number should be
|
||||||
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
|
# It is recommended to use it with quotes.
|
||||||
|
# Also set the docker image tag
|
||||||
|
appVersion: "1.0.0"
|
||||||
58
helm/templates/deployment.yaml
Normal file
58
helm/templates/deployment.yaml
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: hello-kube
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ required ".Values.deployment.replicaCount entry is required!" .Values.deployment.replicaCount }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: hello-kube
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: hello-kube
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: hello-kube
|
||||||
|
image: {{ required ".Values.deployment.container.image.repository entry is required!" .Values.deployment.container.image.repository }}
|
||||||
|
imagePullPolicy: {{ required ".Values.deployment.container.image.pullPolicy entry is required!" .Values.deployment.container.image.pullPolicy }}
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
containerPort: {{ required ".Values.deployment.container.port entry is required!" .Values.deployment.container.port }}
|
||||||
|
env:
|
||||||
|
- name: PORT
|
||||||
|
value: '{{ required ".Values.deployment.container.port entry is required!" .Values.deployment.container.port }}'
|
||||||
|
- name: MESSAGE
|
||||||
|
value: "{{ .Values.message }}"
|
||||||
|
- name: KUBERNETES_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
- name: KUBERNETES_POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: KUBERNETES_NODE_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: spec.nodeName
|
||||||
|
|
||||||
|
startupProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: {{ required ".Values.deployment.container.port entry is required!" .Values.deployment.container.port }}
|
||||||
|
failureThreshold: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: {{ required ".Values.deployment.container.port entry is required!" .Values.deployment.container.port }}
|
||||||
|
periodSeconds: 30
|
||||||
|
failureThreshold: 3 #Default 3
|
||||||
|
initialDelaySeconds: 0
|
||||||
|
|
||||||
|
readinessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: {{ required ".Values.deployment.container.port entry is required!" .Values.deployment.container.port }}
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
periodSeconds: 10
|
||||||
18
helm/templates/ingress.yaml
Normal file
18
helm/templates/ingress.yaml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: ingress-hello-kube
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: {{ required ".Values.ingress.hostUrl entry is required!" .Values.ingress.hostUrl }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: service-hello-kube
|
||||||
|
port:
|
||||||
|
number: 8080
|
||||||
15
helm/templates/service.yaml
Normal file
15
helm/templates/service.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: service-hello-kube
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: hello-kube
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: {{ required ".Values.deployment.container.port entry is required!" .Values.deployment.container.port }}
|
||||||
|
protocol: TCP
|
||||||
|
selector:
|
||||||
|
app: hello-kube
|
||||||
|
type: ClusterIP
|
||||||
12
helm/values-gmo-env.yaml
Normal file
12
helm/values-gmo-env.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# provide a custom message
|
||||||
|
message: "Bienvenue dans le lab de Gilles Mouchet"
|
||||||
|
ingress:
|
||||||
|
hostUrl: hello-kube.gmolab.net # to declare on DNS or host file
|
||||||
|
deployment:
|
||||||
|
replicaCount: 2
|
||||||
|
container:
|
||||||
|
image:
|
||||||
|
repository: "docker.io/gmouchet/hello-kube:1.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
port: 8080 # docker image port. Do not change without rebuild docker image
|
||||||
|
# with another port
|
||||||
12
helm/values-vdg-env.yaml
Normal file
12
helm/values-vdg-env.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# provide a custom message
|
||||||
|
message: "Bienvenue dans le lab de la Ville de Genèev!"
|
||||||
|
ingress:
|
||||||
|
hostUrl: hello-kube.vdglab.net # to declare on DNS or host file
|
||||||
|
deployment:
|
||||||
|
replicaCount: 2
|
||||||
|
container:
|
||||||
|
image:
|
||||||
|
repository: "docker.io/gmouchet/hello-kube:1.0"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
port: 8080 # docker image port. Do not change without rebuild docker image
|
||||||
|
# with another port
|
||||||
Loading…
x
Reference in New Issue
Block a user