apiVersion: apps/v1 kind: Deployment metadata: name: nginx-nodeport labels: app: nginx-nodeport spec: replicas: 1 selector: matchLabels: app: nginx-nodeport template: metadata: labels: app: nginx-nodeport spec: hostNetwork: false dnsPolicy: ClusterFirst # Prefer worker nodes only (not master nodes) affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: - key: node-role.kubernetes.io/master operator: DoesNotExist - weight: 50 preference: matchExpressions: - key: node-role.kubernetes.io/control-plane operator: DoesNotExist containers: - name: nginx image: nginx:alpine ports: - containerPort: 8080 volumeMounts: - name: html-content mountPath: /usr/share/nginx/html - name: nginx-config mountPath: /etc/nginx/conf.d resources: requests: memory: "64Mi" cpu: "100m" limits: memory: "128Mi" cpu: "200m" livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 5 periodSeconds: 5 volumes: - name: html-content configMap: name: nginx-nodeport-content - name: nginx-config configMap: name: nginx-nodeport-nginx-config