[opennebula] initial commit
This commit is contained in:
parent
cd44ce6506
commit
225b251fb9
11 changed files with 2474 additions and 0 deletions
24
apps/opennebula/.helmignore
Normal file
24
apps/opennebula/.helmignore
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
.#*
|
6
apps/opennebula/Chart.yaml
Normal file
6
apps/opennebula/Chart.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
apiVersion: v2
|
||||
name: ungleich-opennebula
|
||||
description: OpenNebula Control Plane, made for replacing native OpenNebula setups
|
||||
|
||||
version: 0.1.0
|
||||
appVersion: "6.0.0.2"
|
136
apps/opennebula/README.md
Normal file
136
apps/opennebula/README.md
Normal file
|
@ -0,0 +1,136 @@
|
|||
## OpenNebula Chart
|
||||
|
||||
## Containers to do
|
||||
|
||||
- oned: main api
|
||||
- also needs ssh files
|
||||
- scheduler
|
||||
- mysql for data
|
||||
- sunstone
|
||||
- novnc
|
||||
- nginx on 443
|
||||
|
||||
Storage:
|
||||
|
||||
- mysql pvc (prod: 65G!)
|
||||
|
||||
## Containers done
|
||||
|
||||
### Scheduler
|
||||
|
||||
Needs /etc/one/sched.conf.
|
||||
|
||||
[root@opennebula-opennebula-6cbb864798-txfhf one]# /usr/bin/mm_sched
|
||||
Could not open file /root/.one/one_auth
|
||||
|
||||
```
|
||||
[root@opennebula-opennebula-6cbb864798-txfhf one]# mkdir /root/.one
|
||||
[root@opennebula-opennebula-6cbb864798-txfhf one]# vi /root/.one/one_auth
|
||||
[root@opennebula-opennebula-6cbb864798-txfhf one]# /usr/bin/mm_sched
|
||||
```
|
||||
|
||||
|
||||
## DB cleanup
|
||||
|
||||
- via cronjob
|
||||
- maybe 1/month
|
||||
|
||||
```
|
||||
ALTER TABLE vm_pool DROP INDEX ftidx;
|
||||
ALTER TABLE vm_pool ADD FULLTEXT INDEX ftidx (search_token);
|
||||
```
|
||||
|
||||
## Oned
|
||||
|
||||
- Needs SSH keys
|
||||
- Define secret and provide out-of-band?
|
||||
|
||||
|
||||
## certbot for nginx
|
||||
|
||||
## nginx for sunstone
|
||||
|
||||
## Sunstone
|
||||
|
||||
templates: sunstone-server
|
||||
- needs ssl certificates access
|
||||
|
||||
files:
|
||||
|
||||
- /var/lib/one/.one/one_auth
|
||||
- /var/lib/one/.one/sunstone_auth
|
||||
|
||||
Maybe via latent / hanging secret?
|
||||
|
||||
cmd:
|
||||
|
||||
```
|
||||
mkdir -p /run/lock/one
|
||||
mkdir -p /run/one
|
||||
ruby /usr/lib/one/sunstone/sunstone-server.rb
|
||||
```
|
||||
|
||||
|
||||
``
|
||||
[root@opennebula-opennebula-574c564b76-h6skt /]# sunstone-server start
|
||||
Error, check /var/log/one/novnc.log
|
||||
Could not start novnc server
|
||||
touch: cannot touch '/var/lock/one/.sunstone.lock': No such file or directory
|
||||
Error creating lock file
|
||||
VNC server is not running
|
||||
[root@opennebula-opennebula-574c564b76-h6skt /]# mkdir -p /run/lock/one
|
||||
[root@opennebula-opennebula-574c564b76-h6skt /]# sunstone-server start
|
||||
VNC proxy started
|
||||
/usr/bin/sunstone-server: line 104: /var/run/one/sunstone.pid: No such file or directory
|
||||
sunstone-server started
|
||||
[root@opennebula-opennebula-574c564b76-h6skt /]#
|
||||
```
|
||||
|
||||
```
|
||||
SUNSTONE_CONF=/etc/one/sunstone-server.conf
|
||||
``
|
||||
|
||||
- Starting novnc
|
||||
- ruby $SUNSTONE_SERVER > $SUNSTONE_LOG 2>$SUNSTONE_LOG_ERROR &
|
||||
|
||||
SUNSTONE_PID=/var/run/one/sunstone.pid
|
||||
SUNSTONE_SERVER=/usr/lib/one/sunstone/sunstone-server.rb
|
||||
SUNSTONE_LOCK_FILE=/var/lock/one/.sunstone.lock
|
||||
SUNSTONE_LOG=/var/log/one/sunstone.log
|
||||
SUNSTONE_LOG_ERROR=/var/log/one/sunstone.error
|
||||
SUNSTONE_CONF=/etc/one/sunstone-server.conf
|
||||
NOVNC_SERVER=/usr/bin/novnc-server
|
||||
|
||||
- Memcached
|
||||
- SSL cert
|
||||
|
||||
Sat Aug 07 11:54:42 2021 [E]: No such file or directory @ rb_sysopen - /var/lib/one/.one/sunstone_auth
|
||||
|
||||
serveradmin:...
|
||||
|
||||
Sat Aug 07 12:08:37 2021 [E]: Configuration of ':webauthn_origin' is missing
|
||||
|
||||
Provide the serveradmin and oneadmin credentials in the /var/lib/one/.one/.
|
||||
|
||||
### File upload
|
||||
|
||||
From the website:
|
||||
|
||||
|
||||
If you want to upload files to OpenNebula, you will have to share the
|
||||
uploads directory (/var/tmp by default) between Sunstone and
|
||||
oned. Some servers do not take into account the TMPDIR environment
|
||||
variable, in which case this directory must be defined in the
|
||||
configuration file (:tmpdir). It may also be necessary to set it in
|
||||
Passenger (client_body_temp_path).
|
||||
|
||||
We can probably do without it using the hostpath
|
||||
|
||||
## Fireedge
|
||||
|
||||
* Basically a guacamole viewer, which we already have
|
||||
|
||||
## Follow up
|
||||
|
||||
- Find out if DB can be cleaned up (65G is huge!)
|
||||
- https://docs.opennebula.io/6.0/installation_and_configuration/opennebula_services/database.html
|
53
apps/opennebula/nginx/https.conf
Normal file
53
apps/opennebula/nginx/https.conf
Normal file
|
@ -0,0 +1,53 @@
|
|||
server {
|
||||
listen *:443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/{{ tpl .Values.fqdn . }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/{{ tpl .Values.fqdn . }}/privkey.pem;
|
||||
|
||||
server_name {{ tpl .Values.fqdn . }};
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
|
||||
client_max_body_size 0;
|
||||
|
||||
try_files $uri/index.html $uri.html $uri @sunstone;
|
||||
|
||||
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
|
||||
expires 1y;
|
||||
|
||||
# Need to enable proxying in this location as well
|
||||
try_files $uri @sunstone;
|
||||
}
|
||||
|
||||
# Rails error pages
|
||||
error_page 500 502 503 504 /500.html;
|
||||
|
||||
location @sunstone {
|
||||
proxy_pass http://localhost:9869;
|
||||
|
||||
# Forward original host name to be seen in unicorn
|
||||
proxy_set_header Host $host;
|
||||
|
||||
# Server name and address like being available in PHP
|
||||
proxy_set_header SERVER_NAME $server_name;
|
||||
proxy_set_header SERVER_ADDR $server_addr;
|
||||
|
||||
# Forward client ip address to rack/rails so logging
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
|
||||
# Tell rack if it is http or https
|
||||
# https://github.com/intridea/omniauth/blob/master/lib/omniauth/strategy.rb#L483
|
||||
# http://nginx.org/en/docs/http/ngx_http_core_module.html#variables
|
||||
# $https was introduced in 1.1.11 - we are using 0.7.67-3+squeeze3
|
||||
# so we cannot use
|
||||
# proxy_set_header HTTPS $https;
|
||||
# but have to forward the scheme like this
|
||||
proxy_set_header X_FORWARDED_SCHEME $scheme;
|
||||
|
||||
# Some applications seem to use X_FORWARDED_SCHEME while others need
|
||||
# X_FORWARDED_PROTO, so we set X_FORWARDED_PROTO too
|
||||
proxy_set_header X_FORWARDED_PROTO $scheme;
|
||||
|
||||
}
|
||||
}
|
41
apps/opennebula/nginx/xmlrpc.conf
Normal file
41
apps/opennebula/nginx/xmlrpc.conf
Normal file
|
@ -0,0 +1,41 @@
|
|||
server {
|
||||
listen *:2634 ssl;
|
||||
listen [::]:2634 ssl;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/{{ tpl .Values.fqdn . }}/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/{{ tpl .Values.fqdn . }}/privkey.pem;
|
||||
|
||||
server_name {{ tpl .Values.fqdn . }};
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
|
||||
client_max_body_size 0;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:2633;
|
||||
|
||||
# Forward original host name to be seen in unicorn
|
||||
proxy_set_header Host $host;
|
||||
|
||||
# Server name and address like being available in PHP
|
||||
proxy_set_header SERVER_NAME $server_name;
|
||||
proxy_set_header SERVER_ADDR $server_addr;
|
||||
|
||||
# Forward client ip address to rack/rails so logging
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
|
||||
# Tell rack if it is http or https
|
||||
# https://github.com/intridea/omniauth/blob/master/lib/omniauth/strategy.rb#L483
|
||||
# http://nginx.org/en/docs/http/ngx_http_core_module.html#variables
|
||||
# $https was introduced in 1.1.11 - we are using 0.7.67-3+squeeze3
|
||||
# so we cannot use
|
||||
# proxy_set_header HTTPS $https;
|
||||
# but have to forward the scheme like this
|
||||
proxy_set_header X_FORWARDED_SCHEME $scheme;
|
||||
|
||||
# Some applications seem to use X_FORWARDED_SCHEME while others need
|
||||
# X_FORWARDED_PROTO, so we set X_FORWARDED_PROTO too
|
||||
proxy_set_header X_FORWARDED_PROTO $scheme;
|
||||
|
||||
}
|
||||
}
|
1542
apps/opennebula/one/oned.conf
Normal file
1542
apps/opennebula/one/oned.conf
Normal file
File diff suppressed because it is too large
Load diff
125
apps/opennebula/one/sched.conf
Normal file
125
apps/opennebula/one/sched.conf
Normal file
|
@ -0,0 +1,125 @@
|
|||
#*******************************************************************************
|
||||
# OpenNebula Configuration file
|
||||
#*******************************************************************************
|
||||
|
||||
#*******************************************************************************
|
||||
# Daemon configuration attributes
|
||||
#-------------------------------------------------------------------------------
|
||||
# MESSAGE_SIZE: Buffer size in bytes for XML-RPC responses.
|
||||
#
|
||||
# XMLRPC_TIMEOUT: Seconds to timeout XML-RPC calls to oned
|
||||
#
|
||||
# ONE_XMLRPC: URL to connect to the OpenNebula daemon (oned)
|
||||
#
|
||||
# SCHED_INTERVAL: Seconds between two scheduling actions
|
||||
#
|
||||
# MAX_VM: Maximum number of Virtual Machines scheduled in each scheduling
|
||||
# action. Use 0 to schedule all pending VMs each time.
|
||||
#
|
||||
# MAX_DISPATCH: Maximum number of Virtual Machines dispatched in each
|
||||
# scheduling action
|
||||
#
|
||||
# MAX_HOST: Maximum number of Virtual Machines dispatched to each host in
|
||||
# each scheduling action
|
||||
#
|
||||
# LIVE_RESCHEDS: Perform live (1) or cold migrations (0) when rescheduling a VM
|
||||
#
|
||||
# DEFAULT_SCHED: Definition of the default scheduling algorithm
|
||||
# - policy:
|
||||
# 0 = Packing. Heuristic that minimizes the number of hosts in use by
|
||||
# packing the VMs in the hosts to reduce VM fragmentation
|
||||
# 1 = Striping. Heuristic that tries to maximize resources available for
|
||||
# the VMs by spreading the VMs in the hosts
|
||||
# 2 = Load-aware. Heuristic that tries to maximize resources available for
|
||||
# the VMs by using those nodes with less load
|
||||
# 3 = Custom.
|
||||
# - rank: Custom arithmetic expression to rank suitable hosts based in
|
||||
# their attributes
|
||||
# 4 = Fixed. Hosts will be ranked according to the PRIORITY attribute found
|
||||
# in the Host or Cluster template.
|
||||
#
|
||||
# DEFAULT_DS_SCHED: Definition of the default storage scheduling algorithm
|
||||
# - policy:
|
||||
# 0 = Packing. Tries to optimize storage usage by selecting the DS with
|
||||
# less free space
|
||||
# 1 = Striping. Tries to optimize I/O by distributing the VMs across
|
||||
# datastores.
|
||||
# 2 = Custom.
|
||||
# - rank: Custom arithmetic expression to rank suitable datastores based
|
||||
# on their attributes
|
||||
# 3 = Fixed. Datastores will be ranked according to the PRIORITY attribute
|
||||
# found in the Datastore template.
|
||||
#
|
||||
# DEFAULT_NIC_SCHED: Definition of the default virtual network scheduler
|
||||
# - policy:
|
||||
# 0 = Packing. Tries to pack address usage by selecting the VNET with
|
||||
# less free leases
|
||||
# 1 = Striping. Tries to distribute address usage across VNETs.
|
||||
# 2 = Custom.
|
||||
# - rank: Custom arithmetic expression to rank suitable datastores based
|
||||
# on their attributes
|
||||
# 3 = Fixed. Virtual Networks will be ranked according to the PRIORITY
|
||||
# attribute found in the Virtual Network template.
|
||||
#
|
||||
# DIFFERENT_VNETS: When set (YES) the NICs of a VM will be forced to be in
|
||||
# different Virtual Networks.
|
||||
#
|
||||
# LOG: Configuration for the logging system
|
||||
# - system: defines the logging system:
|
||||
# file to log in the sched.log file
|
||||
# syslog to use the syslog facilities
|
||||
# - debug_level:
|
||||
# 0 = ERROR
|
||||
# 1 = WARNING
|
||||
# 2 = INFO
|
||||
# 3 = DEBUG Includes general scheduling information (default)
|
||||
# 4 = DDEBUG Includes time taken for each step
|
||||
# 5 = DDDEBUG Includes detailed information about the scheduling
|
||||
# decision, such as VM requirements, Host ranking for
|
||||
# each VM, etc. This will impact the performance
|
||||
#
|
||||
# MEMORY_SYSTEM_DS_SCALE: This factor scales the VM usage of the system DS with
|
||||
# the memory size. This factor can be use to make the scheduler consider the
|
||||
# overhead of checkpoint files:
|
||||
# system_ds_usage = system_ds_usage + memory_system_ds_scale * memory
|
||||
#
|
||||
#*******************************************************************************
|
||||
|
||||
MESSAGE_SIZE = 1073741824
|
||||
TIMEOUT = 60
|
||||
|
||||
ONE_XMLRPC = "http://localhost:2633/RPC2"
|
||||
|
||||
SCHED_INTERVAL = 15
|
||||
|
||||
MAX_VM = 5000
|
||||
MAX_DISPATCH = 30
|
||||
MAX_HOST = 1
|
||||
|
||||
LIVE_RESCHEDS = 1
|
||||
|
||||
MEMORY_SYSTEM_DS_SCALE = 0
|
||||
|
||||
DIFFERENT_VNETS = YES
|
||||
|
||||
DEFAULT_SCHED = [
|
||||
POLICY = 0
|
||||
]
|
||||
|
||||
DEFAULT_DS_SCHED = [
|
||||
POLICY = 1
|
||||
]
|
||||
|
||||
DEFAULT_NIC_SCHED = [
|
||||
POLICY = 1
|
||||
]
|
||||
|
||||
#DEFAULT_SCHED = [
|
||||
# policy = 3,
|
||||
# rank = "- (RUNNING_VMS * 50 + FREE_CPU)"
|
||||
#]
|
||||
|
||||
LOG = [
|
||||
system = "std",
|
||||
debug_level = 3
|
||||
]
|
257
apps/opennebula/one/sunstone-server.conf
Normal file
257
apps/opennebula/one/sunstone-server.conf
Normal file
|
@ -0,0 +1,257 @@
|
|||
# -------------------------------------------------------------------------- #
|
||||
# Copyright 2002-2017, OpenNebula Project, OpenNebula Systems #
|
||||
# #
|
||||
# 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. #
|
||||
#--------------------------------------------------------------------------- #
|
||||
|
||||
################################################################################
|
||||
# Server Configuration
|
||||
################################################################################
|
||||
|
||||
# Directory to store temp files when uploading images
|
||||
#
|
||||
:tmpdir: /var/tmp
|
||||
|
||||
# OpenNebula sever contact information
|
||||
#
|
||||
:one_xmlrpc: http://localhost:2633/RPC2
|
||||
:one_xmlrpc_timeout: 60
|
||||
|
||||
# :subscriber_endpoint to subscribe for OpenNebula events must match those in
|
||||
# oned.conf
|
||||
:subscriber_endpoint: tcp://localhost:2101
|
||||
|
||||
# Server Configuration
|
||||
#
|
||||
# Sinatra fails if the IP is specified in k8s
|
||||
#:host: 127.0.0.1
|
||||
:port: 9869
|
||||
|
||||
# Place where to store sessions, this value can be memory, memcache or memcache-dalli
|
||||
# Use memcache when starting multiple server processes, for example,
|
||||
# with passenger
|
||||
#
|
||||
# NOTE. memcache needs a separate memcached server to be configured. Refer
|
||||
# to memcached documentation to configure the server.
|
||||
:sessions: memory
|
||||
|
||||
# Memcache configuration
|
||||
:memcache_host: localhost
|
||||
:memcache_port: 11211
|
||||
:memcache_namespace: opennebula.sunstone
|
||||
|
||||
# Excution environment for Sunstone
|
||||
# dev, Instead of pulling the minified js all the files will be pulled (app/main.js)
|
||||
# Check the Building from Source guide in the docs, for details on how to run
|
||||
# Sunstone in development
|
||||
# prod, the minified js will be used (dist/main.js)
|
||||
:env: 'prod'
|
||||
|
||||
|
||||
################################################################################
|
||||
# Log
|
||||
################################################################################
|
||||
|
||||
# Log debug level
|
||||
# 0 = ERROR, 1 = WARNING, 2 = INFO, 3 = DEBUG
|
||||
#
|
||||
:debug_level: 3
|
||||
|
||||
################################################################################
|
||||
# Proxy
|
||||
################################################################################
|
||||
|
||||
# Enable an http proxy for the support portal and to download MarketPlaceApps
|
||||
# from the MarketPlace to the user's desktop.
|
||||
# :proxy: http://<hostname>:<port>
|
||||
|
||||
################################################################################
|
||||
# Auth
|
||||
################################################################################
|
||||
|
||||
# Authentication driver for incomming requests
|
||||
# sunstone: for OpenNebula's user-password scheme
|
||||
# x509: for x509 certificates based authentication
|
||||
# opennebula: the authentication will be done by the opennebula core using the
|
||||
# driver defined for the user
|
||||
# remote: performs the login based on a Kerberos REMOTE_USER
|
||||
#
|
||||
:auth: opennebula
|
||||
|
||||
# Authentication driver to communicate with OpenNebula core
|
||||
# cipher, for symmetric cipher encryption of tokens
|
||||
# x509, for x509 certificate encryption of tokens
|
||||
#
|
||||
:core_auth: cipher
|
||||
|
||||
# Two Factor Authentication Issuer Label
|
||||
:two_factor_auth_issuer: opennebula
|
||||
|
||||
################################################################################
|
||||
# WebAuthn
|
||||
################################################################################
|
||||
|
||||
# This value needs to match `window.location.origin` evaluated by the User Agent
|
||||
# during registration and authentication ceremonies. Remember that WebAuthn
|
||||
# requires TLS on anything else than localhost.
|
||||
#:webauthn_origin: http://localhost:9869
|
||||
:webauthn_origin: https://{{ tpl .Values.fqdn . }}
|
||||
|
||||
# Relying Party name for display purposes
|
||||
:webauthn_rpname: 'OpenNebula Cloud'
|
||||
|
||||
# Optional client timeout hint, in milliseconds. Specifies how long the browser
|
||||
# should wait for any interaction with the user.
|
||||
:webauthn_timeout: 60000
|
||||
|
||||
# Optional differing Relying Party ID
|
||||
# See https://www.w3.org/TR/webauthn/#relying-party-identifier
|
||||
# :webauthn_rpid: example.com
|
||||
|
||||
# Supported cryptographic algorithms
|
||||
# See https://www.iana.org/assignments/jose/jose.xhtml
|
||||
# Possible is any list of
|
||||
# ES256 | ES384 | ES512 | PS256 | PS384 | PS512 | RS256 | RS384 | RS512 | RS1
|
||||
# :webauthn_algorithms: [ES256, PS256, RS256]
|
||||
|
||||
################################################################################
|
||||
# Check Upgrades
|
||||
################################################################################
|
||||
|
||||
# To check for the latest release. Comment this value if you don't want to check
|
||||
# this.
|
||||
:remote_version: http://downloads.opennebula.org/latest
|
||||
|
||||
################################################################################
|
||||
# UI Settings
|
||||
################################################################################
|
||||
# :vnc_proxy_
|
||||
# port: port where the vnc proxy will listen
|
||||
# support_wss: no | yes | only. For yes and only, provide path to
|
||||
# cert and key. "yes" means both ws and wss connections will be
|
||||
# supported.
|
||||
# vnc_proxy_cert: Certificate to encrypt wss connections.
|
||||
# vnc_proxy_key: Key for wss connections. Only necessary if not included in cert.
|
||||
# vnc_proxy_ipv6: Enable ipv6 support for novnc-server
|
||||
#
|
||||
# :vnc_request_password: true | false
|
||||
# Request VNC password for external windows, by default it will not be requested
|
||||
#
|
||||
:vnc_proxy_port: 29876
|
||||
:vnc_proxy_support_wss: yes
|
||||
:vnc_proxy_cert: /etc/letsencrypt/live/{{ tpl .Values.fqdn . }}/fullchain.pem
|
||||
:vnc_proxy_key: /etc/letsencrypt/live/{{ tpl .Values.fqdn . }}/privkey.pem
|
||||
:vnc_proxy_ipv6: yes
|
||||
:vnc_request_password: false
|
||||
|
||||
# Login Session Length in seconds, defaults to 1 hour.
|
||||
#:session_expire_time: 3600
|
||||
|
||||
|
||||
# Default language setting
|
||||
:lang: en_US
|
||||
|
||||
# Default table order
|
||||
:table_order: desc
|
||||
|
||||
# Default views directory
|
||||
:mode: 'mixed'
|
||||
|
||||
# True to display 'Keep me logged in' option.
|
||||
:keep_me_logged: true
|
||||
|
||||
# this display button and clock icon in table of vm
|
||||
:leases:
|
||||
suspend:
|
||||
time: "+1209600"
|
||||
color: "#000000"
|
||||
warning:
|
||||
time: "-86400"
|
||||
color: "#085aef"
|
||||
terminate:
|
||||
time: "+1209600"
|
||||
color: "#e1ef08"
|
||||
warning:
|
||||
time: "-86400"
|
||||
color: "#ef2808"
|
||||
|
||||
# This change the thresholds of dashboard resource usage
|
||||
:threshold_min: 0
|
||||
:threshold_low: 33
|
||||
:threshold_high: 66
|
||||
|
||||
#support filesystem
|
||||
:support_fs:
|
||||
- ext4
|
||||
- ext3
|
||||
- ext2
|
||||
- xfs
|
||||
|
||||
|
||||
################################################################################
|
||||
# Marketplace
|
||||
################################################################################
|
||||
|
||||
# Marketplace username and password
|
||||
# If no credentials are provided, an anonymous client will be used
|
||||
#
|
||||
#:marketplace_username:
|
||||
#:marketplace_password:
|
||||
|
||||
# Marketplace endpoint
|
||||
# The url should not include the /appliance path since it will be automatically
|
||||
# included
|
||||
#
|
||||
:marketplace_url: http://marketplace.opennebula.systems/
|
||||
|
||||
################################################################################
|
||||
# OneFlow
|
||||
################################################################################
|
||||
|
||||
# OneFlow endpoint
|
||||
#
|
||||
:oneflow_server: http://localhost:2474/
|
||||
|
||||
################################################################################
|
||||
# Routes
|
||||
################################################################################
|
||||
|
||||
# Array of files containing ruby code to extend the default sunstone-server
|
||||
# routes. These files must be placed inside the custom_routes directory
|
||||
# in the sunstone root dir (/usr/lib/one/sunstone/routes)
|
||||
#
|
||||
# Example:
|
||||
# $ ls /usr/lib/one/sunstone/routes
|
||||
# custom.rb other.rb
|
||||
#
|
||||
# $ cat /usr/lib/one/sunstone/routes/example.rb
|
||||
# get '/custom' do
|
||||
# body "It works"
|
||||
# end
|
||||
#
|
||||
#:routes:
|
||||
# - custom
|
||||
# - other
|
||||
|
||||
:routes:
|
||||
- oneflow
|
||||
- vcenter
|
||||
- support
|
||||
- nsx
|
||||
|
||||
################################################################################
|
||||
# FireEdge
|
||||
################################################################################
|
||||
|
||||
#:private_fireedge_endpoint: http://localhost:2616
|
||||
#:public_fireedge_endpoint: http://localhost:2616
|
14
apps/opennebula/templates/configmap.yaml
Normal file
14
apps/opennebula/templates/configmap.yaml
Normal file
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-opennebula-config
|
||||
data:
|
||||
{{ tpl (.Files.Glob "one/*").AsConfig . | indent 2 }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-nginx-config
|
||||
data:
|
||||
{{ tpl (.Files.Glob "nginx/*").AsConfig . | indent 2 }}
|
261
apps/opennebula/templates/deployment.yaml
Normal file
261
apps/opennebula/templates/deployment.yaml
Normal file
|
@ -0,0 +1,261 @@
|
|||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-opennebula
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app-inside: {{ .Release.Name }}-opennebula
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: "Recreate"
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ .Release.Name }}
|
||||
app-inside: {{ .Release.Name }}-opennebula
|
||||
annotations:
|
||||
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
|
||||
spec:
|
||||
initContainers:
|
||||
- name: wait-for-cert
|
||||
image: busybox
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- until ls /etc/letsencrypt/live/{{ tpl .Values.fqdn . }}/fullchain.pem; do sleep 2; done
|
||||
volumeMounts:
|
||||
- name: etcletsencrypt
|
||||
mountPath: "/etc/letsencrypt"
|
||||
- name: sync-opennebula
|
||||
image: "opennebula/opennebula:{{ .Chart.AppVersion }}"
|
||||
command:
|
||||
- rsync
|
||||
- -av
|
||||
- /usr/lib/one/sunstone/public/
|
||||
- /for-nginx
|
||||
volumeMounts:
|
||||
- name: tmp
|
||||
mountPath: "/for-nginx"
|
||||
containers:
|
||||
- name: nginx
|
||||
image: nginx:1.21-alpine
|
||||
ports:
|
||||
- containerPort: 443
|
||||
- containerPort: 2634
|
||||
volumeMounts:
|
||||
- name: nginx-config
|
||||
mountPath: "/etc/nginx/conf.d/"
|
||||
- name: etcletsencrypt
|
||||
mountPath: "/etc/letsencrypt"
|
||||
- name: tmp
|
||||
mountPath: "/usr/share/nginx/html"
|
||||
- name: memcached
|
||||
image: "memcached:1.6.10-alpine"
|
||||
ports:
|
||||
- name: tcp-11211
|
||||
containerPort: 11211
|
||||
protocol: TCP
|
||||
- name: mysql
|
||||
image: "mysql:8.0.26"
|
||||
ports:
|
||||
- name: tcp-3306
|
||||
containerPort: 3306
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: MYSQL_ALLOW_EMPTY_PASSWORD
|
||||
value: "yes"
|
||||
# - name: MYSQL_ROOT_PASSWORD
|
||||
# valueFrom:
|
||||
# secretKeyRef:
|
||||
# name: {{ .Release.Name }}-mysql-config
|
||||
# key: PASSWORD
|
||||
volumeMounts:
|
||||
- name: mysql-data
|
||||
mountPath: "/var/lib/mysql/"
|
||||
subPath: mysql
|
||||
|
||||
- name: oned
|
||||
image: "opennebula/opennebula:{{ .Chart.AppVersion }}"
|
||||
ports:
|
||||
- name: tcp-2633
|
||||
containerPort: 2633
|
||||
protocol: TCP
|
||||
volumeMounts:
|
||||
- name: auth
|
||||
mountPath: "/root/.one"
|
||||
- name: opennebula-config
|
||||
mountPath: "/tmp/one"
|
||||
command:
|
||||
- "/bin/sh"
|
||||
- "-c"
|
||||
- "cp /tmp/one/oned.conf /etc/one/ && mkdir -p /run/lock/one && sleep 15; oned -f"
|
||||
- name: sunstone
|
||||
image: "opennebula/opennebula:{{ .Chart.AppVersion }}"
|
||||
ports:
|
||||
- name: tcp-9869
|
||||
containerPort: 9869
|
||||
protocol: TCP
|
||||
- name: vnc-proxy
|
||||
containerPort: 29876
|
||||
protocol: TCP
|
||||
volumeMounts:
|
||||
- name: auth
|
||||
mountPath: "/var/lib/one/.one"
|
||||
- name: opennebula-config
|
||||
mountPath: "/tmp/one"
|
||||
command:
|
||||
- "/bin/sh"
|
||||
- "-c"
|
||||
- "cp /tmp/one/sunstone-server.conf /etc/one/ && mkdir -p /run/lock/one /run/one && sleep 20; ruby /usr/lib/one/sunstone/sunstone-server.rb; sleep 120"
|
||||
- name: scheduler
|
||||
image: "opennebula/opennebula:{{ .Chart.AppVersion }}"
|
||||
command:
|
||||
- "sh"
|
||||
- "-c"
|
||||
- "cp /tmp/one/sched.conf /etc/one/ && /usr/bin/mm_sched"
|
||||
volumeMounts:
|
||||
- name: auth
|
||||
mountPath: "/root/.one"
|
||||
- name: opennebula-config
|
||||
mountPath: "/tmp/one"
|
||||
volumes:
|
||||
- name: auth
|
||||
secret:
|
||||
secretName: {{ .Release.Name }}-one-auth
|
||||
- name: etcletsencrypt
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ .Release.Name}}-letsencrypt-certs
|
||||
- name: mysql-data
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ .Release.Name }}-mysql-data
|
||||
- name: nginx-config
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-nginx-config
|
||||
- name: opennebula-config
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-opennebula-config
|
||||
- name: tmp
|
||||
emptyDir: {}
|
||||
# ---
|
||||
# apiVersion: batch/v1
|
||||
# kind: Job
|
||||
# metadata:
|
||||
# name: {{ .Release.Name }}-getcert
|
||||
# spec:
|
||||
# template:
|
||||
# metadata:
|
||||
# labels:
|
||||
# app: {{ .Release.Name }}-opennebula
|
||||
# spec:
|
||||
# restartPolicy: Never
|
||||
# containers:
|
||||
# - name: certbot
|
||||
# image: ungleich/ungleich-certbot
|
||||
# ports:
|
||||
# - containerPort: 80
|
||||
# env:
|
||||
# - name: DOMAIN
|
||||
# value: {{ .Values.fqdn }}
|
||||
# - name: EMAIL
|
||||
# value: {{ .Values.email }}
|
||||
# - name: STAGING
|
||||
# value: {{ .Values.letsencryptStaging }}
|
||||
# # volumeMounts:
|
||||
# # - name: etcletsencrypt
|
||||
# # mountPath: "/etc/letsencrypt"
|
||||
# # volumes:
|
||||
# # - name: etcletsencrypt
|
||||
# # persistentVolumeClaim:
|
||||
# # claimName: {{ .Release.Name }}-letsencrypt-certs
|
||||
# backoffLimit: 3
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ .Release.Name }}
|
||||
labels:
|
||||
app: {{ .Release.Name }}
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
name: http
|
||||
- port: 443
|
||||
protocol: TCP
|
||||
name: https
|
||||
- port: 2643
|
||||
protocol: TCP
|
||||
name: xmlrpc
|
||||
selector:
|
||||
app: {{ .Release.Name }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: {{ .Release.Name}}-letsencrypt-certs
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 50Mi
|
||||
storageClassName: rook-cephfs
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-mysql-data
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.dbsizeingb }}Gi
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-one-auth
|
||||
stringData:
|
||||
one_auth: {{ .Values.one_auth }}
|
||||
sunstone_auth: {{ .Values.sunstone_auth }}
|
||||
---
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-getcert
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{ .Release.Name }}
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
containers:
|
||||
- name: certbot
|
||||
image: ungleich/ungleich-certbot
|
||||
|
||||
ports:
|
||||
- containerPort: 80
|
||||
env:
|
||||
- name: DOMAIN
|
||||
value: "{{ tpl .Values.fqdn . }}"
|
||||
- name: ONLYGETCERT
|
||||
value: "yes"
|
||||
- name: EMAIL
|
||||
value: "{{ .Values.email }}"
|
||||
{{ if eq .Values.letsencryptStaging "no" }}
|
||||
- name: STAGING
|
||||
value: "no"
|
||||
{{ end }}
|
||||
volumeMounts:
|
||||
- name: etcletsencrypt
|
||||
mountPath: "/etc/letsencrypt"
|
||||
volumes:
|
||||
- name: etcletsencrypt
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ .Release.Name }}-letsencrypt-certs
|
||||
backoffLimit: 3
|
15
apps/opennebula/values.yaml
Normal file
15
apps/opennebula/values.yaml
Normal file
|
@ -0,0 +1,15 @@
|
|||
clusterDomain: "c2.k8s.ooo"
|
||||
|
||||
# For http/https/letsencrypt
|
||||
fqdn: "{{ .Release.Name }}.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}"
|
||||
|
||||
# Size for the pvc for mysql
|
||||
dbsizeingb: 100
|
||||
|
||||
# Opennebula secrets
|
||||
one_auth: ""
|
||||
sunstone_auth: ""
|
||||
|
||||
# Letsencrypt settings
|
||||
email: ""
|
||||
letsencryptStaging: "yes"
|
Loading…
Reference in a new issue