Giter Site home page Giter Site logo

jeremylvln / shulker Goto Github PK

View Code? Open in Web Editor NEW
154.0 5.0 10.0 10.31 MB

A Kubernetes operator for managing complex and dynamic Minecraft infrastructures, including game servers and proxies.

Home Page: https://shulker.jeremylvln.fr/

License: GNU Affero General Public License v3.0

Dockerfile 0.52% Shell 0.98% Kotlin 16.61% JavaScript 1.47% Rust 77.37% Java 2.32% Smarty 0.37% Mustache 0.36%
kubernetes minecraft minecraft-server minecraft-proxy operator shulker bungeecord velocity kotlin grpc

shulker's Introduction

logo

Shulker

The modern way of putting Minecraft in boxes 📦

Open Issues Stars License Coverage
GitHub Sponsors

Description

Shulker aims to be your default choice to managing Minecraft infrastructures in the cloud with Kubernetes.

Everybody with some knowledge about Kubernetes should be able to connect to a Minecraft Network within 10 minutes. That's the goal.

Getting started

See the Getting Started section of the documentation to start using Shulker!

License

Shulker is distributed under the AGPL 3.0.

Want to use Shulker for commercial purposes? Contact me so we can discuss about that together!

Sponsors

Thanks to my sponsors, it really means a lot to me!

Tropic LegendRignerCoded

shulker's People

Contributors

jeremylvln avatar kanya-approve avatar marysaka avatar renovate[bot] avatar risograph avatar semantic-release-bot avatar thezap avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

shulker's Issues

existingConfigMapName is not working for ProxyFleet

What happened?

Setting an existingConfigMapName for ProxyFleet is not working. It will always set to be the default template. Modifying the default template will always revert back to the default anyway.

I need to set force-key-authentication to false in velocity-config.toml because I'm not using Local external traffic load balancer mode, because I'm self hosting a Kubernetes cluster running with Cilium. The default load balancer coming with Cilium does not have good support for Local mode because it is based on SNAT (despite there is a DSR mode that theoretically supports direct source IP forward with GENEVE, I failed to make it work correctly and I'm stuck with SNAT).

What components are involved in your issue?

No response

Version

0.7.0

Kubernetes Version

1.29

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Change ping max players to take into account each proxy capacity

The idea is to change the algorithm that patch the ping statistics of the proxies. Currently, the max player count is the max capacity of the proxy that was ping, however, we would prefer to have a sum of each proxy's capacity.

It could be nice to have to be able to customize further the strategy with some configuration, but it seems unneeded for now.


Discussed in #388

Originally posted by TropicalShadow February 4, 2024

display the max player count for the proxy as the max cluster player count.

The online player count dynamically scales to the cluster wide online count, however the max player count is the proxy configured player capacity.

It would ideally be better to somehow poll all the proxies and or sub servers then calculate the total max players based on each server capacity and how many server/proxies available (not draining).

maybe have a config to determine the strategy of calculating max player count. Proxy only, all proxies, sub servers.

  • proxy only: default how it works now where it uses the proxy config
  • All proxies: calculates the max for each proxy adding them all up
  • Sub servers: calculate all the sub servers, adding up the max player capacity for all

Helm chart in CD(ArgoCD) doesn't update shulker operator

What happened?

I've encountered an issue where the Shulker operator's version does not update as expected. The root of the problem appears to be that while the application version of Shulker is updated, the corresponding Helm chart version remains unchanged. This discrepancy causes ArgoCD to cache the older version of the chart, preventing it from downloading the updated version when only the app version is revised. Currently one method to woraround this, you need to update not only the chart version but the container tag too.

Expected Behavior:

Ideally, whenever a new version of Shulker is released, there should be a concurrent release of a new Helm chart reflecting this updated version. This would streamline the continuous deployment (CD) pipeline process, as it would only necessitate updating the chart version to incorporate the latest changes from Shulker. This approach ensures that both the application and its deployment mechanisms are in sync, facilitating a smoother update process within the CD pipeline.

What components are involved in your issue?

Operator

Version

0.5.3

Kubernetes Version

1.28

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Implement lifecycle strategies on servers to automatically manage Agones allocations

Discussed in #354

Originally posted by Pyjou January 22, 2024
I have a big question about the upgrading of a server with Shulker.

In my case, let's say I want to upgrade a plugin on one of my server fleets (proxy or not). I change the value of my url in env vars, which will be downloaded when my server starts up, and send it to kube. But we agree that kube will automatically kill all servers to apply the change, and automatically kick players. That's not what we'd generally want.

Do you think there would be a mechanism to wait until the end of a game session (like in a mini-game) before launching the upgrade? Or simply not lauchn the upgrade on servers already running and simply apply it to new servers?

What do you think about this subject?


The idea is to introduce a new field on the CRD named lifecycleStrategy which could be:

  • AllocateWhenNotEmpty (default): the Agent plugin will ask Agones to set the server to Allocated when at least one player is connected on the server. When updating a server or a fleet, all the players will need to disconnect or the server will need to be manually stopped so the server can be updated
  • Manual: the Agent plugin will only set the server as Ready when the agent is loaded (current behavior). It is let to any custom implementation to manage allocation and release

Example:

apiVersion: shulkermc.io/v1alpha1
kind: MinecraftServerFleet
metadata:
  name: dropper-game
spec:
  clusterRef:
    name: getting-started
  replicas: 1
  template:
    spec:
      clusterRef:
        name: getting-started
      tags:
        - lobby
      version:
        channel: Paper
        name: '1.18.2'
      config:
        lifecycleStrategy: AllocateWhenNotEmpty # Default
        # lifecycleStrategy: Manual

ShulkerServerAgent dont work on 1.18.2

What happened?

Our server network is uses Purpur 1.18.2 but on server startup the ShulkerServerAgent is crashing.
We want to migrate our full network(around 50 servers) to Shulker so it is important to us to be work with minecraft version 1.18.2.

What components are involved in your issue?

Server Agent (Paper)

Version

0.4.0

Kubernetes Version

1.28

Relevant log output

[13:08:44 ERROR]: Error occurred while enabling ShulkerServerAgent v0.4.0 (Is it up to date?)                                                                                                                 
java.lang.NoSuchMethodError: 'io.papermc.paper.threadedregions.scheduler.AsyncScheduler org.bukkit.Server.getAsyncScheduler()'                                                                                
    at io.shulkermc.serveragent.paper.ServerInterfacePaper.scheduleRepeatingTask(ServerInterfacePaper.kt:46) ~[shulker-server-agent-0.4.0-paper.jar:?]                                                        
    at io.shulkermc.serveragent.tasks.HealthcheckTask.schedule(HealthcheckTask.kt:13) ~[shulker-server-agent-0.4.0-paper.jar:?]                                                                               
    at io.shulkermc.serveragent.ShulkerServerAgentCommon.onServerInitialization(ShulkerServerAgentCommon.kt:41) ~[shulker-server-agent-0.4.0-paper.jar:?]                                                     
    at io.shulkermc.serveragent.paper.ShulkerServerAgentPaper.onEnable(ShulkerServerAgentPaper.kt:11) ~[shulker-server-agent-0.4.0-paper.jar:?]                                                               
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]                                                                                                
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:370) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]                                                                                  
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:542) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]                                                                                 
    at org.bukkit.craftbukkit.v1_19_R1.CraftServer.enablePlugin(CraftServer.java:563) ~[paper-1.19.jar:git-Paper-81]                                                                                          
    at org.bukkit.craftbukkit.v1_19_R1.CraftServer.enablePlugins(CraftServer.java:477) ~[paper-1.19.jar:git-Paper-81]                                                                                         
    at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:634) ~[paper-1.19.jar:git-Paper-81]                                                                                               
    at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:420) ~[paper-1.19.jar:git-Paper-81]                                                                                                
    at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:306) ~[paper-1.19.jar:git-Paper-81]                                                                                     
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1122) ~[paper-1.19.jar:git-Paper-81]                                                                                               
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:303) ~[paper-1.19.jar:git-Paper-81]                                                                                            
    at java.lang.Thread.run(Unknown Source) ~[?:?]                                                                                                                                                            
[13:08:44 INFO]: [ShulkerServerAgent] Disabling ShulkerServerAgent v0.4.0                                                                                                                                     
[13:08:44 ERROR]: Error occurred while disabling ShulkerServerAgent v0.4.0 (Is it up to date?)                                                                                                                
kotlin.UninitializedPropertyAccessException: lateinit property healthcheckTask has not been initialized                                                                                                       
    at io.shulkermc.serveragent.ShulkerServerAgentCommon.onServerShutdown(ShulkerServerAgentCommon.kt:60) ~[shulker-server-agent-0.4.0-paper.jar:?]                                                           
    at io.shulkermc.serveragent.paper.ShulkerServerAgentPaper.onDisable(ShulkerServerAgentPaper.kt:15) ~[shulker-server-agent-0.4.0-paper.jar:?]                                                              
    at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:266) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]                                                                                                
    at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:399) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]                                                                                 
    at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:579) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]                                                                                
    at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:374) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]                                                                                  
    at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:542) ~[paper-api-1.19-R0.1-SNAPSHOT.jar:?]                                                                                 
    at org.bukkit.craftbukkit.v1_19_R1.CraftServer.enablePlugin(CraftServer.java:563) ~[paper-1.19.jar:git-Paper-81]                                                                                          
    at org.bukkit.craftbukkit.v1_19_R1.CraftServer.enablePlugins(CraftServer.java:477) ~[paper-1.19.jar:git-Paper-81]                                                                                         
    at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:634) ~[paper-1.19.jar:git-Paper-81]                                                                                               
    at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:420) ~[paper-1.19.jar:git-Paper-81]                                                                                                
    at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:306) ~[paper-1.19.jar:git-Paper-81]                                                                                     
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1122) ~[paper-1.19.jar:git-Paper-81]                                                                                               
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:303) ~[paper-1.19.jar:git-Paper-81]                                                                                            
    at java.lang.Thread.run(Unknown Source) ~[?:?]

