使用Jenkins和Docker在Kubernetes上配置Node.js

时间:2019-05-10 06:38:37

标签: docker jenkins kubernetes

我正在尝试将我的Node.js应用配置为使用Jenkins在Kubernetes上运行。

我的docker文件正在运行,我已经在本地对其进行了测试。

但是当我为Kubernetes配置项目时,我发现服务器无法完成请求。

我的猜测是端口之间的指向不正确。

这是我的项目结构:

.
├── Dockerfile
├── Jenkinsfile
├── app.js
├── bin
│   └── www
├── config
│   ├── config.js
│   ├── createConfig.js
│   ├── domains.js
│   ├── routes.js
│   └── service.js
├── dive.log
├── k8s
│   ├── ingress
│   │   └── ingress.yaml
│   ├── pod
│   │   └── pod.yaml
│   ├── production
│   │   └── production.yaml
│   ├── rbac
│   │   └── fabric8-rbac.yaml
│   └── services
│       └── backend.yaml
├── package-lock.json
├── package.json
├── public
│   ├── icons
│   │   ├── add-thumbnail-placeholder.svg
│   │   ├── baseline-change_history-24px.svg
│   │   └── spartan-logo.png
│   ├── script
│   │   ├── app-view.js
│   │   ├── create-package.js
│   │   ├── sidebar.js
│   │   └── tag-input.js
│   └── stylesheets
│       ├── admin-base.css
│       ├── app.css
│       ├── base.css
│       ├── bootstrap
│       │   ├── css
│       │   │   ├── bootstrap-theme.css
│       │   │   └── bootstrap.css
│       │   ├── fonts
│       │   │   ├── glyphicons-halflings-regular.eot
│       │   │   ├── glyphicons-halflings-regular.svg
│       │   │   ├── glyphicons-halflings-regular.ttf
│       │   │   ├── glyphicons-halflings-regular.woff
│       │   │   └── glyphicons-halflings-regular.woff2
│       │   └── js
│       │       ├── bootstrap.js
│       │       ├── bootstrap.min.js
│       │       └── npm.js
│       ├── component
│       │   ├── buttons.css
│       │   ├── create-components.css
│       │   ├── create-content.css
│       │   └── tag-input.css
│       ├── create-package.css
│       ├── login.css
│       ├── main.css
│       ├── material.css
│       ├── packages.css
│       ├── sidebar.css
│       ├── standard-list.css
│       ├── statistics.css
│       └── style.css
├── scratch
│   ├── access_token
│   ├── email
│   ├── image
│   ├── name
│   ├── refresh_token
│   ├── scope
│   ├── surname
│   └── userToken
└── src
    ├── Core
    │   ├── Abstract
    │   │   ├── Domain.js
    │   │   └── Service.js
    │   ├── Common
    │   │   └── Base.js
    │   ├── Database
    │   │   └── SQLiteDatabase.js
    │   ├── Factory
    │   │   ├── DomainFactory.js
    │   │   └── ServiceFactory.js
    │   ├── Observer
    │   │   └── EventObserver.js
    │   └── RequestHandler
    │       └── RequestHandler.js
    ├── Models
    │   ├── Domain
    │   │   ├── Component
    │   │   │   └── NameComponentDomain.js
    │   │   ├── Create
    │   │   │   ├── CreateDomain.js
    │   │   │   ├── DeleteDomain.js
    │   │   │   ├── EditDomain.js
    │   │   │   └── ReleaseDomain.js
    │   │   ├── List
    │   │   │   └── ListDomain.js
    │   │   ├── Login
    │   │   │   └── LoginDomain.js
    │   │   ├── Search
    │   │   │   └── SearchDomain.js
    │   │   └── Statistics
    │   │       └── StatisticsDomain.js
    │   ├── Entity
    │   │   ├── Admin.js
    │   │   ├── Plan.js
    │   │   └── Request.js
    │   ├── Mapper
    │   ├── Repository
    │   │   └── StorageRepository.js
    │   └── Service
    │       ├── BaseService.js
    │       ├── CreateService.js
    │       └── GetService.js
    └── presentation
        ├── ObjectMapper
        ├── view
        │   ├── app.pug
        │   ├── appsku.pug
        │   ├── component
        │   │   ├── addEquipmentTags.pug
        │   │   ├── addTags.pug
        │   │   ├── description.pug
        │   │   ├── imageLoader.pug
        │   │   ├── name.pug
        │   │   ├── plan-cell.pug
        │   │   └── title.pug
        │   ├── create-package.pug
        │   ├── create.pug
        │   ├── error.pug
        │   ├── exercise.pug
        │   ├── index.pug
        │   ├── login.pug
        │   ├── main
        │   │   ├── baseLogin.pug
        │   │   └── baseNonLoged.pug
        │   ├── navigation
        │   │   └── navigation.js
        │   ├── nutrition-plan.pug
        │   ├── package.pug
        │   ├── statistics.pug
        │   ├── tag.pug
        │   ├── workout-plan.pug
        │   └── workout.pug
        └── viewmodel
            ├── Component
            │   └── Name.js
            ├── app.js
            ├── appsku.js
            ├── create-app.js
            ├── create-package.js
            ├── exercise.js
            ├── index.js
            ├── login.js
            ├── nutrition-plan.js
            ├── package.js
            ├── statistics.js
            ├── tag.js
            ├── workout-plan.js
            └── workout.js

这是正在使用的docker文件:

FROM node:8

WORKDIR /home/node/app

COPY app.js /home/node/app
COPY bin /home/node/app/bin
COPY config /home/node/app/config
COPY public /home/node/app/public
COPY scratch /home/node/app/scratch
COPY src /home/node/app/src
COPY package.json /home/node/app
COPY package-lock.json /home/node/app

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

EXPOSE 5000
CMD [ "npm", "start" ]

入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: spartan-admin-frontend-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "spartan-admin-frontend-static-ip"
spec:
  backend:
    serviceName: spartan-admin-frontend-service
    servicePort: 80

吊舱:

apiVersion: v1
kind: Pod
labels:
  component: ci
spec:
  # Use service account that can deploy to all namespaces
  serviceAccountName: default
  # Use the persisnte volume
  containers:
  - name: gcloud
    image: gcr.io/cloud-builders/gcloud
    command:
    - cat
    tty: true
  - name: kubectl
    image: gcr.io/cloud-builders/kubectl
    command:
    - cat
    tty: true

部署:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: spartan-admin-frontend-production
spec:
  replicas: 1
  template:
    metadata:
      name: backend
      labels:
        app: spartan-admin-frontend
        role: backend
        env: production
    spec:
      containers:
        - name: backend
          image: gcr.io/cloud-solutions-images/spartan-admin-frontend:1.0.0
          resources:
            limits:
              memory: "50Mi"
              cpu: "200m"
          imagePullPolicy: Always
          ports:
          - name: backend
            containerPort: 5000

服务:

kind: Service
apiVersion: v1
metadata:
  name: spartan-admin-frontend-service
spec:
  ports:
  - name: http
    port: 80
    targetPort: 5000
    protocol: TCP
    nodePort: 31220
  selector:
    role: backend
    app: spartan-admin-frontend
  type: NodePort # In order to make the ingress work it needs to be the NodePort
status:
  loadBalancer: {} # Add the loadbalancer

当我描述吊舱时,或者如果我得到事件,我都不会得到任何警告或错误。

0 个答案:

没有答案