Files
homelab/k8s/games/minecraft/deployments.yaml

181 lines
5.8 KiB
YAML
Raw Normal View History

---
2025-04-13 16:18:40 +01:00
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
namespace: minecraft
data:
nginx.conf: |
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
2025-04-13 16:18:40 +01:00
events {
worker_connections 1024;
2025-04-13 16:18:40 +01:00
}
2025-04-13 16:18:40 +01:00
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
location / {
proxy_pass http://localhost:8123;
sub_filter 'Minecraft Dynamic Map' "Hexor's MC server";
sub_filter "</body>" '<p style="background-color: #CEC6CB; color: black; padding: 10px 10px; text-align: center; font-size: large; text-decoration: none; display: inline-block; border-radius: 4px; position: absolute; top: 10px; left: 150px;">Get <a href="https://github.com/PrismLauncher/PrismLauncher/releases/tag/8.4" >Prism Launcher</a> and <a href="/clients/1.12.2.zip" >client.zip</a> for this server. Server address <b>minecraft.hexor.cy:30565</b><br><br><a href="#" onclick="showInstallModal(); return false;" style="color: #0066cc; text-decoration: underline;">Windows Install Script</a></p>
<div id="installModal" style="display: none; position: fixed; z-index: 1000; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5);">
<div style="background-color: #fefefe; margin: 15% auto; padding: 20px; border: 1px solid #888; width: 70%; max-width: 500px; border-radius: 8px; text-align: center;">
<h3 style="margin-top: 0;">Windows Installation</h3>
<p>Copy and paste this command into PowerShell (run as Administrator):</p>
<textarea id="scriptCommand" readonly style="width: 100%; height: 60px; font-family: monospace; padding: 8px; border: 1px solid #ccc; border-radius: 4px; resize: none;">iwr -useb https://minecraft.hexor.cy/clients/win-install.ps1 | iex</textarea>
<br><br>
<button onclick="copyToClipboard()" style="background-color: #4CAF50; color: white; padding: 8px 16px; border: none; border-radius: 4px; cursor: pointer; margin-right: 10px;">Copy</button>
<button onclick="closeInstallModal()" style="background-color: #f44336; color: white; padding: 8px 16px; border: none; border-radius: 4px; cursor: pointer;">Close</button>
</div>
</div>
<script>
function showInstallModal() {
document.getElementById("installModal").style.display = "block";
}
function closeInstallModal() {
document.getElementById("installModal").style.display = "none";
}
function copyToClipboard() {
var textarea = document.getElementById("scriptCommand");
textarea.select();
textarea.setSelectionRange(0, 99999);
document.execCommand("copy");
alert("Command copied to clipboard!");
}
window.onclick = function(event) {
var modal = document.getElementById("installModal");
if (event.target == modal) {
closeInstallModal();
}
}
</script>
</body>';
sub_filter_once off;
}
location /clients/ {
alias /mc/clients/;
sendfile on;
add_header Content-Disposition "attachment";
autoindex on;
gzip off;
chunked_transfer_encoding off;
}
2025-04-13 16:18:40 +01:00
}
}
2025-04-13 16:18:40 +01:00
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: minecraft
namespace: minecraft
labels:
app: minecraft
spec:
selector:
matchLabels:
app: minecraft
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: minecraft
spec:
nodeSelector:
kubernetes.io/hostname: master.tail2fe2d.ts.net
volumes:
- name: storage
hostPath:
path: /k8s/mc-server/
2025-04-24 21:23:37 +00:00
type: DirectoryOrCreate
2025-04-13 16:18:40 +01:00
- name: nginx-config
configMap:
name: nginx-config
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: nginx-config
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: storage
mountPath: /mc
- name: minecraft
image: 'openjdk:8-jdk-alpine'
command: ["java"]
args:
- -Xms4G
- -Xmx4G
2025-04-13 16:18:40 +01:00
- -XX:+UseG1GC
- -XX:+ParallelRefProcEnabled
- -XX:MaxGCPauseMillis=200
- -XX:+UnlockExperimentalVMOptions
- -XX:+DisableExplicitGC
- -XX:+AlwaysPreTouch
- -XX:G1NewSizePercent=30
- -XX:G1MaxNewSizePercent=40
- -XX:G1HeapRegionSize=8M
- -XX:G1ReservePercent=20
- -XX:G1HeapWastePercent=5
- -XX:G1MixedGCCountTarget=4
- -XX:InitiatingHeapOccupancyPercent=15
- -XX:G1MixedGCLiveThresholdPercent=90
- -XX:G1RSetUpdatingPauseTimePercent=5
- -XX:SurvivorRatio=32
- -XX:+PerfDisableSharedMem
- -XX:MaxTenuringThreshold=1
- -jar
- forge-1.12.2-14.23.5.2854.jar
- nogui
workingDir: /mc/
resources:
limits:
memory: 8Gi
2025-04-13 16:18:40 +01:00
#cpu: 1
requests:
memory: 5Gi
2025-04-13 16:18:40 +01:00
#cpu: 100m
ports:
- name: game
containerPort: 25565
protocol: TCP
- name: dynmap
containerPort: 8123
protocol: TCP
volumeMounts:
- name: storage
mountPath: /mc
---
apiVersion: v1
kind: Service
metadata:
name: minecraft-exporter
namespace: minecraft
spec:
selector:
app: minecraft
ports:
- protocol: TCP
port: 19565
targetPort: 19565