Code of Conduct

  • I agree to follow this project's Code of Conduct

Ability to override Agent download

Discussed in #477

Originally posted by TehNeon March 22, 2024
It would be nice to have some way to either disable the download of the agent or a way to change the source of the download. The reasoning I propose this is that I'm building my own server images that have plugins baked into it (and proxy/paper jars) to prevent having to downloading assets from external sources. I'm also struggling from either my ISP or the repository host throttling my connection on downloading the agent causing it to take around 5 minutes just to finish the init-fs container on pod initialization.

Unable to connect to ProxyFleet

Manifests

apiVersion: shulkermc.io/v1alpha1
kind: MinecraftCluster
metadata:
  name: shulker
  namespace: apps
spec: {}
apiVersion: shulkermc.io/v1alpha1
kind: ProxyFleet
metadata:
  name: shulker
  namespace: apps
spec:
  clusterRef:
    name: shulker
  replicas: 1
  service:
    type: ClusterIP
  template:
    spec:
      config: 
        proxyProtocol: true 
      version:
        channel: Velocity
        name: latest

What's the issue: When trying to connect to the ProxyFleet with kubectl port-forward service/shulker :25565 -n apps -v=6, it times out.

Expected behavior: Being able to connect.

Logs are attached.

What components are involved in your issue?

Proxy Agent (Velocity)

Version

0.3.0

Kubernetes Version

1.27.4

Relevant log output

{"ctlConf":{"GameServerName":"shulker-px8hh-9xgth","PodNamespace":"apps","Address":"localhost","IsLocal":false,"LocalFile":"","Delay":0,"Timeout":0,"Test":"","TestSdkName":"","KubeConfig":"","GracefulTermination":true,"GRPCPort":9357,"HTTPPort":9358},"featureGates":"CountsAndLists=false\u0026Example=false\u0026FleetAllocationOverflow=false\u0026PlayerAllocationFilter=false\u0026PlayerTracking=false\u0026PodHostname=true\u0026ResetMetricsOnDelete=true\u0026SplitControllerAndExtensions=true","message":"Starting sdk sidecar","severity":"info","source":"main","time":"2023-11-02T09:53:48.929110116Z","version":"1.35.0"}
W1102 09:53:48.929374       1 client_config.go:618] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
{"gsKey":"apps/shulker-px8hh-9xgth","message":"Created GameServer sidecar","severity":"info","source":"*sdkserver.SDKServer","time":"2023-11-02T09:53:48.930030156Z"}
{"gsKey":"apps/shulker-px8hh-9xgth","message":"Connection to Kubernetes service established","severity":"info","source":"*sdkserver.SDKServer","time":"2023-11-02T09:53:48.943769994Z","try":0}
{"grpcEndpoint":"localhost:9357","message":"Starting SDKServer grpc service...","severity":"info","source":"main","time":"2023-11-02T09:53:48.944445234Z"}
{"httpEndpoint":"localhost:9358","message":"Starting SDKServer grpc-gateway...","severity":"info","source":"main","time":"2023-11-02T09:53:48.945295834Z"}
[init] Resolving type given VELOCITY
{"gsKey":"apps/shulker-px8hh-9xgth","message":"Starting workers...","queue":"agones.dev.apps.shulker-px8hh-9xgth","severity":"info","source":"*sdkserver.SDKServer","time":"2023-11-02T09:53:49.045083104Z","workers":1}
[init] Downloading https://papermc.io/api/v2/projects/velocity/versions/3.2.0-SNAPSHOT/builds/294/downloads/velocity-3.2.0-SNAPSHOT-294.jar
[mc-image-helper] 09:53:53.068 INFO  : Downloaded /server/velocity-3.2.0-SNAPSHOT-294.jar
[init] Setting initial memory to 512m and max to 512m
WARN StatusConsoleListener Advanced terminal features are not available in this environment
[09:53:54 INFO]: Booting up Velocity 3.2.0-SNAPSHOT (git-8dcc7ee3-b294)...
[09:53:54 INFO]: Loading localizations...
[09:53:54 INFO]: Connections will use epoll channels, libdeflate (Linux aarch64) compression, OpenSSL 1.1.x (Linux aarch64) ciphers
[09:53:54 INFO]: Loading plugins...
[09:53:54 INFO]: Loaded plugin shulker-proxy-agent 0.3.0 by Jérémy Levilain <[email protected]>
[09:53:54 INFO]: Loaded 1 plugins
[09:53:55 INFO] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Identified Shulker proxy: apps/shulker-px8hh-9xgth
[09:53:55 INFO] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Proxy will be force stopped in 86400 seconds
[09:53:55 INFO] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Lost proxy will be purged every 1 minutes
[09:53:55 INFO]: Listening on /0.0.0.0:25577
[09:53:55 INFO]: Velocity and some of its plugins collect metrics and send them to bStats (https://bStats.org).
[09:53:55 INFO]: bStats collects some basic information for plugin authors, like how many people use
[09:53:55 INFO]: their plugin and their total player count. It's recommended to keep bStats enabled, but
[09:53:55 INFO]: if you're not comfortable with this, you can opt-out by editing the config.txt file in
[09:53:55 INFO]: the '/plugins/bStats/' folder and setting enabled to false.
[09:53:55 INFO]: Done (2.09s)!

Code of Conduct

  • I agree to follow this project's Code of Conduct

Having no limbo-tagged server available causes Velocity to disconnect the player, bypassing the Shulker Agent

What happened?

If a proxy that had at least one limbo-tagged server has suddently no more, Velocity will disconnect the players by itself, saying that no server is available under the limbo name, bypassing Shulker Agent.

It was expected to see Shulker Agent's disconnection message, somehow the Agent didn't get the message/event.

Don't know if the issue is present on BungeeCord implementation.

What components are involved in your issue?

Proxy Agent (Velocity)

Version

0.0.1

Kubernetes Version

1.23

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Redis server needs to have permission fixed

What happened?

1:M 07 Mar 2024 16:20:46.078 * Background saving started by pid 60
60:C 07 Mar 2024 16:20:46.078 # Failed opening the temp RDB file temp-60.rdb (in server root dir /data) for saving: Permission denied
1:M 07 Mar 2024 16:20:46.178 # Background saving error
1:M 07 Mar 2024 16:20:52.000 * 100 changes in 300 seconds. Saving...
1:M 07 Mar 2024 16:20:52.001 * Background saving started by pid 62
62:C 07 Mar 2024 16:20:52.001 # Failed opening the temp RDB file temp-62.rdb (in server root dir /data) for saving: Permission denied
1:M 07 Mar 2024 16:20:52.101 # Background saving error

Upon inspection it is clear that the current container user does not have the permission to write:

/data $ ls -lah
total 24K
drwxr-xr-x    3 root     root        4.0K Mar  7 16:08 .
drwxr-xr-x    1 root     root        4.0K Mar  7 16:08 ..
drwx------    2 root     root       16.0K Mar  7 15:54 lost+found

Because it is also owned by root:

~ $ ls -lah /
total 68K
drwxr-xr-x    1 root     root        4.0K Mar  7 16:08 .
drwxr-xr-x    1 root     root        4.0K Mar  7 16:08 ..
drwxr-xr-x    1 root     root        4.0K Jan 27 00:55 bin
drwxr-xr-x    3 root     root        4.0K Mar  7 16:08 data

But I'm:

~ $ whoami
whoami: unknown uid 1000

What components are involved in your issue?

No response

Version

N/A

Kubernetes Version

N/A

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Agent crashes due to NoClassDefFoundError

What happened?

Upon launching a cluster with the new operator, the plugin on both proxy & game will end up erroring causing the pod to get terminated. These logs were generated with the tutorial cluster.

What components are involved in your issue?

Proxy Agent (BungeeCord), Proxy Agent (Velocity), Server Agent (Paper)

Version

0.8.0

Kubernetes Version

1.28.7

Relevant log output

Velocity Logs:
19:36:36 ERROR] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Shulker Agent crashed, stopping proxy
java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source) ~[?:?]
	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source) ~[?:?]
	at io.shulkermc.proxyagent.ShulkerProxyAgentCommon.onProxyInitialization(ShulkerProxyAgentCommon.kt:53) ~[?:?]
	at io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity.onProxyInitialization(ShulkerProxyAgentVelocity.kt:30) ~[?:?]
	at io.shulkermc.proxyagent.velocity.Lmbda$11.execute(Unknown Source) ~[?:?]
	at com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler.lambda$buildHandler$0(UntargetedEventHandler.java:56) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:597) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:478) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
	at java.base/java.lang.Thread.run(Unknown Source) [?:?]
