Как использовать Kubernetes для развертывания Http-сервиса Nodejs

Kubernetes

сделать зеркало

mkdir nodeappk8s # 项目名称
cd nodeappk8s
npm init # 一路回车
vim app.js # 创建文件,内容在下面
npm i -S express # 安装依赖
# 在package.json文件中新增 {"start": "node app.js"}
npm start # 测试你的程序没有问题
vim Dockerfile # 创建Dockerfile, 内容在下面
docker build -t pengj/nodeappk8s:v1.0.0 . # 构建镜像, 请更改为自己账号名称
docker run -p 8888:8888 pengj/nodeappk8s:v1.0.0 # 测试你的镜像没有问题
# 这里需要在你的docker仓库新建镜像,之后执行下面的操作; 我的地址为: https://hub.docker.com/u/pengj
# 如果先登录再创建,则推送会报仓库不存在
docker login # 登录, 输入账号和密码
docker push pengj/nodeappk8s:v1.0.0 # 推送镜像

app.jsсодержание

var express = require('express');

var PORT = 8888;

var app = express();
app.get('/', function (req, res) {
  res.send('Hello world\n');
});

app.listen(PORT);
console.log('Running on http://localhost:' + PORT);

Dockerfileсодержание

#node镜像版本
FROM node:8-alpine
#声明作者
MAINTAINER Hapiman
#在image中创建文件夹
RUN mkdir -p /home/Service
#将该文件夹作为工作目录
WORKDIR /home/Service

# 将node工程下所有文件拷贝到Image下的文件夹中
COPY . /home/Service

#使用RUN命令执行npm install安装工程依赖库
RUN npm install

#暴露给主机的端口号
EXPOSE 8888
#执行npm start命令,启动Node工程
CMD [ "npm", "start" ]

развернуть образ

помещение

Если вы не построитеk8sкластер, вы можете обратиться ксборка k8s

развертывать

# 新增名字为`node-kube-apps`的namespace,内容在下面,在nodeapp-k8s.yaml会使用
kubectl apply -f node-kube-apps.yaml
# 在master机器上创建nodeapp-k8s.yaml,内容在下面,你需要更换`pengj/nodeappk8s:v1.0.0`为你自己的镜像仓库或者直接使用(省事)
vim nodeapp-k8s.yaml
# 部署配置, 如果多次部署会存在重复文件, 可以使用kubectl delete -f nodeapp-k8s.yaml删除
kubectl apply -f nodeapp-k8s.yaml
# 执行成功会输出
# deployment "nodeapp-deploy" created
# service "nodeapp-svc" created
# ingress "nodeapp-ingress" created

чек

# 可能会出现0/2, 1/2的情况, 等一会儿就OK
kubectl get deployments -n kube-apps |grep nodeapp
# nodeapp-deploy   2/2     2            2           109m
kubectl get svc -n kube-apps |grep nodeapp
# nodeapp-svc   NodePort   10.97.144.116   <none>        8080:31000/TCP   109m
kubectl get ingress -n kube-apps |grep nodeapp
# nodeapp-ingress   nodeappk8s.local             80      110m
kubectl get pods -n kube-apps |grep nodeapp
# nodeapp-deploy-5c84c9d676-m7zwc   1/1     Running   0          110m
# nodeapp-deploy-5c84c9d676-v8r6g   1/1     Running   0          110m

Два способа доступа:

1. Использовать видимый доступ по ip между кластерами, который можно использовать только на машинах, развернутых в кластере:curl http://10.97.144.116:8080/ping

2. Используйте общий доступ по ip, но вам нужно использовать файл конфигурации32000только порт

Подробный кодэто здесь

nodeapp-k8s.yamlВ файле определены 3 типа ресурсовDeployment,Service,Ingress;

Deploymentуже настроенreplicas: 2, указывая на то, что дваPOD,strategyРоллинг стратегия этоRollingUpdate,resourcesРегионы определяют лимиты ресурсов для POD черезlivenessProbeиreadinessProbeпроверка работоспособности установлена

kube-apps.yamlсодержание

apiVersion: v1
kind: Namespace
metadata:
   name: node-kube-apps
   labels:
     name: node-kube-apps

nodeapp-k8s.yamlсодержание

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nodeapp-deploy
  namespace: node-kube-apps
  labels:
    k8s-app: nodeappk8s
spec:
  replicas: 2
  revisionHistoryLimit: 10
  minReadySeconds: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        k8s-app: nodeappk8s
    spec:
      containers:
      - image: pengj/nodeappk8s:v1.0.0
        imagePullPolicy: Always
        name: nodeappk8s
        ports:
        - containerPort: 8888
          protocol: TCP
        resources:
          limits:
            cpu: 100m
            memory: 100Mi
          requests:
            cpu: 50m
            memory: 50Mi
        livenessProbe:
          tcpSocket:
            port: 8888
          initialDelaySeconds: 10
          timeoutSeconds: 3
        readinessProbe:
          httpGet:
            path: /
            port: 8888
          initialDelaySeconds: 10
          timeoutSeconds: 2

---
apiVersion: v1
kind: Service
metadata:
  name: nodeapp-svc
  namespace: node-kube-apps
  labels:
    k8s-app: nodeappk8s
spec:
  type: NodePort
  ports:
    - name: api
      port: 8888
      targetPort: 8888
      nodePort: 32000
  selector:
    k8s-app: nodeappk8s

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nodeapp-ingress
  namespace: node-kube-apps
spec:
  rules:
  - host: nodeappk8s.local
    http:
      paths:
      - path: /
        backend:
          serviceName: nodeapp-svc
          servicePort: api

Справочная документация

Научу вас писать сервисы golang для Kubernetes

Добро пожаловать на официальный аккаунт: Programmer's Financial Circle

обсуждение技术,金融,赚钱небольшой круг, чтобы предоставить вам наиболее有味道Контент обновляется ежедневно!