Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .github/workflows/publish-image.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Publish Container Image

on:
push:
tags:
- 'v*'
workflow_dispatch: {}

permissions:
contents: read
packages: write

jobs:
publish-master:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false

- name: Free up disk space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf /opt/hostedtoolcache/CodeQL
sudo rm -rf /usr/local/lib/android
df -h

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract version from tag
id: version
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "image_tag=${{ github.sha }}" >> $GITHUB_OUTPUT
else
VERSION=${GITHUB_REF_NAME#v}
echo "image_tag=${VERSION}" >> $GITHUB_OUTPUT
fi

- name: Build and push mooncake-master image
uses: docker/build-push-action@v6
with:
context: .
file: docker/Dockerfile.master
push: true
tags: |
ghcr.io/${{ github.repository_owner }}/mooncake-master:${{ steps.version.outputs.image_tag }}
ghcr.io/${{ github.repository_owner }}/mooncake-master:latest
14 changes: 14 additions & 0 deletions deploy/k8s/monitoring/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: mooncake
resources:
- ../mooncake-master-deployment
- servicemonitor.yaml

labels:
- pairs:
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/component: master
app.kubernetes.io/part-of: mooncake
includeTemplates: true
includeSelectors: true
15 changes: 15 additions & 0 deletions deploy/k8s/monitoring/servicemonitor.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: mooncake-master
labels:
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/component: master
app.kubernetes.io/part-of: mooncake
spec:
selector:
matchLabels:
app.kubernetes.io/name: mooncake-master
endpoints:
- port: metrics
interval: 15s
33 changes: 33 additions & 0 deletions deploy/k8s/mooncake-master-deployment/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: mooncake-master-config
data:
master.yaml: |
rpc_port: 50051
rpc_thread_num: 4
rpc_address: "0.0.0.0"
rpc_conn_timeout_seconds: 0
rpc_enable_tcp_no_delay: true

enable_metric_reporting: true
metrics_port: 9003

enable_http_metadata_server: true
http_metadata_server_host: "0.0.0.0"
http_metadata_server_port: 8080

default_kv_lease_ttl: 5000
default_kv_soft_pin_ttl: 1800000
allow_evict_soft_pinned_objects: true
eviction_ratio: 0.05
eviction_high_watermark_ratio: 0.95

memory_allocator: "offset"
allocation_strategy: "random"

enable_snapshot: true
enable_snapshot_restore: true
snapshot_interval_seconds: 60
snapshot_retention_count: 3
snapshot_object_store_type: "local"
64 changes: 64 additions & 0 deletions deploy/k8s/mooncake-master-deployment/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: mooncake-master
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9003"
prometheus.io/path: "/metrics"
spec:
containers:
- name: mooncake-master
image: mooncake-master
Comment on lines +10 to +18
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

These commented-out lines are redundant because the Kustomization configuration is already set to automatically inject these labels and annotations into the pod template. Removing them will improve the clarity and maintainability of the manifest.

command: ["mooncake_master"]
args:
- "--config_path=/etc/mooncake/master.yaml"
env:
- name: MOONCAKE_SNAPSHOT_LOCAL_PATH
value: "/data/snapshots"
ports:
- name: rpc
containerPort: 50051
protocol: TCP
- name: metrics
containerPort: 9003
protocol: TCP
- name: metadata
containerPort: 8080
protocol: TCP
readinessProbe:
tcpSocket:
port: rpc
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: rpc
initialDelaySeconds: 10
periodSeconds: 15
resources:
requests:
cpu: "1"
memory: "1Gi"
limits:
cpu: "4"
memory: "4Gi"
volumeMounts:
- name: config
mountPath: /etc/mooncake
readOnly: true
- name: snapshots
mountPath: /data/snapshots
volumes:
- name: config
configMap:
name: mooncake-master-config
- name: snapshots
persistentVolumeClaim:
claimName: mooncake-master-snapshots
22 changes: 22 additions & 0 deletions deploy/k8s/mooncake-master-deployment/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: mooncake
resources:
- namespace.yaml
- configmap.yaml
- pvc.yaml
- deployment.yaml
- service.yaml

labels:
- pairs:
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/component: master
app.kubernetes.io/part-of: mooncake
includeTemplates: true
includeSelectors: true

images:
- name: mooncake-master
newName: quay.io/grpereir/mooncake-master
newTag: test
Comment on lines +21 to +22
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The image configuration uses a personal registry (quay.io/grpereir/...) and a test tag. For a shared project repository, it is recommended to use an organization-level registry or a placeholder, and a more stable tag like latest or a specific version variable.

4 changes: 4 additions & 0 deletions deploy/k8s/mooncake-master-deployment/namespace.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: mooncake
168 changes: 168 additions & 0 deletions deploy/k8s/mooncake-master-deployment/out.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
apiVersion: v1
kind: Namespace
metadata:
labels:
app.kubernetes.io/component: master
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/part-of: mooncake
name: mooncake
---
apiVersion: v1
data:
master.yaml: |
rpc_port: 50051
rpc_thread_num: 4
rpc_address: "0.0.0.0"
rpc_conn_timeout_seconds: 0
rpc_enable_tcp_no_delay: true

enable_metric_reporting: true
metrics_port: 9003

enable_http_metadata_server: true
http_metadata_server_host: "0.0.0.0"
http_metadata_server_port: 8080

default_kv_lease_ttl: 5000
default_kv_soft_pin_ttl: 1800000
allow_evict_soft_pinned_objects: true
eviction_ratio: 0.05
eviction_high_watermark_ratio: 0.95

memory_allocator: "offset"
allocation_strategy: "random"

enable_snapshot: true
enable_snapshot_restore: true
snapshot_interval_seconds: 60
snapshot_retention_count: 3
snapshot_object_store_type: "local"
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/component: master
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/part-of: mooncake
name: mooncake-master-config
namespace: mooncake
---
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: master
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/part-of: mooncake
name: mooncake-master
namespace: mooncake
spec:
ports:
- name: rpc
port: 50051
protocol: TCP
targetPort: rpc
- name: metadata
port: 8080
protocol: TCP
targetPort: metadata
- name: metrics
port: 9003
protocol: TCP
targetPort: metrics
selector:
app.kubernetes.io/component: master
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/part-of: mooncake
type: ClusterIP
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app.kubernetes.io/component: master
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/part-of: mooncake
name: mooncake-master-snapshots
namespace: mooncake
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: master
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/part-of: mooncake
name: mooncake-master
namespace: mooncake
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: master
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/part-of: mooncake
strategy:
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/component: master
app.kubernetes.io/name: mooncake-master
app.kubernetes.io/part-of: mooncake
spec:
containers:
- args:
- --config_path=/etc/mooncake/master.yaml
command:
- mooncake_master
env:
- name: MOONCAKE_SNAPSHOT_LOCAL_PATH
value: /data/snapshots
image: quay.io/grpereir/mooncake-master:test
livenessProbe:
initialDelaySeconds: 10
periodSeconds: 15
tcpSocket:
port: rpc
name: mooncake-master
ports:
- containerPort: 50051
name: rpc
protocol: TCP
- containerPort: 9003
name: metrics
protocol: TCP
- containerPort: 8080
name: metadata
protocol: TCP
readinessProbe:
initialDelaySeconds: 5
periodSeconds: 10
tcpSocket:
port: rpc
resources:
limits:
cpu: "4"
memory: 4Gi
requests:
cpu: "1"
memory: 1Gi
volumeMounts:
- mountPath: /etc/mooncake
name: config
readOnly: true
- mountPath: /data/snapshots
name: snapshots
volumes:
- configMap:
name: mooncake-master-config
name: config
- name: snapshots
persistentVolumeClaim:
claimName: mooncake-master-snapshots
Comment on lines +1 to +168
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This file appears to be a generated manifest (e.g., from kustomize build). Committing generated files to the repository is generally discouraged as it creates redundancy and can lead to configuration drift between the source YAMLs and this combined output. This file should be removed.

10 changes: 10 additions & 0 deletions deploy/k8s/mooncake-master-deployment/pvc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mooncake-master-snapshots
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Loading
Loading