provisioning-code/k8s/mcp-server-deployment.yaml

176 lines
4.9 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mcp-server
component: provisioning-platform
name: mcp-server
spec:
replicas: 1
revisionHistoryLimit: 5
selector:
matchLabels:
app: mcp-server
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
annotations:
prometheus.io/path: /metrics
prometheus.io/port: '8888'
prometheus.io/scrape: 'true'
labels:
app: mcp-server
component: provisioning-platform
spec:
affinity:
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- orchestrator
topologyKey: kubernetes.io/hostname
weight: 50
containers:
- env:
- name: MCP_SERVER_MODE
value: kubernetes
- name: MCP_SERVER_HOST
value: 0.0.0.0
- name: MCP_SERVER_PORT
value: '8888'
- name: MCP_SERVER_PROTOCOL
valueFrom:
configMapKeyRef:
key: protocol
name: mcp-server-config
- name: MCP_SERVER_ORCHESTRATOR_URL
valueFrom:
configMapKeyRef:
key: orchestrator_url
name: mcp-server-config
- name: MCP_SERVER_CONTROL_CENTER_URL
valueFrom:
configMapKeyRef:
key: control_center_url
name: mcp-server-config
- name: MCP_SERVER_ENABLE_TOOLS
valueFrom:
configMapKeyRef:
key: enable_tools
name: mcp-server-config
- name: MCP_SERVER_ENABLE_RESOURCES
valueFrom:
configMapKeyRef:
key: enable_resources
name: mcp-server-config
- name: MCP_SERVER_ENABLE_PROMPTS
valueFrom:
configMapKeyRef:
key: enable_prompts
name: mcp-server-config
- name: MCP_SERVER_MAX_CONCURRENT_TOOLS
valueFrom:
configMapKeyRef:
key: max_concurrent_tools
name: mcp-server-config
- name: MCP_SERVER_MAX_RESOURCE_SIZE
valueFrom:
configMapKeyRef:
key: max_resource_size
name: mcp-server-config
- name: MCP_SERVER_LOG_LEVEL
valueFrom:
configMapKeyRef:
key: log_level
name: mcp-server-config
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: provisioning-mcp-server:latest
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
httpGet:
path: /health
port: 8888
initialDelaySeconds: 30
periodSeconds: 15
timeoutSeconds: 5
name: mcp-server
ports:
- containerPort: 8888
name: http
protocol: TCP
- containerPort: 8889
name: metrics
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /ready
port: 8888
initialDelaySeconds: 20
periodSeconds: 5
timeoutSeconds: 3
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
volumeMounts:
- mountPath: /etc/provisioning/mcp-server
name: mcp-server-config
readOnly: true
- mountPath: /var/log/provisioning/mcp-server
name: mcp-server-logs
initContainers:
- command:
- sh
- -c
- until wget -q http://orchestrator:9090/health || true; do echo waiting; sleep 2; done
image: busybox:1.35
imagePullPolicy: IfNotPresent
name: wait-for-orchestrator
restartPolicy: Always
serviceAccountName: mcp-server
terminationGracePeriodSeconds: 20
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
volumes:
- configMap:
defaultMode: 420
name: mcp-server-config
name: mcp-server-config
- name: mcp-server-logs
persistentVolumeClaim:
claimName: mcp-server-logs