Skip to content

Commit 153d86e

Browse files
committed
WIP
1 parent be4bf11 commit 153d86e

File tree

6 files changed

+138
-21
lines changed

6 files changed

+138
-21
lines changed

Dockerfile

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ FROM golang:alpine AS builder
33
RUN apk update && apk add --no-cache git
44
WORKDIR $GOPATH/src/icinga-kubernetes/
55
COPY . .
6+
#COPY ./config.yml /go/bin/config.yml
67
RUN go build -o /go/bin/icinga-kubernetes ./cmd/icinga-kubernetes/main.go
78

89
FROM scratch
910

10-
COPY --from=builder /go/bin/icinga-kubernetes /go/bin/icinga-kubernetes
11+
WORKDIR /go/bin/
12+
COPY --from=alpine /tmp /tmp
13+
COPY --from=builder /go/bin/icinga-kubernetes ./icinga-kubernetes
1114
EXPOSE 8080
12-
ENTRYPOINT ["/go/bin/icinga-kubernetes"]
15+
ENTRYPOINT ["./icinga-kubernetes"]

cmd/icinga-kubernetes/main.go

+35-1
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,20 @@ import (
1414
"golang.org/x/sync/errgroup"
1515
kinformers "k8s.io/client-go/informers"
1616
"k8s.io/client-go/kubernetes"
17+
"k8s.io/client-go/rest"
1718
kclientcmd "k8s.io/client-go/tools/clientcmd"
19+
"os"
1820
)
1921

2022
func main() {
23+
inCluster := false
24+
25+
if kconfig, err := rest.InClusterConfig(); err == nil {
26+
if _, err := kubernetes.NewForConfig(kconfig); err == nil {
27+
inCluster = true
28+
}
29+
}
30+
2131
kconfig, err := kclientcmd.NewNonInteractiveDeferredLoadingClientConfig(
2232
kclientcmd.NewDefaultClientConfigLoadingRules(), &kclientcmd.ConfigOverrides{}).ClientConfig()
2333
if err != nil {
@@ -34,7 +44,31 @@ func main() {
3444
logging.Fatal(errors.Wrap(err, "can't parse flags"))
3545
}
3646

37-
cfg, err := config.FromYAMLFile[internal.Config](flags.Config)
47+
cfg := &internal.Config{}
48+
configFile := flags.Config
49+
50+
if inCluster {
51+
ikConfig := os.Getenv("ICINGA_KUBERNETES_CONFIG")
52+
53+
file, err := os.CreateTemp("", "yaml-config-")
54+
if err != nil {
55+
logging.Fatal(errors.Wrap(err, "can't create temporary yaml config"))
56+
}
57+
defer func() {
58+
err := os.Remove(file.Name())
59+
if err != nil {
60+
logging.Fatal(errors.Wrap(err, "can't remove temporary yaml config"))
61+
}
62+
}()
63+
64+
if _, err = file.Write([]byte(ikConfig)); err != nil {
65+
logging.Fatal(errors.Wrap(err, "can't write to temporary yaml config"))
66+
}
67+
68+
configFile = file.Name()
69+
}
70+
71+
cfg, err = config.FromYAMLFile[internal.Config](configFile)
3872
if err != nil {
3973
logging.Fatal(errors.Wrap(err, "can't create configuration"))
4074
}

icinga-kubernetes-configmap.yml

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: icinga-kubernetes-config
5+
data:
6+
config: |
7+
# This is the configuration file for Icinga Kubernetes.
8+
#
9+
# Connection configuration for the database to which Icinga Kubernetes synchronizes Kubernetes data.
10+
# This is also the database used in Icinga Kubernetes Web to view and work with the data.
11+
database:
12+
# Database type. Either 'mysql' for MySQL or 'pgsql' for PostgreSQL.
13+
# Defaults to 'mysql'.
14+
# type: mysql
15+
16+
# Database host or absolute Unix socket path.
17+
host: 10.96.0.2
18+
19+
# Database port. By default, the MySQL or PostgreSQL port, depending on the database type.
20+
# port:
21+
22+
# Database name.
23+
database: kubernetes
24+
25+
# Database user.
26+
user: kubernetes
27+
28+
# Database password.
29+
password: kubernetes
30+
31+
# Icinga Kubernetes logs its activities at various severity levels and any errors that occur either
32+
# on the console or in systemd's journal. The latter is used automatically when running under systemd.
33+
# In any case, the default log level is 'info'.
34+
logging:
35+
# Default logging level. Can be set to 'fatal', 'error', 'warn', 'info' or 'debug'.
36+
# If not set, defaults to 'info'.
37+
level: info
38+
39+
# Logging output. Can be set to 'console' (stderr) or 'systemd-journald'.
40+
# If not set, logs to systemd-journald when running under systemd, otherwise stderr.
41+
# output:
42+
43+
# Interval for periodic logging defined as duration string.
44+
# A duration string is a sequence of decimal numbers and a unit suffix, such as "20s".
45+
# Valid units are "ms", "s", "m", "h".
46+
# Defaults to "20s".
47+
# interval: 20s

icinga-kubernetes-expose-8080.yml

-15
This file was deleted.

icinga-kubernetes.yml

+41-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,52 @@
1-
---
21
apiVersion: v1
32
kind: Pod
43
metadata:
54
name: icinga-kubernetes
65
labels:
76
app: icinga-kubernetes
87
spec:
8+
affinity:
9+
nodeAffinity:
10+
requiredDuringSchedulingIgnoredDuringExecution:
11+
nodeSelectorTerms:
12+
- matchExpressions:
13+
- key: kubernetes.io/hostname
14+
operator: In
15+
values:
16+
- minikube
917
containers:
1018
- name: icinga-kubernetes
1119
image: icinga-kubernetes
1220
imagePullPolicy: Never
13-
ports:
14-
- containerPort: 8080
21+
env:
22+
- name: ICINGA_KUBERNETES_CONFIG
23+
valueFrom:
24+
configMapKeyRef:
25+
name: icinga-kubernetes-config
26+
key: config
27+
28+
---
29+
kind: ClusterRole
30+
apiVersion: rbac.authorization.k8s.io/v1
31+
metadata:
32+
namespace: default
33+
name: pod-reader
34+
rules:
35+
- apiGroups: [ "" ] # "" indicates the core API group
36+
resources: [ "*" ]
37+
verbs: [ "get", "watch", "list" ]
38+
39+
---
40+
apiVersion: rbac.authorization.k8s.io/v1
41+
kind: ClusterRoleBinding
42+
metadata:
43+
name: read-pods
44+
namespace: default
45+
subjects:
46+
- kind: ServiceAccount
47+
name: default
48+
namespace: default
49+
roleRef:
50+
kind: ClusterRole
51+
name: pod-reader
52+
apiGroup: ""

schema/mysql/Dockerfile

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
FROM mysql:latest
2+
3+
ENV MYSQL_USER=kubernetes
4+
ENV MYSQL_PASSWORD=kubernetes
5+
ENV MYSQL_DATABASE=kubernetes
6+
ENV MYSQL_ROOT_PASSWORD=kubernetes
7+
8+
COPY schema.sql /docker-entrypoint-initdb.d
9+
10+
EXPOSE 3306

0 commit comments

Comments
 (0)