├── .gitignore ├── Dockerfile ├── k8s ├── service.yml ├── hpa.yml └── deployment.yml ├── README.md ├── index.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .idea -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:alpine 2 | 3 | RUN mkdir -p /usr/src/app 4 | 5 | WORKDIR /usr/src/app 6 | 7 | ADD index.js ./ 8 | 9 | ADD package.json ./ 10 | 11 | RUN npm install 12 | 13 | CMD ["npm", "start"] -------------------------------------------------------------------------------- /k8s/service.yml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: node-example 5 | labels: 6 | app: node-example 7 | spec: 8 | selector: 9 | app: node-example 10 | ports: 11 | - port: 3000 12 | protocol: TCP 13 | nodePort: 30001 14 | type: LoadBalancer -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Node.js application for tutorial series 2 | 3 | Part-1 => https://blog.kloia.com/deploy-auto-scalable-node-js-application-on-kubernetes-cluster-part-1-f40e622f2337 4 | 5 | Part-2 => https://blog.kloia.com/deploy-auto-scalable-node-js-application-on-kubernetes-cluster-part-2-d41164d72dcb 6 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const http = require('http'); 2 | 3 | const port = process.env.PORT || 3000; 4 | 5 | const server = http.createServer((req, res) => { 6 | res.statusCode = 200; 7 | res.setHeader('Content-Type', 'text/plain'); 8 | res.end('Hello World\n'); 9 | }); 10 | 11 | server.listen(port, () => { 12 | console.log(`Server running on port: ${port}`); 13 | }); -------------------------------------------------------------------------------- /k8s/hpa.yml: -------------------------------------------------------------------------------- 1 | apiVersion: autoscaling/v1 2 | kind: HorizontalPodAutoscaler 3 | metadata: 4 | annotations: 5 | name: node-example 6 | namespace: default 7 | spec: 8 | maxReplicas: 5 9 | minReplicas: 1 10 | scaleTargetRef: 11 | apiVersion: extensions/v1 12 | kind: Deployment 13 | name: node-example 14 | targetCPUUtilizationPercentage: 1 15 | -------------------------------------------------------------------------------- /k8s/deployment.yml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: node-example 5 | spec: 6 | replicas: 1 7 | template: 8 | metadata: 9 | labels: 10 | app: node-example 11 | spec: 12 | containers: 13 | - name: node-example 14 | image: huseyinbabal/node-example 15 | imagePullPolicy: Always 16 | ports: 17 | - containerPort: 3000 18 | resources: 19 | limits: 20 | cpu: "0.5" 21 | requests: 22 | cpu: "0.25" 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kubernetes-node-example", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/huseyinbabal/kubernetes-node-example.git" 12 | }, 13 | "author": "", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/huseyinbabal/kubernetes-node-example/issues" 17 | }, 18 | "homepage": "https://github.com/huseyinbabal/kubernetes-node-example#readme" 19 | } 20 | --------------------------------------------------------------------------------