使用CODERUN部署阿里云KUBERNETES

简介: 今天给大家介绍下我们的程序是如何部署到阿里云Kubernetes(托管版)

今天给大家介绍下我们的程序是如何部署到阿里云Kubernetes(托管版)

我们使用三种开发语言,分别是:node, python, golang.三种语言的部署有一些差别,但主要步骤都是一样的.我们今天先介绍下node(前端)的部署方式.

核心的部署步骤如下:

  1. Git Clone
  2. 编译与Build镜像
  3. 部署到Kubernetes,通过Helm或者Deployment

配置Kubernetes

阿里云的Kuberntes支持三种模式:

  1. 自部署,阿里云仅提供一键部署但不提供管理和后续维护.要求用户水平较高
  2. 托管模式,阿里云提供一键部署,并负责管理Master节点.这种模式用户仅需要管理Node节点,基本不需要担心节点挂了,并且可以自行确定Node节点要求的性能.后续升级也可以交给阿里云负责
  3. serverless,终极模式,啥都不需要管理,只需要把镜像提交上去,并确定资源需求即可.不需要维护任何服务器.

上面的三种模式我们选择了第2种,因为托管模式可以提供用户足够的自由度又不需要要求太高的管理水平.当然对于三种模式CodeRun都是支持的.我们来看下具体如何配置集群.

获取KubeConfig

不管哪种集群创建后都可以在控制台获取到KubeConfig配置,在阿里云控制台点击某个集群后可以看到下图KubeConfig

aliyun_kubeconfig

我们需要三个信息:

  1. 集群地址,阿里云为每个Kubernetes集群都分配了一个外部地址(如果是自部署模式好像需要自己配置)
  2. 证书,集群的访问证书
  3. Key,证书对应的Key,相当与密钥

有了这三个信息我们就可以配置集群

配置CodeRun的Kubernetes集群

CodeRun控制台的整合->Kubernetes,点击右边的添加按钮选择证书模式,如图:

kubernetes_conf2

  • 其中上图中的名称是你可以自行定义的名称,这个名称可以方便后续在Pipeline中使用,所以最好取一个好记的名称(这里使用myk8s).

Pipeline可以参考

添加仓库

CodeRun控制台的Repo|仓库,点击添加仓库.在右侧选择代码仓库,(如果不是当前用户的Git仓库,参见添加Git配置),如下图:

add_repo1

选择Build类型

add_repo2_type

三种类型分别是:

  1. coderun.yml,使用代码仓库中的coderun.yml文件进行构建
  2. Dockerfile,使用代码仓库中的Dockerfile作为镜像的构建
  3. 模板,和上述的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的多阶段模式进行处理的,分成两大部分:

  1. 第一部分是安装依赖,然后进行npm test
  2. 第二部分是复制第一部分的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

切换到Yaml

点击coderuntop/startup后我们可以看到Pipeline页面,如图:

repo_pipeline

因为我比较习惯使用Yaml配置,所以点击上图右边的Yaml选项,并且确定进行覆盖后可以看到Yaml配置:

repo_pipeline_yml

配置如下:

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

点击后在Build页面可以看到正在跑的Build任务:

repo_build_running

Build右边的绿色打勾图标说明这次Build成功,我们的Dockerfile是正常的.

点击进入某个Build任务后可以看到对应的Build日志:

repo_build_log

增加部署步骤

增加的部署配置如下:

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是官方提供的kubernetes插件
  • cluster_name这里指定的是上面配置的kubernetes集群,我们命名为:myk8s
  • namespace指定kubernetes集群的命名空间
  • template_content指定kubernetes能有效识别的yaml配置(可以包含:servicedeployment等)
  • image中我们使用了一个变量{{CR_IMAGE}}这个变量会自动从crun/docker获取到build后的完整镜像地址

增加部署步骤后我们再Build一次,我们可以看到我们的部署增加了一个Log

repo_build_log2

部署后的kubernetes效果:

$ 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
上面的结果我们可以看到kubernetes上的运行镜像被替换成r.crun.top/hellwen/startup:latest这样我们就省去了填写镜像地址的麻烦.

到这里我们的部署就完成了.比起自己搭建Jenkins是不是方便些

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
5天前
|
Java 应用服务中间件 Linux
在阿里云服务器上部署Tomcat详细图文详解
本文介绍了在阿里云服务器上安装和配置JDK和Tomcat的步骤。首先,需要注册阿里云账号并进行实名认证,然后购买并设置服务器。接着,通过File Zilla连接服务器,创建Java和Tomcat的安装目录,并将JDK和Tomcat的tar.gz文件上传到服务器,解压并重命名。之后,配置JDK的环境变量,将catalina.sh复制到/etc/init.d/目录下,并修改相关配置。最后,启动Tomcat并配置安全组规则,确保可以通过公网访问。
|
5天前
|
弹性计算 Java Linux
阿里云服务器搭建部署宝塔详细流程
该内容是一个阿里云服务器和域名的配置指南。首先,需注册阿里云账号并进行企业实名认证。接着,选购服务器如2核2G1兆的Linux系统,并购买域名。完成域名备案后,进行域名解析和ICP备案。然后,通过远程连接登录服务器,重置密码,安装宝塔面板。在安全组中开启宝塔面板随机生成的端口。最后,登录宝塔面板安装LNMP环境,配置数据库如MySQL和Redis,部署JDK、Tomcat,上传前端和后端项目以实现上线。
|
6天前
|
弹性计算 JavaScript Java
阿里云服务器搭建部署宝塔详细流程
以下是内容的摘要: 本文主要介绍了在阿里云上创建和配置服务器环境的步骤,包括注册阿里云账号、实名认证、购买和设置服务器、域名的获取与备案、以及使用宝塔面板安装和配置环境。首先,用户需要注册阿里云账号并进行实名认证,选择合适的服务器配置。接着,购买服务器后,要准备并备案域名,以便通过友好的网址访问网站。在服务器上安装宝塔面板,可以方便地管理和配置LAMP/LNMP/Tomcat/Node.js等应用环境。完成这些步骤后,用户还需要在宝塔面板中安装MySQL、Redis等数据库,部署Java或Vue项目,并配置相关端口。最后,将前端项目打包上传至服务器,并设置站点,即可实现网站的上线。
|
6天前
|
应用服务中间件 Linux 开发工具
如何在阿里云服务器快速搭建部署Nginx环境
以下是内容的摘要: 本文档主要介绍了在阿里云上购买和配置服务器的步骤,包括注册阿里云账号、实名认证、选择和购买云服务器、配置安全组、使用Xshell和Xftp进行远程连接和文件传输,以及安装和配置Nginx服务器的过程。在完成这些步骤后,你将能够在服务器上部署和运行自己的网站或应用。
|
8天前
|
NoSQL 关系型数据库 MySQL
阿里云服务器部署项目流程
本文主要讲解阿里云服务器的部署,如何选择配置等
|
11天前
|
Java 应用服务中间件 Linux
阿里云服务器部署多个tomcat
阿里云服务器部署多个tomcat
|
9天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
47 17
|
21天前
|
Kubernetes Ubuntu 应用服务中间件
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
Ubuntu 22.04 利用kubeadm方式部署Kubernetes(v1.28.2版本)
90 0
|
22天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
15 0
|
24天前
|
人工智能 监控 Serverless
如何基于ACK Serverless快速部署AI推理服务
通过上述步骤,可以在ACK Serverless上快速部署AI推理服务,实现高可用、弹性扩展的服务架构。
19 1