Caused by: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
	at io.grpc.Status.asRuntimeException(Status.java:533) ~[?:?]
	at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:538) ~[?:?]
	at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:574) ~[?:?]
	at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:72) ~[?:?]
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:742) ~[?:?]
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:723) ~[?:?]
	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[?:?]
	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[?:?]
	... 3 more
Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessageV3
	at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
	at java.base/java.lang.ClassLoader.defineClass(Unknown Source) ~[?:?]
	at java.base/java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:?]
	at java.base/java.net.URLClassLoader.defineClass(Unknown Source) ~[?:?]
	at java.base/java.net.URLClassLoader$1.run(Unknown Source) ~[?:?]
	at java.base/java.net.URLClassLoader$1.run(Unknown Source) ~[?:?]
	at java.base/java.security.AccessController.doPrivileged(Unknown Source) ~[?:?]
	at java.base/java.net.URLClassLoader.findClass(Unknown Source) ~[?:?]
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
	at com.velocitypowered.proxy.plugin.PluginClassLoader.loadClass0(PluginClassLoader.java:70) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at com.velocitypowered.proxy.plugin.PluginClassLoader.loadClass(PluginClassLoader.java:64) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
	at com.google.api.AnnotationsProto.<clinit>(AnnotationsProto.java:45) ~[?:?]
	at com.agones.dev.sdk.SdkProto.<clinit>(SdkProto.java:201) ~[?:?]
	at com.agones.dev.sdk.GameServer$ObjectMeta$AnnotationsDefaultEntryHolder.<clinit>(GameServer.java:455) ~[?:?]
	at com.agones.dev.sdk.GameServer$ObjectMeta$Builder.mergeFrom(GameServer.java:1123) ~[?:?]
	at com.agones.dev.sdk.GameServer$ObjectMeta$Builder.mergeFrom(GameServer.java:883) ~[?:?]
	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:845) ~[?:?]
	at com.agones.dev.sdk.GameServer$Builder.mergeFrom(GameServer.java:9195) ~[?:?]
	at com.agones.dev.sdk.GameServer$1.parsePartialFrom(GameServer.java:9617) ~[?:?]
	at com.agones.dev.sdk.GameServer$1.parsePartialFrom(GameServer.java:9609) ~[?:?]
	at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:63) ~[?:?]
	at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:25) ~[?:?]
	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parseFrom(ProtoLiteUtils.java:245) ~[?:?]
	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:237) ~[?:?]
	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:134) ~[?:?]
	at io.grpc.MethodDescriptor.parseResponse(MethodDescriptor.java:284) ~[?:?]
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:667) ~[?:?]
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:654) ~[?:?]
	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[?:?]
	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[?:?]
	... 3 more

Paper logs:
[io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Shulker Agent crashed, stopping proxy
java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source) ~[?:?]
	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source) ~[?:?]
	at io.shulkermc.proxyagent.ShulkerProxyAgentCommon.onProxyInitialization(ShulkerProxyAgentCommon.kt:53) ~[?:?]
	at io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity.onProxyInitialization(ShulkerProxyAgentVelocity.kt:30) ~[?:?]
	at io.shulkermc.proxyagent.velocity.Lmbda$11.execute(Unknown Source) ~[?:?]
	at com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler.lambda$buildHandler$0(UntargetedEventHandler.java:56) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:597) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:478) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
	at java.base/java.lang.Thread.run(Unknown Source) [?:?]
Caused by: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
	at io.grpc.Status.asRuntimeException(Status.java:533) ~[?:?]
	at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:538) ~[?:?]
	at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:574) ~[?:?]
	at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:72) ~[?:?]
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:742) ~[?:?]
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:723) ~[?:?]
	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[?:?]
	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[?:?]
	... 3 more
Caused by: java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessageV3
	at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
	at java.base/java.lang.ClassLoader.defineClass(Unknown Source) ~[?:?]
	at java.base/java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:?]
	at java.base/java.net.URLClassLoader.defineClass(Unknown Source) ~[?:?]
	at java.base/java.net.URLClassLoader$1.run(Unknown Source) ~[?:?]
	at java.base/java.net.URLClassLoader$1.run(Unknown Source) ~[?:?]
	at java.base/java.security.AccessController.doPrivileged(Unknown Source) ~[?:?]
	at java.base/java.net.URLClassLoader.findClass(Unknown Source) ~[?:?]
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
	at com.velocitypowered.proxy.plugin.PluginClassLoader.loadClass0(PluginClassLoader.java:70) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at com.velocitypowered.proxy.plugin.PluginClassLoader.loadClass(PluginClassLoader.java:64) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
	at com.google.api.AnnotationsProto.<clinit>(AnnotationsProto.java:45) ~[?:?]
	at com.agones.dev.sdk.SdkProto.<clinit>(SdkProto.java:201) ~[?:?]
	at com.agones.dev.sdk.GameServer$ObjectMeta$AnnotationsDefaultEntryHolder.<clinit>(GameServer.java:455) ~[?:?]
	at com.agones.dev.sdk.GameServer$ObjectMeta$Builder.mergeFrom(GameServer.java:1123) ~[?:?]
	at com.agones.dev.sdk.GameServer$ObjectMeta$Builder.mergeFrom(GameServer.java:883) ~[?:?]
	at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:845) ~[?:?]
	at com.agones.dev.sdk.GameServer$Builder.mergeFrom(GameServer.java:9195) ~[?:?]
	at com.agones.dev.sdk.GameServer$1.parsePartialFrom(GameServer.java:9617) ~[?:?]
	at com.agones.dev.sdk.GameServer$1.parsePartialFrom(GameServer.java:9609) ~[?:?]
	at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:63) ~[?:?]
	at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:25) ~[?:?]
	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parseFrom(ProtoLiteUtils.java:245) ~[?:?]
	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:237) ~[?:?]
	at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:134) ~[?:?]
	at io.grpc.MethodDescriptor.parseResponse(MethodDescriptor.java:284) ~[?:?]
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:667) ~[?:?]
	at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:654) ~[?:?]
	at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[?:?]
	at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[?:?]
	... 3 more

Code of Conduct

  • I agree to follow this project's Code of Conduct

Provided Redis requires username

What happened?

Currently the provided Redis feature doesn't allow you to not defined a username. Redis allows for usernameless authentication by just accepting a password. If you pass in an empty username it still attempts to authenticate with username-pass based auth instead of just password auth.

What components are involved in your issue?

Proxy Agent (BungeeCord), Proxy Agent (Velocity), Server Agent (Paper)

Version

0.8.1

Kubernetes Version

1.28.7

Relevant log output

[20:28:03 ERROR] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Shulker Agent crashed, stopping proxy
redis.clients.jedis.exceptions.JedisAccessControlException: WRONGPASS invalid username-password pair or user is disabled.
	at redis.clients.jedis.Protocol.processError(Protocol.java:104) ~[?:?]
	at redis.clients.jedis.Protocol.process(Protocol.java:163) ~[?:?]
	at redis.clients.jedis.Protocol.read(Protocol.java:222) ~[?:?]
	at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:350) ~[?:?]
	at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:268) ~[?:?]
	at redis.clients.jedis.Connection.helloOrAuth(Connection.java:492) ~[?:?]
	at redis.clients.jedis.Connection.initializeFromClientConfig(Connection.java:401) ~[?:?]
	at redis.clients.jedis.Connection.<init>(Connection.java:67) ~[?:?]
	at redis.clients.jedis.Jedis.<init>(Jedis.java:220) ~[?:?]
	at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:170) ~[?:?]
	at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:566) ~[?:?]
	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:306) ~[?:?]
	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:233) ~[?:?]
	at redis.clients.jedis.util.Pool.getResource(Pool.java:38) ~[?:?]
	at redis.clients.jedis.JedisPool.getResource(JedisPool.java:378) ~[?:?]
	at io.shulkermc.proxyagent.ShulkerProxyAgentCommon.onProxyInitialization(ShulkerProxyAgentCommon.kt:62) ~[?:?]
	at io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity.onProxyInitialization(ShulkerProxyAgentVelocity.kt:30) ~[?:?]
	at io.shulkermc.proxyagent.velocity.Lmbda$13.execute(Unknown Source) ~[?:?]
	at com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler.lambda$buildHandler$0(UntargetedEventHandler.java:56) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:597) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:478) ~[velocity.jar:3.3.0-SNAPSHOT (git-8891faa5-b370)]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[?:?]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[?:?]
	at java.base/java.lang.Thread.run(Unknown Source) [?:?]

Code of Conduct

  • I agree to follow this project's Code of Conduct

Pod is invalid: spec.volumes[4].name: Duplicate value: "server-data"

What happened?

I would like to persist the world, so I added something like this:

      podOverrides:
        volumes:
        - emptyDir: {}
          name: server-data

But the actual GameServer generated does not take into account of the pod override

What components are involved in your issue?

No response

Version

0.8.2

Kubernetes Version

Irrelevant

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Proxy Service does not append annotations defined in ProxyFleet

What happened?

This is the Proxy configuration:

apiVersion: shulkermc.io/v1alpha1
kind: ProxyFleet
metadata:
  name: public
spec:
  clusterRef:
    name: minecraft
  replicas: 1
  service:
    type: LoadBalancer
    externalTrafficPolicy: Local
    annotations:
      metallb.universe.tf/loadBalancerIPs: 192.168.1.253
  template:
    spec:
      version:
        channel: Velocity
        name: latest
      config: {}

This is the resulting service:

apiVersion: v1
kind: Service
metadata:
  annotations:
    metallb.universe.tf/ip-allocated-from-pool: default-pool
...

This is what I would expect:

apiVersion: v1
kind: Service
metadata:
  annotations:
    metallb.universe.tf/ip-allocated-from-pool: default-pool
    metallb.universe.tf/loadBalancerIPs: 192.168.1.253
...

Thank you very much for your help and also this great project!

What components are involved in your issue?

Operator

Version

0.4.0

Kubernetes Version

1.28

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Redis credentials not being pulled from secret

What happened?

I've created a MinecraftCluster with Redis cluster credentials, but the proxy crashes with the error message "redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required".

apiVersion: v1
kind: Secret
metadata:
  name: redis-secret
type: Opaque
stringData:
  username: REDACTED
  password: REDACTED
apiVersion: shulkermc.io/v1alpha1
kind: MinecraftCluster
metadata:
  name: shulker
spec:
  networkAdmins:
    - REDACTED
  redis:
    provided:
      credentialsSecretName: redis-secret
      host: REDACTED
      port: REDACTED
    type: Provided

What components are involved in your issue?

Proxy Agent (Velocity)

Version

0.3.0

Kubernetes Version

1.27

Relevant log output

