Skip to content

Commit

Permalink
Created troubleshooting guide and categories (#63)
Browse files Browse the repository at this point in the history
* Created troubleshooting guide and categories

* Created troubleshooting guide

* Updated README.md

Updated spelling error! Opps!

Updated spelling error.
  • Loading branch information
AmieDD authored Nov 12, 2021
1 parent 7b0e29a commit 98f915b
Show file tree
Hide file tree
Showing 11 changed files with 127 additions and 0 deletions.
15 changes: 15 additions & 0 deletions docs/troubleshooting/Cluster/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
This contains the troubleshooting Clusters related to thundernetes

## **Category: Cluster**

### **Architecture**

## **Configuration**

### **How to**

### **Scaling**

### **Deployments**

### **Nodes**
3 changes: 3 additions & 0 deletions docs/troubleshooting/Deployment/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
This contains the troubleshooting Deployment related to thundernetes

## **Category: Deployment**
20 changes: 20 additions & 0 deletions docs/troubleshooting/GameServers/HowCanIFindThePublicIPAddress.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## How can I find the Public IP address from inside a GameServer?

The GSDK call to get the Public IP is not supported at this time, it returns "N/A". However, you can easily get the Public IP address by using one of the following web sites from your game server:

```
curl http://canhazip.com
curl http://whatismyip.akamai.com/
curl https://4.ifcfg.me/
curl http://checkip.amazonaws.com
curl -s http://whatismijnip.nl | awk '{print $5}'
curl -s icanhazip.com
curl ident.me
curl ipecho.net/plain
curl wgetip.com
curl ip.tyk.nu
curl bot.whatismyipaddress.com
wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]\|.]//g'
```

The above methods work since the Node hosting your Pod has a Public IP.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
## How can I run my game server pods in a non-default namespace?

By default, thundernetes monitors the ```default``` namespace. If you want to run your game servers in a different namespace, you should first install the necessary ServiceAccount/RoleBinding RBAC roles on this namespace. This is because the sidecar running on the GameServer Pod needs access to talk to the Kubernetes API server. For information on Kubernetes RBAC, check here.

You can save the following configuration on a yaml file and then run ```kubectl apply -f /path/to/file.yaml``` to create the namespace and RBAC objects.

```yaml
apiVersion: v1
kind: Namespace
metadata:
name: mynamespace
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: gameserver-editor
namespace: mynamespace
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: gameserver-editor-rolebinding
namespace: mynamespace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: gameserver-editor-role
subjects:
- kind: ServiceAccount
name: gameserver-editor
namespace: mynamespace
```
12 changes: 12 additions & 0 deletions docs/troubleshooting/GameServers/HowToScheduleGameServerNodes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## How do I schedule thundernetes Pods and GameServer Pods into different Nodes?

There might be cases in which you would like to have system and operator Pods (Pods that are created on the kube-system and thundernetes-system namespaces) and your GameServer Pods scheduled on different Nodes. One reason for this might be that you want special Node types for your GameServers. For example, you might want to have a dedicated Node for your GameServers that are dependent on a special GPU. Another reason might be that you don't want any interruption whatsoever to Pods that are critical for the cluster to run properly. One approach to achieve this isolation is:

1. Create a separate NodePool to host your GameServer Pods. Check here on how to do it on Azure Kubernetes Service. Create this on "user" mode so that "kube-system" Pods are not scheduled on this NodePool. When creating a NodePool, you can specify custom Labels for the Nodes. Let's assume that you apply the ```agentpool=gameserver``` Label.
2. Use the ```nodeSelector``` field on your GameServer Pod spec to request that the GameServer Pod is scheduled on Nodes that have the ```agentpool=gameserver``` Label. Take a look at this sample YAML file for an example.
3. When you create your GameServer Pods, those will be scheduled on the NodePool you created.
4. You should also modify the ```nodeSelector``` field on the controller Pod spec to make it will be scheduled on the system Node Pool. On AKS, if the NodePool is called nodepool1, you should add this YAML snippet to the ```thundernetes-controller-manager``` Deployment on the [YAML install file](https://github.com/PlayFab/thundernetes/blob/39f3c8bb3cb4d4f95d128a9700be72cb1014cd21/installfiles/operator.yaml):
```nodeSelector:
agentpool: nodepool1
```
You should add this YAML snippet to any workloads you don't want to be scheduled on the GameServer NodePool. Check here for additional information on assigning pods to Nodes and check here for more information on AKS system and user node pools.
6 changes: 6 additions & 0 deletions docs/troubleshooting/GameServers/MyGameServerIsStuck.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## Help! What should we do if a GameServer gets stuck?

We can advise to ```kubectl delete gs <Name>``` since this will take down both the GameServer instance, the corresponding Pod as well as the GameServerDetail CRD instance (in case the game server was allocated).

:exclamation: Do not delete the Pod. It will be deleted automatically when the GameServer is deleted.
:exclamation: Do not manually override GameServer.status details, this will create issues during controller reconciliation.
10 changes: 10 additions & 0 deletions docs/troubleshooting/GameServers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
This contains troubleshooting troubleshooting Game Servers related to thundernetes

## **Category: Game Servers**

### **How to**
* [How can I find the public IP Address from inside a Game Server?](./HowCanIFindThePublicIPAddress.md)
* [Help! My Game server is stuck!](./MyGameServerIsStuck.md)

* [My Game Servre is stuck. What can I do?](./MyGameServerIsStuck.md)
* [How can I run my game server pods in a non-default namespace?](./HowCanIRunMyGameServerPodInANonDefaultNamespace.md)
5 changes: 5 additions & 0 deletions docs/troubleshooting/Kubernetes/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
This contains the troubleshooting Kubernetes related to thundernetes

## **Category: Kubernetes**

### **How-to**
5 changes: 5 additions & 0 deletions docs/troubleshooting/Metrics/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
This contains the troubleshooting Metrics related to thundernetes

## **Category: Metrics**

### **How-to**
14 changes: 14 additions & 0 deletions docs/troubleshooting/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# thundernetes Troubleshooting Guide

This is a public repository for all of thundernetes Troubleshooting guides, and is intended to provide a central location for community driven troubleshooting content.

### Table of Contents
Troubleshooting guides are grouped by categories, and stored in relevantly named subdirectories; each directory containing a README the lists the commonly used and exposed guides through portal as recommendations during ticket creation process. The following are the categories of guides that are stored in reletantly named directories:

- [Cluster](./Cluster/README.md) - Scaling, Nodes, Patch Orchestration
- [Deployment](./Deployment/README.md) - Deployments, Game Server Deployments, Game Server Deployment Configs
- [Game Server](./GameServer/README.md) - Game Servers, Game Server Configurations, Game Server Clusters, Game Server Nodes
- [Kubernetes](./Kubernetes/README.md) - Things related to Kubernetes
- [Metrics](./Metrics/README.md) - Metrics, Monitoring, Grafana, Prometheus
- [Security](./Security/README.md) - Certificates, KeyVault, Azure Active Directory, Permissions

5 changes: 5 additions & 0 deletions docs/troubleshooting/Security/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
This contains the troubleshooting Security related to thundernetes

## **Category: Security**

### **How-to**

0 comments on commit 98f915b

Please sign in to comment.