apiVersion: apps/v1 kind: Deployment metadata: name: momme-world labels: app: momme-world spec: replicas: 1 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 selector: matchLabels: app: momme-world template: metadata: labels: app: momme-world spec: securityContext: runAsNonRoot: true runAsUser: 101 fsGroup: 101 seccompProfile: type: RuntimeDefault containers: - name: nginx image: docker.io/nginxinc/nginx-unprivileged:1.31.6-alpine@sha256:884e0b7f42f303641b0f4e78755aea647521dca0b89ca3be7992ad78b5c07434 ports: - name: http containerPort: 8080 volumeMounts: - name: site mountPath: /var/www/html readOnly: true - name: config mountPath: /etc/nginx/conf.d/default.conf subPath: nginx.conf readOnly: true - name: tmp mountPath: /tmp readinessProbe: httpGet: path: /hello.txt port: http periodSeconds: 10 livenessProbe: httpGet: path: /hello.txt port: http initialDelaySeconds: 5 periodSeconds: 20 resources: requests: cpu: 10m memory: 32Mi limits: memory: 64Mi securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: drop: ["ALL"] # the telnet shell — same commands.json as the website, stdlib python - name: telnet image: docker.io/library/python:3.14-alpine@sha256:7f2ec713f0436c59df2362d973b6a05af9e87ba78f0e94f5245c302984a7a1fd command: ["python", "-u", "/app/telnet.py"] env: - name: TELNET_PORT value: "2323" ports: - name: telnet containerPort: 2323 volumeMounts: - name: telnet mountPath: /app/telnet.py subPath: telnet.py readOnly: true - name: site mountPath: /app/commands.json subPath: commands.json readOnly: true startupProbe: tcpSocket: port: telnet failureThreshold: 30 periodSeconds: 2 resources: requests: cpu: 10m memory: 48Mi limits: memory: 96Mi securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: drop: ["ALL"] volumes: - name: site configMap: name: site - name: config configMap: name: config - name: telnet configMap: name: telnet - name: tmp emptyDir: {}