# 对应文档:docs/04-11-nodejs-副本与滚动发布.md # 累积:04-10 + replicas: 3 + RollingUpdate(maxSurge:1 maxUnavailable:0) apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nodejs-demo-data namespace: default spec: accessModes: - ReadWriteOnce storageClassName: local-path resources: requests: storage: 1Gi --- apiVersion: v1 kind: ConfigMap metadata: name: nodejs-demo-config namespace: default data: APP_MSG: "Hello from ConfigMap" --- apiVersion: apps/v1 kind: Deployment metadata: name: nodejs-demo namespace: default spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 0 selector: matchLabels: app: nodejs-demo template: metadata: labels: app: nodejs-demo spec: nodeSelector: kubernetes.io/hostname: ylc62 securityContext: fsGroup: 1000 containers: - name: nodejs-demo image: node:18.20-alpine imagePullPolicy: IfNotPresent securityContext: allowPrivilegeEscalation: false runAsNonRoot: true runAsUser: 1000 readOnlyRootFilesystem: true env: - name: APP_MSG valueFrom: configMapKeyRef: name: nodejs-demo-config key: APP_MSG command: - node - "-e" - | const http=require('http'); const msg=process.env.APP_MSG||'no env'; http.createServer((q,s)=>s.end(msg)).listen(8080); ports: - containerPort: 8080 resources: requests: cpu: "50m" memory: "64Mi" limits: cpu: "500m" memory: "256Mi" livenessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 3 periodSeconds: 10 readinessProbe: httpGet: path: / port: 8080 initialDelaySeconds: 2 periodSeconds: 5 volumeMounts: - name: tmp mountPath: /tmp - name: data mountPath: /data volumes: - name: tmp emptyDir: {} - name: data persistentVolumeClaim: claimName: nodejs-demo-data --- apiVersion: v1 kind: Service metadata: name: nodejs-demo namespace: default spec: selector: app: nodejs-demo ports: - port: 80 targetPort: 8080 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nodejs-demo namespace: default annotations: traefik.ingress.kubernetes.io/router.entrypoints: web spec: rules: - host: app.example.local http: paths: - path: /api pathType: Prefix backend: service: name: nodejs-demo port: number: 80