沙龙活动 | 3月31日 京东、微博、华为实战专家与你共同讨论容器技术实际!
【编者的话】本文引见了一款处置Kubenetes运用本地开发痛点的工具——Skaffold,作者经过实践示例向大家展现了整个运用流程,值得参考。
在过去的几年,我曾经在本人合伙兴办的Node.js咨询公司RisingStack和GoDaddy的消费环境中大规模运用Kubernetes。其中一项最常见的应战是缺乏适宜的工具使开发者可以在本地而不是真实的Kubernetes集群开发他们的效劳。在实际中,这意味着开发者在脱分开发环境或许消费环境运转本地实例,这十分不理想:若不在本地运转那些效劳,调试将变得颇具应战。
就在几天前,我遇到了Skaffold,它是一款命令行工具,旨在促进Kubernetes运用的继续开发。在本文中,我将向你展现如何在Skaffold和Kubernetes的协助下开发一款Node.js app。
Skaffold是一款命令行工具,旨在促进Kubernetes运用的继续开发。你可以在本地迭代运用源码,然后将其部署到本地或许远程Kubernetes集群中。Skaffold会处置构建、上传和运用部署方面的任务流。它通用可以在自动化环境中运用,例如CI/CD流水线,以实施异样的任务流,并作为将运用迁移到消费环境时的工具。——Skaffold官方文档
在实际中,Skaffold可以:
探测代码的变更,自动构建,并上传部署
自动更新镜像的tag,因此你不在需求手动修正Kubernetes的manifest文件
一次性构建/部署/上传不同的运用,因此它关于微效劳异样完美适配
支持开发环境和消费环境,经过仅一次运转manifest,或许继续察看变更
安装Skaffold
先决条件:
确定曾经安装了Minikube——(Skaffold可以与任何Kubernetes集群任务,出于简便性,我选择了Minikube)
确定曾经安装了kubectl
确定你曾经安装了Docker
安装完上述依赖,拜访Skaffold发行版页面,下载适宜你的系统的版本,然后将其添加到PATH。
运用Skaffold开发一款Node.js运用
让我们经过开发一款复杂的Node.js运用入门——没有任何魔法,只是一个基于Express的傻瓜HTTP效劳器罢了:
const express = require('express')
const app = express()
app.get('/', function (req, res) {
res.json({
status: 'ok'
})
})
app.listen(3000, err => {
if (err) {
throw err
}
console.log('server is listening')
})
下一步,创立Dockerfile使运用容器化:
FROM node:8.10.0-alpine
WORKDIR /usr/src/app
COPY package.json .
COPY package-lock.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD node index.js
为了在Kubernetes中运转该运用,我们创立一个部署,并经过一个效劳来expose该部署。为完成该目的,我运用:
# k8s-app.yml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: node-app
spec:
replicas: 1
template:
metadata:
labels:
app: node-app
spec:
containers:
- name: node-app
image: IMAGE_NAME
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: node-app
labels:
app: node-app
spec:
selector:
app: node-app
ports:
- port: 3000
protocol: TCP
nodePort: 30003
type: LoadBalancer
如今你便可以经过docker build .命令创立该容器化运用了。但是,经过这种方式,你将仅构建镜像,它并不会在Kubernetes集群中运转该容器。这就需求Skaffold的协助了。
Skaffold运用YAML描画任务流。关于上述运用,该文件如下所示:
# skaffold.yaml
apiVersion: skaffold/v1alpha1
kind: Config
build:
artifacts:
- imageName: node-app
workspace: .
local: {}
deploy:
kubectl:
manifests:
- paths:
- k8s-app.yml
parameters:
IMAGE_NAME: node-app
正如你所看到的,配置文件有2个主要部分:build段和部署段。在build段中,我们可以定义想要创立的构建(绝大少数为Docker镜像),在deploy段中,我们可以定义想要在Kubernetes中看到的资源(例如效劳或部署)。
paths数组告知Skaffold,Kubernetes manifests的详细位置,经过参数,你可以将变量注入到manifest中。更多细节,请参考Skaffold标注示例。
经过上述步骤,你曾经完成Skaffold的配置了。假设你曾经运用Kubernetes部署运用,那么你可以复杂的复用你的Dockerfile和Kubernetes manifest,只需编写Skaffold的yaml文件即可。
运转Skaffold前,你需求先启动Minikube(运用minikube start),然后运转Skaffold:
skaffold dev
Starting build...
(责任编辑:admin)