[13:38:09 INFO] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Identified Shulker proxy: apps/shulker-kmcvb-lcngh
[13:38:09 ERROR] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Failed to parse configuration
[13:38:09 ERROR]: redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required.
[13:38:09 ERROR]: 	at redis.clients.jedis.Protocol.processError(Protocol.java:105)
[13:38:09 ERROR]: 	at redis.clients.jedis.Protocol.process(Protocol.java:162)
[13:38:09 ERROR]: 	at redis.clients.jedis.Protocol.read(Protocol.java:221)
[13:38:09 ERROR]: 	at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:351)
[13:38:09 ERROR]: 	at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:269)
[13:38:09 ERROR]: 	at redis.clients.jedis.Jedis.ping(Jedis.java:339)
[13:38:09 ERROR]: 	at io.shulkermc.proxyagent.ShulkerProxyAgentCommon.onProxyInitialization(ShulkerProxyAgentCommon.kt:57)
[13:38:09 ERROR]: 	at io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity.onProxyInitialization(ShulkerProxyAgentVelocity.kt:30)
[13:38:09 ERROR]: 	at io.shulkermc.proxyagent.velocity.Lmbda$1.execute(Unknown Source)
[13:38:09 ERROR]: 	at com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler.lambda$buildHandler$0(UntargetedEventHandler.java:56)
[13:38:09 ERROR]: 	at com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:597)
[13:38:09 ERROR]: 	at com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:478)
[13:38:09 ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[13:38:09 ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[13:38:09 ERROR]: 	at java.base/java.lang.Thread.run(Thread.java:833)
[13:38:09 ERROR] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Failed to ask Agones sidecar to shutdown properly, stopping process manually

Code of Conduct

  • I agree to follow this project's Code of Conduct

Mount volumes on ProxyFleets

What happened?

I'm not sure whether to classify this as a bug or a feature request. ProxyFleets are unable to define volumes or volumeMounts in the podOverrides, where as the MinecraftServerFleet allows it to.

What components are involved in your issue?

Operator

Version

0.7.0

Kubernetes Version

1.27

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Pin underlying dependencies

It is more stable and robust to pin specific version in the dependencies. Mostly to ensure reproducibility.

We should also pin the version of Itzg's Docker images we use rather than using latest. But this means that we should have a process (as most automated as possible) to update them.

ClusterIP service type doesn't work for proxy

What happened?

If you create a ProxyFleet with the service type of ClusterIP, a service is not created.

apiVersion: shulkermc.io/v1alpha1 kind: ProxyFleet metadata: name: public spec: clusterRef: name: getting-started replicas: 1 service: type: ClusterIP template: spec: version: channel: Velocity name: latest config: {}

What components are involved in your issue?

Operator

Version

master

Kubernetes Version

1.26.9

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Custom annotations are not added to created `ProxyFleet`'s Service

What happened?

When providing custom annotations in the ProxyFleet's Service, they are not added to the created Service. While it is supported in the CRD, it is actually not implemented (missing code here https://github.com/jeremylvln/Shulker/blob/main/packages/shulker-operator/src/reconcilers/proxy_fleet/service.rs#L52).

What components are involved in your issue?

Operator

Version

0.4.0

Kubernetes Version

1.26

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Regis stuck Pending -- following "getting-started" tutorial

What happened?

I am following the "getting started" tutorial from the documentation, but getting-started-redis-managed-0 never makes it past pending, causing proxy nodes to fail on startup with the same error code as #250.

I am using the helm instructions from the installation page. I am having the same issue with v0.8.0 and v0.8.1. Regis is still pending after 30 minutes of following the steps up to cluster.yaml.

kubectl describe node <regis-node> yields:

Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  2m33s (x4 over 17m)  default-scheduler  0/4 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/4 nodes are available: 4 Preemption is not helpful for scheduling.

Any help would be greatly appreciated. I would love the opportunity to work with this technology.

What components are involved in your issue?

Operator, Proxy API

Version

v0.8.1

Kubernetes Version

1.30.0

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Autoscaling with Agones set replicas to 0

What happened?

Hi!

I enabled the autoscaling for a MinecraftServerFleet with this options:

  autoscaling:
    agonesPolicy:
      type: Buffer
      buffer:
        bufferSize: "30%"
        minReplicas: 2
        maxReplicas: 6

and now the fleet replicas count is 0

  replicas: 0
  scheduling: Packed
  strategy:
    type: Recreate

FleetAutoscaler status:

spec:
  fleetName: arena
  policy:
    buffer:
      bufferSize: 30%
      maxReplicas: 6
      minReplicas: 2
    type: Buffer
  sync:
    fixedInterval:
      seconds: 30
    type: FixedInterval
status:
  ableToScale: true
  currentReplicas: 0
  desiredReplicas: 2
  lastScaleTime: '2024-03-06T08:16:35Z'
  scalingLimited: true

What components are involved in your issue?

Operator

Version

0.7.0

Kubernetes Version

1.28

Relevant log output

{"timestamp":"2024-03-06T08:14:35.884131Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: Fleet.v1.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:14:36.185523Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: FleetAutoscaler.v1.autoscaling.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:15:05.891017Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: Fleet.v1.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:15:06.186492Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: FleetAutoscaler.v1.autoscaling.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:15:35.891614Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: Fleet.v1.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:15:36.179388Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: FleetAutoscaler.v1.autoscaling.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:16:05.888015Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: Fleet.v1.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:16:06.205542Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: FleetAutoscaler.v1.autoscaling.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:16:35.891946Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: Fleet.v1.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:16:36.216893Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: FleetAutoscaler.v1.autoscaling.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:17:05.883890Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: Fleet.v1.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:17:06.192745Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: FleetAutoscaler.v1.autoscaling.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:17:35.887584Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: Fleet.v1.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:17:36.180342Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: FleetAutoscaler.v1.autoscaling.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:18:05.888310Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: Fleet.v1.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:18:06.225502Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: FleetAutoscaler.v1.autoscaling.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2024-03-06T08:18:35.886955Z","level":"INFO","fields":{"message":"reconciling MinecraftServerFleet","name":"arena","namespace":"shulker-system"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"related object updated: Fleet.v1.agones.dev/arena.shulker-system","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/arena.shulker-system","name":"reconciling object"},{"name":"reconcile"}]}

Code of Conduct

  • I agree to follow this project's Code of Conduct

Isolate server config files from Shulker init scripts in ConfigMaps

I may have attempted to utilize this feature incorrectly. But it sounds like it's meant to allow for the overriding of the config map that provides the proxy config (velocity-config.toml as defined in the Shulker provided configmap). But in actual usage, it appears that it wants theinit-fs.sh file to be defined in the config map, also likely other files like the probe-readiness.sh. I'm not sure if this is the intended behaviour to allow for the overriding of the init-fs.sh.

Originally posted by @TehNeon in #447 (comment)

MountVolume.SetUp failed for volume "agones-allocator-client-tls" : secret "allocator-client.default" not found

What happened?

image
The mount secret is not found. it also isn't defined in agones' yaml nor shulkers' yaml file

What components are involved in your issue?

Operator

Version

0.6.0

Kubernetes Version

1.28.2

Relevant log output

Just The Event:
MountVolume.SetUp failed for volume "agones-allocator-client-tls" : secret "allocator-client.default" not found

Code of Conduct

  • I agree to follow this project's Code of Conduct

Proxy Crashes if no minecraft server is available at the moment

What happened?

If there is no MinecraftServer or MinecraftServerFleet deployed, the proxy crashes with the following error.
(Using "next")
Steps to reproduce:
Deploying: Cluster.yaml and proxy.yaml but not a minecraftServerFleet.
Then Proxy crashes.
At least I think this is what is related to the error I got.

I was able to fix it by deleting all of the resources and deploying the Cluster, the minecraft server fleet and the proxy.

What components are involved in your issue?

No response

Version

0.4.0

Kubernetes Version

1.24

Relevant log output

[init] Resolving type given VELOCITY
[init] Downloading https://papermc.io/api/v2/projects/velocity/versions/3.2.0-SNAPSHOT/builds/296/downloads/velocity-3.2.0-SNAPSHOT-296.jar
[mc-image-helper] 20:17:12.402 INFO  : Downloaded /server/velocity-3.2.0-SNAPSHOT-296.jar
[init] Setting initial memory to 512m and max to 512m
WARN StatusConsoleListener Advanced terminal features are not available in this environment
[20:17:13 INFO]: Booting up Velocity 3.2.0-SNAPSHOT (git-07a525be-b296)...
[20:17:13 INFO]: Loading localizations...
[20:17:13 INFO]: Connections will use epoll channels, libdeflate (Linux x86_64) compression, OpenSSL 1.1.x (Linux x86_64) ciphers
[20:17:13 INFO]: Loading plugins...
[20:17:13 INFO]: Loaded plugin shulker-proxy-agent 0.4.0 by Jérémy Levilain <[email protected]>
[20:17:13 INFO]: Loaded 1 plugins
[20:17:14 INFO] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Identified Shulker proxy: minecraft-network/public-9ds7k-5rljv
[20:17:14 ERROR] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Shulker Agent crashed, stopping proxy
[20:17:14 ERROR]: redis.clients.jedis.exceptions.JedisConnectionException: Failed to connect to any host resolved for DNS name.
[20:17:14 ERROR]: 	at redis.clients.jedis.DefaultJedisSocketFactory.connectToFirstSuccessfulHost(DefaultJedisSocketFactory.java:63)
[20:17:14 ERROR]: 	at redis.clients.jedis.DefaultJedisSocketFactory.createSocket(DefaultJedisSocketFactory.java:87)
[20:17:14 ERROR]: 	at redis.clients.jedis.Connection.connect(Connection.java:195)
[20:17:14 ERROR]: 	at redis.clients.jedis.Connection.initializeFromClientConfig(Connection.java:393)
[20:17:14 ERROR]: 	at redis.clients.jedis.Connection.<init>(Connection.java:68)
[20:17:14 ERROR]: 	at redis.clients.jedis.Jedis.<init>(Jedis.java:220)
[20:17:14 ERROR]: 	at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:170)
[20:17:14 ERROR]: 	at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:571)
[20:17:14 ERROR]: 	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:298)
[20:17:14 ERROR]: 	at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:223)
[20:17:14 ERROR]: 	at redis.clients.jedis.util.Pool.getResource(Pool.java:38)
[20:17:14 ERROR]: 	at redis.clients.jedis.JedisPool.getResource(JedisPool.java:378)
[20:17:14 ERROR]: 	at io.shulkermc.proxyagent.ShulkerProxyAgentCommon.onProxyInitialization(ShulkerProxyAgentCommon.kt:60)
[20:17:14 ERROR]: 	at io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity.onProxyInitialization(ShulkerProxyAgentVelocity.kt:30)
[20:17:14 ERROR]: 	at io.shulkermc.proxyagent.velocity.Lmbda$1.execute(Unknown Source)
[20:17:14 ERROR]: 	at com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler.lambda$buildHandler$0(UntargetedEventHandler.java:56)
[20:17:14 ERROR]: 	at com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:597)
[20:17:14 ERROR]: 	at com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:478)
[20:17:14 ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[20:17:14 ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[20:17:14 ERROR]: 	at java.base/java.lang.Thread.run(Thread.java:833)
[20:17:14 ERROR]: 	Suppressed: java.net.ConnectException: Connection refused
[20:17:14 ERROR]: 		at java.base/sun.nio.ch.Net.pollConnect(Native Method)

Code of Conduct

  • I agree to follow this project's Code of Conduct

Invalid example file in docs for proxy

What happened?

The file for proxyfleet puts the config and version properties under template.spec but I saw in the resource definition that they need to be directly in the spec root property.

What components are involved in your issue?

No response

Version

Kubernetes Version

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Health Check Failing for Proxy

What happened?

Health check is failing due to ping description structure changes in 1.20.3

failed to ping localhost:25577 : json: cannot unmarshal string into Go struct field ServerInfo.description of type mcpinger.RegularChatComponent

I believe this is related to mc-monitor issue (78)
Due to using a static old version of itzg/bungeecord image here const PROXY_IMAGE: &str = "itzg/bungeecord:java17-2022.4.1";

What components are involved in your issue?

No response

Version

v0.6.1

Kubernetes Version

v1.28.3

Relevant log output

bungeecord@velocity-kxwdg-wdn5f:~$ mc-monitor status --host localhost --port 25577
failed to ping localhost:25577 : json: cannot unmarshal string into Go struct field ServerInfo.description of type mcpinger.RegularChatComponent

Code of Conduct

  • I agree to follow this project's Code of Conduct

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Pending Status Checks

These updates await pending status checks. To force their creation now, click the checkbox below.

  • chore(deps): update dependency @bufbuild/buf to v1.32.2
  • chore(deps): update dependency lint-staged to v15.2.5
  • chore(deps): update dependency vitepress to v1.2.3
  • chore(deps): update dependency yaml to v2.4.3
  • chore(deps): update plugin com.github.johnrengelman.shadow to v8.1.1
  • chore(deps): update plugin io.gitlab.arturbosch.detekt to v1.23.6
  • fix(deps): update dependency com.google.guava:guava to v33.2.1-jre
  • fix(deps): update dependency net.kyori:adventure-platform-bungeecord to v4.3.3
  • fix(deps): update dependency redis.clients:jedis to v5.1.3
  • chore(deps): update dependency prettier to v3.3.0
  • chore(deps): update plugin com.github.gmazzo.buildconfig to v4.2.0
  • fix(deps): update dependency com.google.api.grpc:proto-google-common-protos to v2.40.0
  • fix(deps): update fabric8-kubernetes-client monorepo to v6.13.0 (io.fabric8:kubernetes-httpclient-okhttp, io.fabric8:kubernetes-client-api, io.fabric8:kubernetes-client)
  • chore(deps): update dependency semantic-release to v24
  • chore(deps): update plugin com.github.gmazzo.buildconfig to v5
  • chore(deps): update plugin org.jlleitschuh.gradle.ktlint to v12

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

cargo
Cargo.toml
  • anyhow 1.0.81
  • async-trait 0.1.79
  • axum 0.7.5
  • base64 0.22.0
  • chrono 0.4.37
  • clap 4.5.4
  • const_format 0.2.32
  • futures 0.3.30
  • futures-core 0.3.30
  • hostname 0.4.0
  • http 0.2.12
  • hyper 0.14.28
  • insta 1.38.0
  • k8s-openapi 0.21.1
  • kube 0.88.1
  • lazy_static 1.4.0
  • paste 1.0.14
  • pbjson-types 0.6.0
  • prometheus 0.13.3
  • prost 0.12.3
  • rand 0.8.5
  • reqwest 0.12.2
  • schemars 0.8.16
  • serde 1.0.197
  • serde_json 1.0.115
  • serde-xml-rs 0.6.0
  • serde_yaml 0.9.34
  • strum 0.26.2
  • tempfile 3.10.1
  • thiserror 1.0.58
  • tonic 0.11.0
  • tokio 1.37.0
  • tokio-stream 0.1.15
  • tokio-util 0.7.10
  • toml 0.8.12
  • tower 0.4.13
  • tower-test 0.4.0
  • tracing 0.1.40
  • tracing-subscriber 0.3.18
  • url 2.5.0
  • uuid 1.8.0
packages/google-agones-crds/Cargo.toml
packages/google-agones-sdk/bindings/rust/Cargo.toml
packages/google-open-match-sdk/bindings/rust/Cargo.toml
packages/shulker-addon-matchmaking/Cargo.toml
packages/shulker-crds/Cargo.toml
packages/shulker-kube-utils/Cargo.toml
packages/shulker-operator/Cargo.toml
packages/shulker-sdk/bindings/rust/Cargo.toml
packages/shulker-utils/Cargo.toml
github-actions
.github/actions/install-tools/action.yml
  • actions/setup-node v4
  • actions/setup-java v4
  • mozilla-actions/sccache-action v0.0.4
.github/workflows/ci.yml
  • actions/checkout v4
  • nrwl/nx-set-shas v4
  • actions/checkout v4
  • nrwl/nx-set-shas v4
  • actions/checkout v4
  • github/codeql-action v3
  • github/codeql-action v3
  • actions/checkout v4
  • nrwl/nx-set-shas v4
  • amannn/action-semantic-pull-request v5
.github/workflows/docs.yml
  • actions/checkout v4
  • actions/configure-pages v4
  • JamesIves/github-pages-deploy-action v4
.github/workflows/release.yml
  • actions/checkout v4
  • docker/setup-qemu-action v3
  • docker/setup-buildx-action v3
  • docker/login-action v3
  • crazy-max/ghaction-import-gpg v6
  • nrwl/nx-set-shas v4
  • actions/checkout v4
  • azure/setup-helm v4
  • docker/setup-qemu-action v3
  • docker/setup-buildx-action v3
  • docker/login-action v3
  • crazy-max/ghaction-import-gpg v6
  • actions/upload-artifact v4
  • actions/checkout v4
  • azure/setup-helm v4
  • actions/download-artifact v4
  • stefanzweifel/git-auto-commit-action v5
.github/workflows/sponsors.yml
  • actions/checkout v4
  • JamesIves/github-sponsors-readme-action v1
  • EndBug/add-and-commit v9
gradle
gradle.properties
settings.gradle.kts
  • net.kyori:adventure-api 4.17.0
  • net.kyori:adventure-platform-bungeecord 4.3.2
  • org.apache.tomcat:annotations-api 6.0.53
  • net.md-5:bungeecord-api 1.20-R0.2
  • dev.folia:folia-api 1.19.4-R0.1-SNAPSHOT
  • com.google.guava:guava 33.2.0-jre
  • com.google.api.grpc:proto-google-common-protos 2.39.1
  • io.grpc:grpc-netty-shaded 1.64.0
  • io.grpc:grpc-protobuf 1.64.0
  • io.grpc:grpc-services 1.64.0
  • io.grpc:grpc-stub 1.64.0
  • redis.clients:jedis 5.1.2
  • io.fabric8:kubernetes-client 6.12.1
  • io.fabric8:kubernetes-client-api 6.12.1
  • io.fabric8:kubernetes-httpclient-okhttp 6.12.1
  • com.google.protobuf:protobuf-java 3.25.3
  • com.velocitypowered:velocity-api 3.1.1
  • com.github.gmazzo.buildconfig 4.1.2
  • com.github.johnrengelman.shadow 8.1.0
  • org.jlleitschuh.gradle.ktlint 11.6.1
  • io.gitlab.arturbosch.detekt 1.23.4
build.gradle.kts
packages/google-agones-sdk/bindings/java/gradle.properties
packages/google-agones-sdk/bindings/java/build.gradle.kts
packages/google-open-match-sdk/bindings/java/gradle.properties
packages/google-open-match-sdk/bindings/java/build.gradle.kts
packages/shulker-proxy-agent/build.gradle.kts
packages/shulker-proxy-api/gradle.properties
packages/shulker-proxy-api/build.gradle.kts
packages/shulker-sdk/bindings/java/gradle.properties
packages/shulker-sdk/bindings/java/build.gradle.kts
packages/shulker-server-agent/build.gradle.kts
packages/shulker-server-api/gradle.properties
packages/shulker-server-api/build.gradle.kts
npm
docs/package.json
  • vitepress 1.2.2
  • node ^20
package.json
  • @bufbuild/buf 1.32.0
  • @commitlint/cli 19.3.0
  • @commitlint/config-conventional 19.2.2
  • @semantic-release/changelog 6.0.3
  • @semantic-release/exec 6.0.3
  • @semantic-release/git 10.0.1
  • husky 9.0.11
  • lint-staged 15.2.2
  • prettier 3.2.5
  • semantic-release 23.1.1
  • semantic-release-replace-plugin 1.2.7
  • yaml 2.4.2
  • node ^20

  • Check this box to trigger a request for Renovate to run again on this repository

Exclude proxy from load balancer if it reaches max capacity

When a proxy is full, we must exclude it from the load balancing, so Kubernetes does not redirect new players to this proxy.

Moreover, some load balancer providers (like GCP) needs a bit of a time to take into account load balancer inclusion and exclusion. So, for this feature to work perfectly, we must take into account some lag. The easiest way of doing this is to consider a proxy full when the capacity is almost reached (with a configurable delta). This will allow the load balancer to still send some players until it had the time to update itself.

The default delta will be 15 players. So, for a proxy with a capacity of 1000 players, it will be considered full when 985 players are connected.

Autoscaling with Agones does not create new pods

What happened?

Enabling autoscaling does not result in creation of new pods.

What components are involved in your issue?

Operator

Version

N/A

Kubernetes Version

N/A

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Issue with Mutation Webhook

What happened?

I try to spawn a Shulker cluster. But I got a lot of error with Agones.

I don't know if i made a mistake with Agones deployment.

What components are involved in your issue?

No response

Version

0.4.0

Kubernetes Version

1.28

Relevant log output

{"timestamp":"2023-12-03T02:16:21.202951Z","level":"WARN","fields":{"message":"reconcile failed: BuilderError(BuilderError(\"shulker_operator::reconcilers::minecraft_server_fleet::fleet::FleetBuilder\", ApiError: Internal error occurred: failed calling webhook \"mutations.agones.dev\": failed to call webhook: Post \"https://agones-controller-service.agones-system.svc:443/mutate?timeout=10s\": tls: failed to verify certificate: x509: certificate signed by unknown authority (possibly because of \"crypto/rsa: verification error\" while trying to verify candidate authority certificate \"admission-controller-ca\"): InternalError (ErrorResponse { status: \"Failure\", me ││ ssage: \"Internal error occurred: failed calling webhook \\\"mutations.agones.dev\\\": failed to call webhook: Post \\\"https://agones-controller-service.agones-system.svc:443/mutate?timeout=10s\\\": tls: failed to verify certificate: x509: certificate signed by unknown authority (possibly because of \\\"crypto/rsa: verification error ││ \\\" while trying to verify candidate authority certificate \\\"admission-controller-ca\\\")\", reason: \"InternalError\", code: 500 })\n\nCaused by:\n    Internal error occurred: failed calling webhook \"mutations.agones.dev\": failed to call webhook: Post \"https://agones-controller-service.agones-system.svc:443/mutate?timeout=10s\" ││ : tls: failed to verify certificate: x509: certificate signed by unknown authority (possibly because of \"crypto/rsa: verification error\" while trying to verify candidate authority certificate \"admission-controller-ca\"): InternalError))"},"target":"shulker_operator::reconcilers::minecraft_server_fleet","span":{"object.reason":"error policy requested retry","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/lobby.test","name":"reconciling object"},"spans":[{"object.reason":"error policy requested retry","object.ref":"MinecraftServerFleet.v1alpha1.shulkermc.io/lobby.test","name":"reconciling object"}]}
{"timestamp":"2023-12-03T02:16:21.407581Z","level":"INFO","fields":{"message":"reconciling ProxyFleet","name":"test-proxy","namespace":"test"},"target":"shulker_operator::reconcilers::proxy_fleet","span":{"name":"reconcile"},"spans":[{"object.reason":"error policy requested retry","object.ref":"ProxyFleet.v1alpha1.shulkermc.io/test-proxy.test","name":"reconciling object"},{"name":"reconcile"}]}
{"timestamp":"2023-12-03T02:16:21.453571Z","level":"ERROR","fields":{"message":"failed with status 500 Internal Server Error"},"target":"kube_client::client::builder","span":{"name":"reconcile"},"spans":[{"object.reason":"error policy requested retry","object.ref":"ProxyFleet.v1alpha1.shulkermc.io/test-proxy.test","name":"reconciling object"},{"name":"reconcile"}]}

Code of Conduct

  • I agree to follow this project's Code of Conduct

Bug related to recreating proxies

What happened?

I created a server following the tutorial in the docs.
Then I deleted the minecraft server and proxy-server and minecraft cluster because I wanted to add myself to the administrators.
After deleting the YAMLs and adding myself to the admins, I started all of that stuff up again.
This leads to the new proxy-server not being able to start.
There are two errors I encountered. One from the proxy server pod, the other one is related to the redis-managed instance.
Error from the proxy:

[init] Resolving type given VELOCITY
[init] Downloading https://papermc.io/api/v2/projects/velocity/versions/3.2.0-SNAPSHOT/builds/294/downloads/velocity-3.2.0-SNAPSHOT-294.jar
[mc-image-helper] 15:35:20.357 INFO  : Downloaded /server/velocity-3.2.0-SNAPSHOT-294.jar
[init] Setting initial memory to 512m and max to 512m
WARN StatusConsoleListener Advanced terminal features are not available in this environment
[15:35:21 INFO]: Booting up Velocity 3.2.0-SNAPSHOT (git-8dcc7ee3-b294)...
[15:35:21 INFO]: Loading localizations...
[15:35:21 INFO]: Connections will use epoll channels, libdeflate (Linux x86_64) compression, OpenSSL 1.1.x (Linux x86_64) ciphers
[15:35:21 INFO]: Loading plugins...
[15:35:21 INFO]: Loaded plugin shulker-proxy-agent 0.4.0 by Jérémy Levilain <[email protected]>
[15:35:21 INFO]: Loaded 1 plugins
[15:35:22 INFO] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Identified Shulker proxy: minecraft-network/public-sws69-5ghlc
[15:35:22 ERROR] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Shulker Agent crashed, stopping proxy
[15:35:22 ERROR]: redis.clients.jedis.exceptions.JedisDataException: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error.
[15:35:22 ERROR]: 	at redis.clients.jedis.Protocol.processError(Protocol.java:105)
[15:35:22 ERROR]: 	at redis.clients.jedis.Protocol.process(Protocol.java:162)
[15:35:22 ERROR]: 	at redis.clients.jedis.Protocol.read(Protocol.java:221)
[15:35:22 ERROR]: 	at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:351)
[15:35:22 ERROR]: 	at redis.clients.jedis.Connection.getStatusCodeReply(Connection.java:269)
[15:35:22 ERROR]: 	at redis.clients.jedis.Jedis.ping(Jedis.java:339)
[15:35:22 ERROR]: 	at io.shulkermc.proxyagent.ShulkerProxyAgentCommon.onProxyInitialization(ShulkerProxyAgentCommon.kt:60)
[15:35:22 ERROR]: 	at io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity.onProxyInitialization(ShulkerProxyAgentVelocity.kt:30)
[15:35:22 ERROR]: 	at io.shulkermc.proxyagent.velocity.Lmbda$1.execute(Unknown Source)
[15:35:22 ERROR]: 	at com.velocitypowered.proxy.event.UntargetedEventHandler$VoidHandler.lambda$buildHandler$0(UntargetedEventHandler.java:56)
[15:35:22 ERROR]: 	at com.velocitypowered.proxy.event.VelocityEventManager.fire(VelocityEventManager.java:597)
[15:35:22 ERROR]: 	at com.velocitypowered.proxy.event.VelocityEventManager.lambda$fire$5(VelocityEventManager.java:478)
[15:35:22 ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
[15:35:22 ERROR]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
[15:35:22 ERROR]: 	at java.base/java.lang.Thread.run(Thread.java:833)
[15:35:22 ERROR] [io.shulkermc.proxyagent.velocity.ShulkerProxyAgentVelocity]: Failed to ask Agones sidecar to shutdown properly, stopping process manually

Errors from the Redis-Managed-0 pod:

1:M 29 Nov 2023 15:45:14.028 * 100 changes in 300 seconds. Saving...
1:M 29 Nov 2023 15:45:14.028 * Background saving started by pid 312
312:C 29 Nov 2023 15:45:14.028 # Failed opening the temp RDB file temp-312.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Nov 2023 15:45:14.128 # Background saving error
1:M 29 Nov 2023 15:45:20.043 * 100 changes in 300 seconds. Saving...
1:M 29 Nov 2023 15:45:20.058 * Background saving started by pid 313
313:C 29 Nov 2023 15:45:20.058 # Failed opening the temp RDB file temp-313.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Nov 2023 15:45:20.158 # Background saving error
1:M 29 Nov 2023 15:45:26.069 * 100 changes in 300 seconds. Saving...
1:M 29 Nov 2023 15:45:26.074 * Background saving started by pid 314
314:C 29 Nov 2023 15:45:26.074 # Failed opening the temp RDB file temp-314.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Nov 2023 15:45:26.174 # Background saving error
1:M 29 Nov 2023 15:45:32.085 * 100 changes in 300 seconds. Saving...
1:M 29 Nov 2023 15:45:32.085 * Background saving started by pid 315
315:C 29 Nov 2023 15:45:32.085 # Failed opening the temp RDB file temp-315.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Nov 2023 15:45:32.185 # Background saving error
1:M 29 Nov 2023 15:45:38.096 * 100 changes in 300 seconds. Saving...
1:M 29 Nov 2023 15:45:38.096 * Background saving started by pid 316
316:C 29 Nov 2023 15:45:38.096 # Failed opening the temp RDB file temp-316.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Nov 2023 15:45:38.196 # Background saving error
1:M 29 Nov 2023 15:45:44.007 * 100 changes in 300 seconds. Saving...
1:M 29 Nov 2023 15:45:44.007 * Background saving started by pid 317
317:C 29 Nov 2023 15:45:44.007 # Failed opening the temp RDB file temp-317.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Nov 2023 15:45:44.108 # Background saving error
1:M 29 Nov 2023 15:45:50.026 * 100 changes in 300 seconds. Saving...
1:M 29 Nov 2023 15:45:50.026 * Background saving started by pid 318
318:C 29 Nov 2023 15:45:50.027 # Failed opening the temp RDB file temp-318.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Nov 2023 15:45:50.128 # Background saving error
1:M 29 Nov 2023 15:45:56.041 * 100 changes in 300 seconds. Saving...
1:M 29 Nov 2023 15:45:56.041 * Background saving started by pid 319
319:C 29 Nov 2023 15:45:56.041 # Failed opening the temp RDB file temp-319.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Nov 2023 15:45:56.141 # Background saving error
1:M 29 Nov 2023 15:46:02.055 * 100 changes in 300 seconds. Saving...
1:M 29 Nov 2023 15:46:02.055 * Background saving started by pid 320
320:C 29 Nov 2023 15:46:02.055 # Failed opening the temp RDB file temp-320.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Nov 2023 15:46:02.155 # Background saving error

What components are involved in your issue?

No response

Version

v0.4.0

Kubernetes Version

1.24

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Deleting a cluster prior to any referable resource infinite loop

What happened?

A MinecraftServerFleet or ProxyFleet for instance needs a valid clusterRef. If no cluster exists, it will loop the reconcile tries.

What components are involved in your issue?

No response

Version

0.2.0

Kubernetes Version

1.27

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

error: unexpected argument '--agones-allocation-tls-client-crt' found

What happened?

Getting this error when using the stock helm values.yaml:
(error: unexpected argument '--agones-allocation-tls-client-crt' found)

This causes the pod [shulker-shulker-operator-655f76fffb-7cn56] to not start up.

error: unexpected argument '--agones-allocation-tls-client-crt' found

2023-11-26T18:59:37.260191685Z   tip: a similar argument exists: '--agones-allocator-tls-client-crt'

Usage: shulker-operator <--metrics-bind-address <address>|--api-bind-address <address>|--agones-allocator-host <host>|--agones-allocator-grpc-port <port>|--agones-allocator-tls-client-crt <path>|--agones-allocator-tls-client-key <path>>
2023-11-26T18:59:37.260203665Z 
For more information, try '--help'.

What components are involved in your issue?

No response

Version

0.3.0

Kubernetes Version

1.24

Relevant log output

error: unexpected argument '--agones-allocation-tls-client-crt' found

2023-11-26T18:59:37.260191685Z   tip: a similar argument exists: '--agones-allocator-tls-client-crt'

Usage: shulker-operator <--metrics-bind-address <address>|--api-bind-address <address>|--agones-allocator-host <host>|--agones-allocator-grpc-port <port>|--agones-allocator-tls-client-crt <path>|--agones-allocator-tls-client-key <path>>
2023-11-26T18:59:37.260203665Z 
For more information, try '--help'.

Code of Conduct

  • I agree to follow this project's Code of Conduct

Volumes do not get mounted

What happened?

Volumes mentioned in the podOverrides section do not get mounted.
The config I used looks like this:

apiVersion: shulkermc.io/v1alpha1
kind: MinecraftServerFleet
metadata:
  name: ca-server
  namespace: minecraft-network
spec:
  clusterRef:
    name: fl-net
  replicas: 1
  template:
    spec:
      podOverrides:
        resources:
          requests:
            memory: "512Mi"
            cpu: "500m"
          limits:
            memory: "2048Mi"
            cpu: "4000m"
        containers:
          volumeMounts:
            - name: ca-world
              mountPath: /data/world
            - name: ca-world-nether
              mountPath: /data/world_nether
            - name: ca-world-the-end
              mountPath: /data/world_the_end
        volumes:
          -  name: ca-world
             persistentVolumeClaim:
             claimName: ca-world-claim
          -  name: ca-world-nether
             persistentVolumeClaim:
             claimName: ca-world-nether-claim
          -  name: ca-world-the-end
             persistentVolumeClaim:
             claimName: ca-world-the-end-claim
      clusterRef:
        name: fl-net
      tags:
        - lobby
      version:
        channel: Paper
        name: '1.20.2'
      config:
        plugins:
          - url: https://xxxxxxxxxx/s/fCn6TWGQfaHcMnz/download/EssentialsX-2.20.1.jar
          - url: https://xxxxxxxxxx/s/HjdfDzpgGAjRw9r/download/Chunky-1.3.92.jar
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ca-world-claim
  namespace: minecraft-network
spec:
  storageClassName: longhorn
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ca-world-nether-claim
  namespace: minecraft-network
spec:
  storageClassName: longhorn
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ca-world-the-end-claim
  namespace: minecraft-network
spec:
  storageClassName: longhorn
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
---

What components are involved in your issue?

No response

Version

v0.3.0

Kubernetes Version

1.24

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

ShulkerServerAgent causes Paper MinecraftServerFleet to crash

What happened?

MinecraftServerFleet created vanilla server fails due to the error below

apiVersion: shulkermc.io/v1alpha1
kind: MinecraftServerFleet
metadata:
  name: vanilla
spec:
  clusterRef:
    name: shulker
  replicas: 1
  template:
    spec:
      clusterRef:
        name: shulker
      tags:
        - limbo
        - lobby
        - vanilla
      version:
        channel: Paper
        name: '1.20.2'
      config: {}

What components are involved in your issue?

Server Agent (Paper)

Version

0.3.0

Kubernetes Version

1.27

Relevant log output

[init] Starting the Minecraft server...
Downloading mojang_1.20.2.jar
Applying patches
Starting org.bukkit.craftbukkit.Main
System Info: Java 17 (OpenJDK 64-Bit Server VM 17.0.8.1+1) Host: Linux 5.15.120+ (aarch64)
Loading libraries, please wait...
2023-11-10 23:24:15,355 ServerMain WARN Advanced terminal features are not available in this environment
[23:24:19 INFO]: Environment: Environment[accountsHost=https://api.mojang.com, sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]
[23:24:20 INFO]: Found new data pack file/bukkit, loading it automatically
[23:24:21 INFO]: Loaded 7 recipes
[23:24:22 INFO]: Starting minecraft server version 1.20.2
[23:24:22 INFO]: Loading properties
[23:24:22 INFO]: This server is running Paper version git-Paper-280 (MC: 1.20.2) (Implementing API version 1.20.2-R0.1-SNAPSHOT) (Git: 4675152)
[23:24:22 INFO]: Server Ping Player Sample Count: 12
[23:24:22 INFO]: Using 4 threads for Netty based IO
[23:24:22 INFO]: [ChunkTaskScheduler] Chunk system is using 1 I/O threads, 1 worker threads, and gen parallelism of 1 threads
[23:24:22 WARN]: [!] The timings profiler has been enabled but has been scheduled for removal from Paper in the future.
    We recommend installing the spark profiler as a replacement: https://spark.lucko.me/
    For more information please visit: https://github.com/PaperMC/Paper/issues/8948
[23:24:23 INFO]: Default game type: SURVIVAL
[23:24:23 INFO]: Generating keypair
[23:24:23 INFO]: Starting Minecraft server on *:25565
[23:24:23 INFO]: Using epoll channel type
[23:24:23 INFO]: Paper: Using libdeflate (Linux aarch64) compression from Velocity.
[23:24:23 INFO]: Paper: Using OpenSSL 1.1.x (Linux aarch64) cipher from Velocity.
[23:24:23 INFO]: [ShulkerServerAgent] Loading server plugin ShulkerServerAgent v0.3.0
[23:24:23 WARN]: **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!
[23:24:23 WARN]: The server will make no attempt to authenticate usernames. Beware.
[23:24:23 WARN]: Whilst this makes it possible to use Velocity, unless access to your server is properly restricted, it also opens up the ability for hackers to connect with any username they choose.
[23:24:23 WARN]: Please see https://docs.papermc.io/velocity/security for further information.
[23:24:23 WARN]: To change this, set "online-mode" to "true" in the server.properties file.
[23:24:23 INFO]: Preparing level "world"
[23:24:35 INFO]: Preparing start region for dimension minecraft:overworld
[23:24:35 INFO]: Time elapsed: 141 ms
[23:24:35 INFO]: [ShulkerServerAgent] Enabling ShulkerServerAgent v0.3.0
[23:24:36 ERROR]: [ShulkerServerAgent] Failed to parse configuration: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
[23:24:36 WARN]: java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
[23:24:36 WARN]: 	at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
[23:24:36 WARN]: 	at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.shulkermc.serveragent.ShulkerServerAgentCommon.onServerInitialization(ShulkerServerAgentCommon.kt:28)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.shulkermc.serveragent.paper.ShulkerServerAgentPaper.onEnable(ShulkerServerAgentPaper.kt:11)
[23:24:36 WARN]: 	at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:281)
[23:24:36 WARN]: 	at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:189)
[23:24:36 WARN]: 	at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:104)
[23:24:36 WARN]: 	at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:507)
[23:24:36 WARN]: 	at org.bukkit.craftbukkit.v1_20_R2.CraftServer.enablePlugin(CraftServer.java:644)
[23:24:36 WARN]: 	at org.bukkit.craftbukkit.v1_20_R2.CraftServer.enablePlugins(CraftServer.java:555)
[23:24:36 WARN]: 	at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:627)
[23:24:36 WARN]: 	at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:424)
[23:24:36 WARN]: 	at net.minecraft.server.dedicated.DedicatedServer.e(DedicatedServer.java:308)
[23:24:36 WARN]: 	at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1086)
[23:24:36 WARN]: 	at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315)
[23:24:36 WARN]: 	at java.base/java.lang.Thread.run(Unknown Source)
[23:24:36 WARN]: Caused by: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.Status.asRuntimeException(Status.java:537)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:538)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:574)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:72)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:742)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:723)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
[23:24:36 WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
[23:24:36 WARN]: 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
[23:24:36 WARN]: 	... 1 more
[23:24:36 WARN]: Caused by: java.lang.VerifyError: Bad return type
[23:24:36 WARN]: Exception Details:
[23:24:36 WARN]:   Location:
[23:24:36 WARN]:     dev/agones/dev/sdk/GameServer$ObjectMeta.internalGetMapFieldReflection(I)Lcom/google/protobuf/MapFieldReflectionAccessor; @32: areturn
[23:24:36 WARN]:   Reason:
[23:24:36 WARN]:     Type 'com/google/protobuf/MapField' (current frame, stack[0]) is not assignable to 'com/google/protobuf/MapFieldReflectionAccessor' (from method signature)
[23:24:36 WARN]:   Current Frame:
[23:24:36 WARN]:     bci: @32
[23:24:36 WARN]:     flags: { }
[23:24:36 WARN]:     locals: { 'dev/agones/dev/sdk/GameServer$ObjectMeta', integer }
[23:24:36 WARN]:     stack: { 'com/google/protobuf/MapField' }
[23:24:36 WARN]:   Bytecode:
[23:24:36 WARN]:     0000000: 1bab 0000 0000 0025 0000 0002 0000 0008
[23:24:36 WARN]:     0000010: 0000 001b 0000 0009 0000 0020 2ab6 0034
[23:24:36 WARN]:     0000020: b02a b600 38b0 bb00 3b59 1bba 003d 0000
[23:24:36 WARN]:     0000030: b700 41bf                              
[23:24:36 WARN]:   Stackmap Table:
[23:24:36 WARN]:     same_frame(@28)
[23:24:36 WARN]:     same_frame(@33)
[23:24:36 WARN]:     same_frame(@38)
[23:24:36 WARN]: 
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//dev.agones.dev.sdk.GameServer$Builder.getObjectMeta(GameServer.java:8581)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//dev.agones.dev.sdk.GameServer$Builder.getObjectMetaFieldBuilder(GameServer.java:8678)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//dev.agones.dev.sdk.GameServer$Builder.mergeFrom(GameServer.java:8529)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//dev.agones.dev.sdk.GameServer$1.parsePartialFrom(GameServer.java:8962)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//dev.agones.dev.sdk.GameServer$1.parsePartialFrom(GameServer.java:8954)
[23:24:36 WARN]: 	at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:86)
[23:24:36 WARN]: 	at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parseFrom(ProtoLiteUtils.java:241)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:233)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:130)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.MethodDescriptor.parseResponse(MethodDescriptor.java:284)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:667)
[23:24:36 WARN]: 	at shulker-server-agent-0.3.0-paper.jar//io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:654)
[23:24:36 WARN]: 	... 5 more
[23:24:36 INFO]: Running delayed init tasks
[23:24:36 INFO]: Done (14.070s)! For help, type "help"
[23:24:36 INFO]: Timings Reset
2023/11/10 23:24:36 Stopping with rcon-cli
{"gsKey":"apps/vanilla-7kn7m-25tl4","message":"SDK server shutdown requested, waiting for game server shutdown","severity":"info","source":"*sdkserver.SDKServer","state":"Shutdown","time":"2023-11-10T23:24:36.233145205Z"}
{"message":"Shutting down SDK server","severity":"info","source":"main","time":"2023-11-10T23:24:36.233199685Z"}
{"error":"http: Server closed","message":"http server closed","severity":"info","source":"main","time":"2023-11-10T23:24:36.233257045Z"}
2023-11-10T23:24:36.260Z	ERROR	mc-server-runner	Failed to stop using rcon-cli	{"error": "exit status 1"}
2023-11-10T23:24:36.260Z	INFO	mc-server-runner	Sending 'stop' to Minecraft server...
2023-11-10T23:24:36.260Z	INFO	mc-server-runner	Waiting for completion...
[23:24:36 INFO]: Stopping the server
[23:24:36 INFO]: Stopping server
[23:24:36 INFO]: [ShulkerServerAgent] Disabling ShulkerServerAgent v0.3.0
[23:24:36 ERROR]: Error occurred (in the plugin loader) while disabling ShulkerServerAgent v0.3.0 (Is it up to date?)
kotlin.UninitializedPropertyAccessException: lateinit property healthcheckTask has not been initialized
	at io.shulkermc.serveragent.ShulkerServerAgentCommon.onServerShutdown(ShulkerServerAgentCommon.kt:61) ~[shulker-server-agent-0.3.0-paper.jar:?]
	at io.shulkermc.serveragent.paper.ShulkerServerAgentPaper.onDisable(ShulkerServerAgentPaper.kt:15) ~[shulker-server-agent-0.3.0-paper.jar:?]
	at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:283) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:?]
	at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.disablePlugin(PaperPluginInstanceManager.java:224) ~[paper-1.20.2.jar:git-Paper-280]
	at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.disablePlugins(PaperPluginInstanceManager.java:148) ~[paper-1.20.2.jar:git-Paper-280]
	at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.disablePlugins(PaperPluginManagerImpl.java:92) ~[paper-1.20.2.jar:git-Paper-280]
	at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:528) ~[paper-api-1.20.2-R0.1-SNAPSHOT.jar:?]
	at org.bukkit.craftbukkit.v1_20_R2.CraftServer.disablePlugins(CraftServer.java:575) ~[paper-1.20.2.jar:git-Paper-280]
	at net.minecraft.server.MinecraftServer.stopServer(MinecraftServer.java:930) ~[paper-1.20.2.jar:git-Paper-280]
	at net.minecraft.server.dedicated.DedicatedServer.stopServer(DedicatedServer.java:820) ~[paper-1.20.2.jar:git-Paper-280]
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1195) ~[paper-1.20.2.jar:git-Paper-280]
	at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315) ~[paper-1.20.2.jar:git-Paper-280]
	at java.lang.Thread.run(Unknown Source) ~[?:?]
