Add: Kubernetes guide to README
This commit is contained in:
1 parent
4bd84e2c7d
commit
9d092514d9
1 file changed
+187
@@ -10,6 +10,7 @@ A feature-rich Discord bot for monitoring and managing Pterodactyl game servers
|
||||
- [Discord Bot Setup](#discord-bot-setup)
|
||||
- [Traditional Installation](#traditional-installation)
|
||||
- [Docker Installation](#docker-installation)
|
||||
- [Kubernetes Installation](#kubernetes-installation)
|
||||
- [Configuration](#configuration)
|
||||
- [Environment Variables](#environment-variables)
|
||||
- [Configuration File](#configuration-file)
|
||||
@@ -244,6 +245,192 @@ Before installing the bot software, you need to create a Discord application and
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### Kubernetes Installation
|
||||
|
||||
1. Clone the repository:
|
||||
```bash
|
||||
git clone https://git.serendipity.systems/k.eaven/pterodactyl-discord-bot.git
|
||||
cd pterodactyl-discord-bot
|
||||
```
|
||||
|
||||
2. Build and push the Docker image to your container registry:
|
||||
```bash
|
||||
docker build -t your-registry/pterodisbot:latest .
|
||||
docker push your-registry/pterodisbot:latest
|
||||
```
|
||||
|
||||
3. Create a Kubernetes namespace (optional but recommended):
|
||||
```bash
|
||||
kubectl create namespace pterodisbot
|
||||
```
|
||||
|
||||
4. Create a Kubernetes Secret with your configuration:
|
||||
```bash
|
||||
kubectl create secret generic pterodisbot-config \
|
||||
--from-literal=DISCORD_TOKEN='your-discord-bot-token' \
|
||||
--from-literal=ALLOWED_GUILD_ID='your-discord-guild-id' \
|
||||
--from-literal=PANEL_URL='https://your.pterodactyl.panel' \
|
||||
--from-literal=CLIENT_API_KEY='ptlc_your-client-api-key' \
|
||||
--from-literal=APPLICATION_API_KEY='ptla_your-application-api-key' \
|
||||
-n pterodisbot
|
||||
```
|
||||
|
||||
5. Create a PersistentVolumeClaim for logs and embed data:
|
||||
```yaml
|
||||
# pvc.yaml
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: pterodisbot-data
|
||||
namespace: pterodisbot
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
```
|
||||
```bash
|
||||
kubectl apply -f pvc.yaml
|
||||
```
|
||||
|
||||
6. Create the Deployment:
|
||||
```yaml
|
||||
# deployment.yaml
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: pterodisbot
|
||||
namespace: pterodisbot
|
||||
labels:
|
||||
app: pterodisbot
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: pterodisbot
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: pterodisbot
|
||||
spec:
|
||||
containers:
|
||||
- name: pterodisbot
|
||||
image: your-registry/pterodisbot:latest
|
||||
imagePullPolicy: Always
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: pterodisbot-config
|
||||
volumeMounts:
|
||||
- name: pterodisbot-data
|
||||
mountPath: /app/logs
|
||||
subPath: logs
|
||||
- name: pterodisbot-data
|
||||
mountPath: /app/embed
|
||||
subPath: embed
|
||||
resources:
|
||||
requests:
|
||||
memory: "256Mi"
|
||||
cpu: "100m"
|
||||
limits:
|
||||
memory: "512Mi"
|
||||
cpu: "500m"
|
||||
livenessProbe:
|
||||
exec:
|
||||
command: ["python", "-c", "import sys; sys.exit(0)"]
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
readinessProbe:
|
||||
exec:
|
||||
command: ["python", "-c", "import sys; sys.exit(0)"]
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
volumes:
|
||||
- name: pterodisbot-data
|
||||
persistentVolumeClaim:
|
||||
claimName: pterodisbot-data
|
||||
```
|
||||
```bash
|
||||
kubectl apply -f deployment.yaml
|
||||
```
|
||||
|
||||
7. (Optional) Create a Service if you need to expose metrics or health checks:
|
||||
```yaml
|
||||
# service.yaml
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: pterodisbot
|
||||
namespace: pterodisbot
|
||||
labels:
|
||||
app: pterodisbot
|
||||
spec:
|
||||
selector:
|
||||
app: pterodisbot
|
||||
ports:
|
||||
- name: http
|
||||
port: 8080
|
||||
targetPort: 8080
|
||||
type: ClusterIP
|
||||
```
|
||||
```bash
|
||||
kubectl apply -f service.yaml
|
||||
```
|
||||
|
||||
8. (Optional) Create a HorizontalPodAutoscaler for automatic scaling:
|
||||
```yaml
|
||||
# hpa.yaml
|
||||
apiVersion: autoscaling/v2
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: pterodisbot
|
||||
namespace: pterodisbot
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: pterodisbot
|
||||
minReplicas: 1
|
||||
maxReplicas: 3
|
||||
metrics:
|
||||
- type: Resource
|
||||
resource:
|
||||
name: cpu
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: 70
|
||||
```
|
||||
```bash
|
||||
kubectl apply -f hpa.yaml
|
||||
```
|
||||
|
||||
9. Verify the deployment:
|
||||
```bash
|
||||
kubectl get pods -n pterodisbot
|
||||
kubectl logs -n pterodisbot -l app=pterodisbot -f
|
||||
```
|
||||
|
||||
10. For production, consider using a Helm chart or Kustomize for better configuration management. Create a `kustomization.yaml`:
|
||||
```yaml
|
||||
# kustomization.yaml
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
namespace: pterodisbot
|
||||
resources:
|
||||
- pvc.yaml
|
||||
- deployment.yaml
|
||||
- service.yaml
|
||||
- hpa.yaml
|
||||
images:
|
||||
- name: pterodisbot
|
||||
newTag: latest
|
||||
commonLabels:
|
||||
app: pterodisbot
|
||||
```
|
||||
```bash
|
||||
kubectl apply -k .
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
Reference in new issue
Block a user