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