[23:24:36 INFO]: Saving players
[23:24:36 INFO]: Saving worlds
[23:24:36 INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:overworld
[23:24:36 INFO]: [ChunkHolderManager] Waiting 60s for chunk system to halt for world 'world'
[23:24:36 INFO]: [ChunkHolderManager] Halted chunk system for world 'world'
[23:24:36 INFO]: [ChunkHolderManager] Saving all chunkholders for world 'world'
[23:24:38 INFO]: [ChunkHolderManager] Saved 1521 block chunks, 1 entity chunks, 0 poi chunks in world 'world' in 1.14s
[23:24:38 INFO]: ThreadedAnvilChunkStorage (world): All chunks are saved
2023-11-10 23:24:38,092 Log4j2-AsyncAppenderEventDispatcher-1-Async WARN Advanced terminal features are not available in this environment
[23:24:38 INFO]: ThreadedAnvilChunkStorage: All dimensions are saved
[23:24:38 INFO]: Flushing Chunk IO
[23:24:38 INFO]: Closing Thread Pool
[23:24:38 INFO]: Closing Server
2023-11-10T23:24:38.477Z	INFO	mc-server-runner	Done

Code of Conduct

  • I agree to follow this project's Code of Conduct

ARM image missing for shulker-operator:next

What happened?

The ARM image missing for shulker-operator:next routinely is missing.

What components are involved in your issue?

Proxy Agent (Velocity)

Version

0.3.0

Kubernetes Version

1.27

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Deleting a cluster deadlocks all the pods

What happened?

When deleting a cluster, all the RBAC of the servers and proxies are deleted prior to the pod termination, this deadlock the Agones sidecars as it is unable to terminate correctly.

What components are involved in your issue?

No response

Version

0.2.0

Kubernetes Version

1.27

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Config escaping "<" in velocity motd

What happened?

Summary

The configuration process is unexpectedly adding a double backslash before the '<' character when setting values for MOTD. This behavior is not in line with the expected functionality of MiniMessage formatting.

Proxy.yaml

set using kubectl apply -f proxy.yaml -n bridgesplash

metadata:
  name: public
spec:
  clusterRef:
    name: bridgesplash
  replicas: 1
  service:
    type: LoadBalancer
    externalTrafficPolicy: Local
  template:
    spec:
      version:
        channel: Velocity
        name: latest
      config:
        motd: "<red>▓▒░             ⚡</red>   <gradient:red:blue><bold>BridgeSplash</bold></gradient>   <red>⚡             ░▒▓</red>

velocity.toml

Inside Velocity pod filesystem.

config-version = "2.6"
bind = "0.0.0.0:25577"
# What should be the MOTD? This gets displayed when the player adds your server to
# their server list. Only MiniMessage format is accepted.
motd = "\\<red>▓▒░             ⚡\\</red>   \\<gradient:red:blue>\\<bold>BridgeSplash\\</bold>\\</gradient>   \\<red>⚡               ░▒▓\\</red>"
show-max-players = 1500
online-mode = true
force-key-authentication = true
prevent-client-proxy-connections = true
forwarding-secret-file = "/mnt/shulker/forwarding-secret/key"
player-info-forwarding-mode = "modern"
forced-hosts = {}

[servers]
        lobby = "localhost:30000"
        try = ["lobby", "limbo"]
        limbo = "localhost:30001"
[advanced]
        tcp-fast-open = true
        haproxy-protocol = false

What components are involved in your issue?

Operator, Proxy Agent (Velocity)

Version

v0.6.0

Kubernetes Version

v1.28.3

Relevant log output

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Ability to specify additional ports in pod overrides

Discussed in #482

Originally posted by TehNeon March 25, 2024
It'd be nice to have the ability to specify additional ports on pods. My usage case for this is that I want to use UnifiedMetrics (https://github.com/Cubxity/UnifiedMetrics) for server metrics. I currently can do a workaround with this by using the configuring the plugin to utilize Prometheus push gateway, but I'd prefer to utilize scraping with a ServiceMonitor/PodMonitor. I'd also like to be able to utilize the GeyserMC (https://github.com/GeyserMC/Geyser) plugin for my proxy platform of choice (Velocity) to allow Bedrock players to connect.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.