5 changed files with 585 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||||
|
apiVersion: rbac.authorization.k8s.io/v1 |
||||
|
kind: ClusterRoleBinding |
||||
|
metadata: |
||||
|
name: admin-user |
||||
|
roleRef: |
||||
|
apiGroup: rbac.authorization.k8s.io |
||||
|
kind: ClusterRole |
||||
|
name: cluster-admin |
||||
|
subjects: |
||||
|
- kind: ServiceAccount |
||||
|
name: admin-user |
||||
|
namespace: kubernetes-dashboard |
||||
@ -0,0 +1,5 @@ |
|||||
|
apiVersion: v1 |
||||
|
kind: ServiceAccount |
||||
|
metadata: |
||||
|
name: admin-user |
||||
|
namespace: kubernetes-dashboard |
||||
@ -0,0 +1,16 @@ |
|||||
|
apiVersion: networking.k8s.io/v1beta1 |
||||
|
kind: Ingress |
||||
|
metadata: |
||||
|
name: dashboard-ingress |
||||
|
namespace: kubernetes-dashboard |
||||
|
annotations: |
||||
|
kubernetes.io/ingress.class: "traefik" |
||||
|
spec: |
||||
|
rules: |
||||
|
- host: dashboard.k3s.semapp.lan |
||||
|
http: |
||||
|
paths: |
||||
|
- path: / |
||||
|
backend: |
||||
|
serviceName: kubernetes-dashboard |
||||
|
servicePort: 443 |
||||
@ -0,0 +1,303 @@ |
|||||
|
# Copyright 2017 The Kubernetes Authors. |
||||
|
# |
||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
# you may not use this file except in compliance with the License. |
||||
|
# You may obtain a copy of the License at |
||||
|
# |
||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
|
# |
||||
|
# Unless required by applicable law or agreed to in writing, software |
||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
# See the License for the specific language governing permissions and |
||||
|
# limitations under the License. |
||||
|
|
||||
|
apiVersion: v1 |
||||
|
kind: Namespace |
||||
|
metadata: |
||||
|
name: kubernetes-dashboard |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
apiVersion: v1 |
||||
|
kind: ServiceAccount |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard |
||||
|
namespace: kubernetes-dashboard |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
kind: Service |
||||
|
apiVersion: v1 |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard |
||||
|
namespace: kubernetes-dashboard |
||||
|
spec: |
||||
|
ports: |
||||
|
- port: 443 |
||||
|
targetPort: 8443 |
||||
|
selector: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
apiVersion: v1 |
||||
|
kind: Secret |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard-certs |
||||
|
namespace: kubernetes-dashboard |
||||
|
type: Opaque |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
apiVersion: v1 |
||||
|
kind: Secret |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard-csrf |
||||
|
namespace: kubernetes-dashboard |
||||
|
type: Opaque |
||||
|
data: |
||||
|
csrf: "" |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
apiVersion: v1 |
||||
|
kind: Secret |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard-key-holder |
||||
|
namespace: kubernetes-dashboard |
||||
|
type: Opaque |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
kind: ConfigMap |
||||
|
apiVersion: v1 |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard-settings |
||||
|
namespace: kubernetes-dashboard |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
kind: Role |
||||
|
apiVersion: rbac.authorization.k8s.io/v1 |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard |
||||
|
namespace: kubernetes-dashboard |
||||
|
rules: |
||||
|
# Allow Dashboard to get, update and delete Dashboard exclusive secrets. |
||||
|
- apiGroups: [""] |
||||
|
resources: ["secrets"] |
||||
|
resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"] |
||||
|
verbs: ["get", "update", "delete"] |
||||
|
# Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map. |
||||
|
- apiGroups: [""] |
||||
|
resources: ["configmaps"] |
||||
|
resourceNames: ["kubernetes-dashboard-settings"] |
||||
|
verbs: ["get", "update"] |
||||
|
# Allow Dashboard to get metrics. |
||||
|
- apiGroups: [""] |
||||
|
resources: ["services"] |
||||
|
resourceNames: ["heapster", "dashboard-metrics-scraper"] |
||||
|
verbs: ["proxy"] |
||||
|
- apiGroups: [""] |
||||
|
resources: ["services/proxy"] |
||||
|
resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"] |
||||
|
verbs: ["get"] |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
kind: ClusterRole |
||||
|
apiVersion: rbac.authorization.k8s.io/v1 |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard |
||||
|
rules: |
||||
|
# Allow Metrics Scraper to get metrics from the Metrics server |
||||
|
- apiGroups: ["metrics.k8s.io"] |
||||
|
resources: ["pods", "nodes"] |
||||
|
verbs: ["get", "list", "watch"] |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
apiVersion: rbac.authorization.k8s.io/v1 |
||||
|
kind: RoleBinding |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard |
||||
|
namespace: kubernetes-dashboard |
||||
|
roleRef: |
||||
|
apiGroup: rbac.authorization.k8s.io |
||||
|
kind: Role |
||||
|
name: kubernetes-dashboard |
||||
|
subjects: |
||||
|
- kind: ServiceAccount |
||||
|
name: kubernetes-dashboard |
||||
|
namespace: kubernetes-dashboard |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
apiVersion: rbac.authorization.k8s.io/v1 |
||||
|
kind: ClusterRoleBinding |
||||
|
metadata: |
||||
|
name: kubernetes-dashboard |
||||
|
roleRef: |
||||
|
apiGroup: rbac.authorization.k8s.io |
||||
|
kind: ClusterRole |
||||
|
name: kubernetes-dashboard |
||||
|
subjects: |
||||
|
- kind: ServiceAccount |
||||
|
name: kubernetes-dashboard |
||||
|
namespace: kubernetes-dashboard |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
kind: Deployment |
||||
|
apiVersion: apps/v1 |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
name: kubernetes-dashboard |
||||
|
namespace: kubernetes-dashboard |
||||
|
spec: |
||||
|
replicas: 1 |
||||
|
revisionHistoryLimit: 10 |
||||
|
selector: |
||||
|
matchLabels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
template: |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: kubernetes-dashboard |
||||
|
spec: |
||||
|
containers: |
||||
|
- name: kubernetes-dashboard |
||||
|
image: kubernetesui/dashboard:v2.4.0 |
||||
|
imagePullPolicy: Always |
||||
|
ports: |
||||
|
- containerPort: 8443 |
||||
|
protocol: TCP |
||||
|
args: |
||||
|
- --auto-generate-certificates |
||||
|
- --namespace=kubernetes-dashboard |
||||
|
# Uncomment the following line to manually specify Kubernetes API server Host |
||||
|
# If not specified, Dashboard will attempt to auto discover the API server and connect |
||||
|
# to it. Uncomment only if the default does not work. |
||||
|
# - --apiserver-host=http://my-address:port |
||||
|
volumeMounts: |
||||
|
- name: kubernetes-dashboard-certs |
||||
|
mountPath: /certs |
||||
|
# Create on-disk volume to store exec logs |
||||
|
- mountPath: /tmp |
||||
|
name: tmp-volume |
||||
|
livenessProbe: |
||||
|
httpGet: |
||||
|
scheme: HTTPS |
||||
|
path: / |
||||
|
port: 8443 |
||||
|
initialDelaySeconds: 30 |
||||
|
timeoutSeconds: 30 |
||||
|
securityContext: |
||||
|
allowPrivilegeEscalation: false |
||||
|
readOnlyRootFilesystem: true |
||||
|
runAsUser: 1001 |
||||
|
runAsGroup: 2001 |
||||
|
volumes: |
||||
|
- name: kubernetes-dashboard-certs |
||||
|
secret: |
||||
|
secretName: kubernetes-dashboard-certs |
||||
|
- name: tmp-volume |
||||
|
emptyDir: {} |
||||
|
serviceAccountName: kubernetes-dashboard |
||||
|
nodeSelector: |
||||
|
"kubernetes.io/os": linux |
||||
|
# Comment the following tolerations if Dashboard must not be deployed on master |
||||
|
tolerations: |
||||
|
- key: node-role.kubernetes.io/master |
||||
|
effect: NoSchedule |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
kind: Service |
||||
|
apiVersion: v1 |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: dashboard-metrics-scraper |
||||
|
name: dashboard-metrics-scraper |
||||
|
namespace: kubernetes-dashboard |
||||
|
spec: |
||||
|
ports: |
||||
|
- port: 8000 |
||||
|
targetPort: 8000 |
||||
|
selector: |
||||
|
k8s-app: dashboard-metrics-scraper |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
kind: Deployment |
||||
|
apiVersion: apps/v1 |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: dashboard-metrics-scraper |
||||
|
name: dashboard-metrics-scraper |
||||
|
namespace: kubernetes-dashboard |
||||
|
spec: |
||||
|
replicas: 1 |
||||
|
revisionHistoryLimit: 10 |
||||
|
selector: |
||||
|
matchLabels: |
||||
|
k8s-app: dashboard-metrics-scraper |
||||
|
template: |
||||
|
metadata: |
||||
|
labels: |
||||
|
k8s-app: dashboard-metrics-scraper |
||||
|
spec: |
||||
|
securityContext: |
||||
|
seccompProfile: |
||||
|
type: RuntimeDefault |
||||
|
containers: |
||||
|
- name: dashboard-metrics-scraper |
||||
|
image: kubernetesui/metrics-scraper:v1.0.7 |
||||
|
ports: |
||||
|
- containerPort: 8000 |
||||
|
protocol: TCP |
||||
|
livenessProbe: |
||||
|
httpGet: |
||||
|
scheme: HTTP |
||||
|
path: / |
||||
|
port: 8000 |
||||
|
initialDelaySeconds: 30 |
||||
|
timeoutSeconds: 30 |
||||
|
volumeMounts: |
||||
|
- mountPath: /tmp |
||||
|
name: tmp-volume |
||||
|
securityContext: |
||||
|
allowPrivilegeEscalation: false |
||||
|
readOnlyRootFilesystem: true |
||||
|
runAsUser: 1001 |
||||
|
runAsGroup: 2001 |
||||
|
serviceAccountName: kubernetes-dashboard |
||||
|
nodeSelector: |
||||
|
"kubernetes.io/os": linux |
||||
|
# Comment the following tolerations if Dashboard must not be deployed on master |
||||
|
tolerations: |
||||
|
- key: node-role.kubernetes.io/master |
||||
|
effect: NoSchedule |
||||
|
volumes: |
||||
|
- name: tmp-volume |
||||
|
emptyDir: {} |
||||
@ -0,0 +1,249 @@ |
|||||
|
# Deployment description |
||||
|
apiVersion: apps/v1 |
||||
|
kind: Deployment |
||||
|
metadata: |
||||
|
name: rm-deployment |
||||
|
namespace: prod-environment |
||||
|
labels: |
||||
|
app: rm-qa |
||||
|
spec: |
||||
|
strategy: |
||||
|
type: Recreate |
||||
|
replicas: 1 |
||||
|
selector: |
||||
|
matchLabels: |
||||
|
app: rm-qa |
||||
|
template: |
||||
|
metadata: |
||||
|
labels: |
||||
|
app: rm-qa |
||||
|
spec: |
||||
|
# securityContext: |
||||
|
# runAsUser: 1000 |
||||
|
# runAsGroup: 1000 |
||||
|
# fsGroup: 1000 |
||||
|
containers: |
||||
|
- name: rm-backend |
||||
|
image: packages.semapp.lan:5000/rm-backend:0.0.4 |
||||
|
resources: |
||||
|
requests: |
||||
|
memory: "256Mi" |
||||
|
cpu: "100m" |
||||
|
limits: |
||||
|
memory: "512Mi" |
||||
|
cpu: "4" |
||||
|
ports: |
||||
|
- containerPort: 5000 |
||||
|
name: rm-backend |
||||
|
protocol: TCP |
||||
|
volumeMounts: |
||||
|
- mountPath: /etc/flexrm/ |
||||
|
readOnly: true |
||||
|
name: flexrm-conf |
||||
|
env: |
||||
|
- name: DJANGO_ENV |
||||
|
value: "development" |
||||
|
imagePullPolicy: Always |
||||
|
- name: rm-frontend |
||||
|
image: packages.semapp.lan:5000/rm-frontend:0.0.1 |
||||
|
resources: |
||||
|
requests: |
||||
|
memory: "256Mi" |
||||
|
cpu: "100m" |
||||
|
limits: |
||||
|
memory: "512Mi" |
||||
|
cpu: "4" |
||||
|
ports: |
||||
|
- containerPort: 80 |
||||
|
name: rm-frontend |
||||
|
protocol: TCP |
||||
|
volumeMounts: |
||||
|
- mountPath: /etc/nginx/conf.d/ |
||||
|
readOnly: true |
||||
|
name: flexrm-frontend-conf |
||||
|
imagePullPolicy: Always |
||||
|
volumes: |
||||
|
- name: flexrm-frontend-conf |
||||
|
configMap: |
||||
|
name: flexrm-frontend-conf |
||||
|
- name: flexrm-conf |
||||
|
configMap: |
||||
|
name: flexrm-conf |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
# Backend configuration |
||||
|
apiVersion: v1 |
||||
|
kind: ConfigMap |
||||
|
metadata: |
||||
|
namespace: prod-environment |
||||
|
name: flexrm-conf |
||||
|
data: |
||||
|
flexrm.conf: | |
||||
|
[general] |
||||
|
allowed_hosts = * |
||||
|
secret_key = some_very_long_and_hyper_random_secret_key |
||||
|
|
||||
|
[db] |
||||
|
driver = postgresql |
||||
|
db_name = rm_prod |
||||
|
db_user = rm_prod |
||||
|
db_password = NsG}e(EgT\b+95Q'L:+{ |
||||
|
db_host = psql.semprod.local |
||||
|
|
||||
|
[analytics] |
||||
|
piwik_site_id = 3 |
||||
|
|
||||
|
[frontend] |
||||
|
frontend_url = http://rm.k8s.semprod.local/ |
||||
|
|
||||
|
[email] |
||||
|
host = smtp.strato.de |
||||
|
port = 587 |
||||
|
username = support@semantic-applications.de |
||||
|
password = uN1zPIqN9@br |
||||
|
use_tls = True |
||||
|
auto_from = support@semantic-applications.de |
||||
|
|
||||
|
[tex] |
||||
|
host = texservice.semprod.local |
||||
|
delete_after_render = False |
||||
|
|
||||
|
[media-storage] |
||||
|
# |
||||
|
# the used media-storage is defined via type: |
||||
|
# |
||||
|
# media_type = django.core.files.storage.FileSystemStorage ... the default django file storage |
||||
|
# -> no additional settings are required |
||||
|
# |
||||
|
# media_type = minio_storage.storage.MinioMediaStorage ... the storage used with minio |
||||
|
# -> additional settings for minio: |
||||
|
# minio_endpoint = 127.0.0.1:9000 ... the endpoint and port |
||||
|
# minio_use_https = True|False ... use https for communication |
||||
|
# minio_media_bucket = media-rm ... the media bucket name |
||||
|
# minio_access_key = #your ACCESS_KEY ... the access key |
||||
|
# minio_secret_key = #your SECRET_KEY ... the secret key |
||||
|
# minio_auto_create_bucket = True|False ... if True the bucket is created |
||||
|
|
||||
|
# |
||||
|
# To setup minio storage as default for development just comment the file system storage line and uncomment |
||||
|
# all minio storage lines |
||||
|
# |
||||
|
|
||||
|
|
||||
|
# media_type = django.core.files.storage.FileSystemStorage |
||||
|
|
||||
|
media_type = flexrm.kernel.minio.storage.MinIOMediaStorage |
||||
|
minio_endpoint = minio-api.semprod.local |
||||
|
minio_use_https = False |
||||
|
minio_media_bucket = rm-prod |
||||
|
minio_access_key = rm-prod |
||||
|
minio_secret_key = "uM7(zFm3;4H9PTz!m~ww" |
||||
|
minio_auto_create_bucket = True |
||||
|
--- |
||||
|
|
||||
|
# Frontend nginx configuration |
||||
|
apiVersion: v1 |
||||
|
kind: ConfigMap |
||||
|
metadata: |
||||
|
namespace: prod-environment |
||||
|
name: flexrm-frontend-conf |
||||
|
data: |
||||
|
default.conf: | |
||||
|
upstream backend { |
||||
|
server rm-backend-srv:5000; |
||||
|
} |
||||
|
|
||||
|
server { |
||||
|
listen 80; |
||||
|
|
||||
|
server_name $K8S_HOSTNAME; |
||||
|
|
||||
|
#access_log /var/log/rm/access.log; |
||||
|
#error_log /var/log/rm/error.log; |
||||
|
|
||||
|
charset utf-8; |
||||
|
client_max_body_size 1G; |
||||
|
|
||||
|
location / { |
||||
|
root /srv/rm-web; |
||||
|
|
||||
|
try_files $uri /index.html =404; |
||||
|
} |
||||
|
|
||||
|
location ~ ^/(api|drf|manage) { |
||||
|
proxy_pass http://backend; |
||||
|
proxy_redirect off; |
||||
|
|
||||
|
proxy_set_header Host $host; |
||||
|
proxy_set_header X-Real-IP $remote_addr; |
||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
||||
|
} |
||||
|
|
||||
|
location /storage { |
||||
|
# TODO: still needed when we use minio? |
||||
|
alias /srv/media; |
||||
|
} |
||||
|
|
||||
|
location /static { |
||||
|
# TODO: still needed when we use minio? |
||||
|
alias /srv/public; |
||||
|
} |
||||
|
|
||||
|
# Redirect Angular routes |
||||
|
error_page 404 =200 /index.html; |
||||
|
} |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
# RM backend Service |
||||
|
apiVersion: v1 |
||||
|
kind: Service |
||||
|
metadata: |
||||
|
name: rm-backend-srv |
||||
|
namespace: prod-environment |
||||
|
spec: |
||||
|
selector: |
||||
|
app: rm-qa |
||||
|
ports: |
||||
|
- name: rm-backend |
||||
|
port: 5000 |
||||
|
targetPort: rm-backend |
||||
|
type: NodePort |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
#RM frontend service |
||||
|
apiVersion: v1 |
||||
|
kind: Service |
||||
|
metadata: |
||||
|
name: rm-frontend-srv |
||||
|
namespace: prod-environment |
||||
|
spec: |
||||
|
selector: |
||||
|
app: rm-qa |
||||
|
ports: |
||||
|
- name: rm-frontend |
||||
|
port: 80 |
||||
|
targetPort: rm-frontend |
||||
|
type: NodePort |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
# Ingress description |
||||
|
apiVersion: networking.k8s.io/v1beta1 |
||||
|
kind: Ingress |
||||
|
metadata: |
||||
|
name: rm-qa-ingress |
||||
|
namespace: prod-environment |
||||
|
annotations: |
||||
|
kubernetes.io/ingress.class: "traefik" |
||||
|
spec: |
||||
|
rules: |
||||
|
- host: rm.k8s.semprod.local |
||||
|
http: |
||||
|
paths: |
||||
|
- path: / |
||||
|
backend: |
||||
|
serviceName: rm-frontend-srv |
||||
|
servicePort: 80 |
||||
Loading…
Reference in new issue