内容简介:今天给大家介绍下我们的程序是如何部署到阿里云Kubernetes(托管版)的我们使用三种开发语言,分别是:js, python, golang.三种语言的部署有一些差别,但主要步骤都是一样的.我们今天先介绍下js(前端)的部署方式.核心的部署步骤如下:
今天给大家介绍下我们的程序是如何部署到阿里云Kubernetes(托管版)的
我们使用三种开发语言,分别是:js, python, golang.三种语言的部署有一些差别,但主要步骤都是一样的.我们今天先介绍下js(前端)的部署方式.
核心的部署步骤如下:
- Git Clone
- 编译与Build镜像
- 部署到Kubernetes,通过Helm或者Deployment
配置Kubernetes
阿里云的Kuberntes支持三种模式:
- 自部署,阿里云仅提供一键部署但不提供管理和后续维护.要求用户水平较高
- 托管模式,阿里云提供一键部署,并负责管理
Master节点.这种模式用户仅需要管理Node节点,基本不需要担心节点挂了,并且可以自行确定Node节点要求的性能.后续升级也可以交给阿里云负责 - serverless,终极模式,啥都不需要管理,只需要把镜像提交上去,并确定资源需求即可.不需要维护任何服务器.
上面的三种模式我们选择了第2种,因为托管模式可以提供用户足够的自由度又不需要要求太高的管理水平.当然对于三种模式 CodeRun 都是支持的.我们来看下具体如何配置集群.
获取KubeConfig
不管哪种集群创建后都可以在控制台获取到 KubeConfig 配置,在阿里云控制台点击某个集群后可以看到下图 KubeConfig :
aliyun_kubeconfig.png
我们需要三个信息:
- 集群地址,阿里云为每个Kubernetes集群都分配了一个外部地址(如果是自部署模式好像需要自己配置)
- 证书,集群的访问证书
-
Key,证书对应的Key,相当与密钥
有了这三个信息我们就可以配置集群
配置CodeRun的Kubernetes集群
在 CodeRun 控制台的 整合 -> Kubernetes ,点击右边的 添加 按钮选择 证书 模式,如图:
kubernetes_conf2.png
- 其中上图中的
名称是你可以自行定义的名称,这个名称可以方便后续在Pipeline中使用,所以最好取一个好记的名称(这里使用myk8s).
Pipeline 可以参考
添加仓库
在 CodeRun 控制台的 Repo|仓库 ,点击 添加仓库 .在右侧选择代码仓库,(如果不是当前用户的 Git 仓库,参见 添加Git配置 ),如下图:
add_repo1.png
选择 Build 类型
add_repo2_type.png
三种类型分别是:
-
coderun.yml,使用代码仓库中的coderun.yml文件进行构建 -
Dockerfile,使用代码仓库中的Dockerfile作为镜像的构建 - 模板,和上述的
Dockerfile类似,只是使用CodeRun内置的各语言Dockerfile模板
我们这里选择使用 模板 创建,选择 node 语言. Dockerfile 内容预览如下:
FROM node:8.0-alpine AS builder WORKDIR /app COPY package.json /app # Creating tar of productions dependencies RUN npm install --production && cp -rp ./node_modules /tmp/node_modules # Installing all dependencies RUN npm install # Copying application code COPY . /app # Running tests RUN npm test FROM node AS runner EXPOSE 3000 WORKDIR /app # Adding production dependencies to image COPY --from=builder /tmp/node_modules /app/node_modules # Copying application code COPY . /app CMD npm start
上述模板是采用 Dockerfile 的多阶段模式进行处理的,分成两大部分:
- 第一部分是安装依赖,然后进行
npm test - 第二部分是复制第一部分的
node_models,并启动npm start
因为我们的代码中没有测试所以可以注释掉 npm test 这段,另外我们代码使用 vue-cli3 所以 npm start 修改成 npm run serve ,
最后如下:
FROM node:8.0-alpine AS builder WORKDIR /app COPY package.json /app # Creating tar of productions dependencies RUN npm install && cp -rp ./node_modules /tmp/node_modules FROM node AS runner EXPOSE 3000 WORKDIR /app # Adding production dependencies to image COPY --from=builder /tmp/node_modules /app/node_modules # Copying application code COPY . /app CMD npm run serve
点击 创建 后,我们可以看到添加好的仓库:
repo_list.png
切换到Yaml
点击 coderuntop/startup 后我们可以看到 Pipeline 页面,如图:
repo_pipeline.png
因为我比较习惯使用 Yaml 配置,所以点击上图右边的 Yaml 选项,并且确定进行 覆盖 后可以看到 Yaml 配置:
repo_pipeline_yml.png
配置如下:
steps:
docker:
image: crun/docker
registry_name: coderun
repo_name: hellwen/startup
dockerfile_content: |
FROM node:8.0-alpine AS builder
WORKDIR /app
COPY package.json /app
# Creating tar of productions dependencies
RUN npm install && cp -rp ./node_modules /tmp/node_modules
FROM node AS runner
EXPOSE 8080
WORKDIR /app
# Adding production dependencies to image
COPY --from=builder /tmp/node_modules /app/node_modules
# Copying application code
COPY . /app
CMD npm run serve
context: .
tags: latest
其中, repo_name 配置的名称需要进行修改,如上已经修改成: coderuntop/startup 修改成 用户名/项目名 格式,其中用户名就是
你当前用户的名称,可以通过控制台的右上角看到.
配置好我们就可以进行下测试了,选择仓库的分支,因为这个项目我把前端代码写在 node 分支中,所以这里直接点击 node 分支的 Build 按钮
repo_branch.png
点击后在 Build 页面可以看到正在跑的 Build 任务:
repo_build_running.png
Build 右边的绿色打勾图标说明这次 Build 成功,我们的 Dockerfile 是正常的.
点击进入某个 Build 任务后可以看到对应的 Build 日志:
repo_build_log.png
增加部署步骤
增加的部署配置如下:
deploy:
image: crun/kube
cluster_name: myk8s
namespace: default
template_content: |
apiVersion: apps/v1
kind: Deployment
metadata:
name: startup-node
spec:
replicas: 1
selector:
matchLabels:
app: startup-node
template:
metadata:
labels:
app: startup-node
spec:
containers:
- name: startup-node
image: {{CR_IMAGE}}
- 其中
crun/kube是官方提供的k8s插件 -
cluster_name这里指定的是上面配置的k8s集群,我们命名为:myk8s -
namespace指定k8s集群的命名空间 -
template_content指定k8s能有效识别的yaml配置(可以包含:service和deployment等) -
image中我们使用了一个变量{{CR_IMAGE}}这个变量会自动从crun/docker获取到build后的完整镜像地址
增加部署步骤后我们再 Build 一次,我们可以看到我们的部署增加了一个 Log :
repo_build_log2.png
部署后的 k8s 效果:
$ kubectl get deployment startup-node NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE startup-node 1 1 1 1 3h
$ kubectl get deployment startup-node -o=custom-columns=NAME:.metadata.name,IMAGE:.spec.template.spec.containers[0].image,STATUS:.status.availableReplicas NAME IMAGE STATUS startup-node r.crun.top/hellwen/startup:latest 1
要使用 kubectl 命令连接阿里云需要把前面的 KubeConfig 配置到当前 Shell 的 .kube/config 文件中,至于如何配置可以参考 kubernetes.io
上面的结果我们可以看到 k8s 上的运行镜像被替换成 r.crun.top/hellwen/startup:latest 这样我们就省去了填写镜像地址的麻烦.
到这里我们的部署就完成了.比起自己搭建 Jenkins 是不是方便不少.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用Docker容器化部署实践之Django应用部署(一)
- syncd的使用和部署
- Eureka使用及集群部署
- 如何使用 Docker 部署容器
- 使用Docker部署RabbitMQ集群
- 开始使用 Docker 线上部署
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Building Social Web Applications
Gavin Bell / O'Reilly Media / 2009-10-1 / USD 34.99
Building a social web application that attracts and retains regular visitors, and gets them to interact, isn't easy to do. This book walks you through the tough questions you'll face if you're to crea......一起来看看 《Building Social Web Applications》 这本书的介绍吧!