在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

实操教程 | 如何将一个 k3s 集群集成到 Gitlab 项目中

  • 2020-05-16
  • 本文字数:2238 字

    阅读完需:约 7 分钟

实操教程 | 如何将一个k3s集群集成到Gitlab项目中

关于 k3s

K3s 是由 Rancher Labs 发布的一个轻量级Kubernetes发行版,这款产品专为在资源有限的环境中运行 Kubernetes 的研发和运维人员设计。


它是经过认证的 Kubernetes 发行版,其最低的系统要求为:


  • 系统内核版本:Linux 3.10+

  • 每个 Server 最低 RAM 要求:512 MB

  • 每个节点 RAM 最低要求:75MB

  • 磁盘空间最低要求:200 MB

  • 支持的硬件架构:x86_64、 ARMv7、 ARM64


这些低配置的要求使得 k3s 非常适用于 IoT 相关的场景。

在 GitLab 中创建项目

在安装 k3s 之前,我们先在 Gitlab 上创建一个新的项目,称为 api。



创建完成之后,我们点击侧边菜单栏里的 Operations,并在下级菜单中选择 Kubernetes。



我们现在有两个选项:


  • 在 GKE 上创建一个新的 Kubernetes 集群

  • 导入现有 Kubernetes 集群的配置(无论这一集群在何处创建均可导入)


注意:在当前版本的 GitLab 中,新集群的创建仅限于 GKE。



我们选择【Add existing cluster】这一选项卡。



在这一步中,我们需要填写几个字段来提供我们需要集成的集群配置。一直打开这个选项卡,暂时无需理会。现在,我们先去创建一个全新的 Kubernetes 集群。

创建一个 k3s 集群

我们现在将基于 k3s 启动一个 Kubernetes 集群。为什么是 k3s 呢?因为我想要表明设置它是多么容易。为了让步骤一目了然,我们仅仅设置一个节点的集群。


我已经配置了名为 node1 的 Ubuntu 18.04 服务器,我们在该主机上获得了一个 shell 之后,只需要运行以下命令来安装 k3s,这是一个经过认证的 Kubernetes 集群。


root@node1:~ $ curl -sfL https://get.k3s.io | sh -
复制代码


上面的命令类似于用于快速 Docker 安装的命令:


curl https://get.docker.com | sh
复制代码


安装完毕之后,可以在 /etc/rancher/k3s/k3s.yaml 中找到连接到集群的配置文件。


root@node1:~ $ cat /etc/rancher/k3s/k3s.yamlapiVersion: v1clusters:- cluster:    certificate-authority-data: LS0tL...tCg==    server: https://localhost:6443  name: defaultcontexts:- context:    cluster: default    user: default  name: defaultcurrent-context: defaultkind: Configpreferences: {}users:- name: default  user:    password: 48f4b...4b4e7    username: admin
复制代码


本地 kubectl 将自动使用此配置。


$ kubectl get nodesNAME    STATUS ROLES  AGE VERSIONnode1   Ready  master 3m  v1.14.5-k3s.1
复制代码


注意:正如我们看到的 Quick Start 那样(https://k3s.io/),添加额外的节点并不复杂,它基本上只需要从主服务器上的/var/lib/rancher/k3s/server/node-token 获取一个令牌,并使用以下命令即可连接其他一些节点:


$ curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=XXX sh -
复制代码

在 Gitlab 中集成

现在让我们获取在 Gitlab 项目中集成全新的 k3s 集群所需的所有信息。


  • 集群名字:k3s

  • API Server 的 URL:


在配置文件中,API Server 指定为:https://localhost:6443 。为了从外部访问,我们需要提供 node1 外部的 IP 地址。


  • 集群的 CA 证书:


要向 Gitlab 提供集群 CA 证书,我们需要解码配置中指定的那个文件(就像它在 base 64 中一样)。


$ kubectl config view --raw \-o=jsonpath='{.clusters[0].cluster.certificate-authority-data}' \| base64 --decode
复制代码


  • Service token


获取一个识别令牌的过程牵涉到几个步骤。我们首先需要创建一个 ServiceAccount 并且向它提供一个 cluster-admin 角色。以下命令可以完成这些步骤:


$ cat <<EOF | kubectl apply -f -apiVersion: v1kind: ServiceAccountmetadata:  name: gitlab-admin  namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata:  name: gitlab-adminroleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: cluster-adminsubjects:- kind: ServiceAccount  name: gitlab-admin  namespace: kube-systemEOF
复制代码


当 service account 创建完毕之后,我们检索关联的类型 secret 的资源:


$ SECRET=$(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')
复制代码


下一步是提取与 secret 关联的 JWT 令牌:


$ TOKEN=$(kubectl -n kube-system get secret $SECRET -o jsonpath='{.data.token}' | base64 --decode)$ echo $TOKEN
复制代码


我们已经完成了所有设置,现在回到之前打开的选项卡中,开始使用所有信息并填写 Gitlab 【Add existing cluster 】表单的字段:



集群集成之后,我们可以直接从 web 界面安装 helm(Kubernetes 包管理器)。




现在,我们可以从命令行检查 tiller 守护程序(helm 的服务器端组件)是否运行。


$ kubectl get deploy --all-namespaces | grep tillerNAMESPACE           NAME          READY UP-TO-DATE AVAILABLE AGEgitlab-managed-apps tiller-deploy 1/1   1          1         67s
复制代码


集群现在已经可以使用了。除此之外,GitLab 的 Web 界面允许一键安装其他组件:


  • Ingress Controller,暴露集群中运行的服务

  • Cert-Manager,使用 Let’s Encrypt 管理 TLS 证书

  • Prometheus,监控运行在集群中 的应用程序

  • Knative,部署 Serverless 工作负载


总结

在本文中,我们了解如何创建一个 k3s 集群并且将其集成到一个 Gitlab 项目中。当然,任何 Kubernetes 集群都可以使用相同的过程。


我们现在可以添加各种资源到项目中:


  • 源代码

  • Dockerfile,指定如何从代码中创建 Docker 镜像

  • Kubernetes 资源,如部署、服务……

  • .gitlab-ci.yaml 文件,定义 CI 流水线以及如何部署应用程序并且针对相关 Kubernetes 集群进行测试


2020-05-16 17:181763

评论

发布
暂无评论
发现更多内容

AI系统中的偏差与偏见

百度开发者中心

AI 最佳实践 方法论 系统开发 语言 & 开发

下午4点半,浪潮云说直播间精彩继续

云计算

【案例】服务邮政快递业安全监管 星环科技助力国家邮政局“绿盾”大数据平台建设

星环科技

ApacheCon Asia 2021: Apache APISIX 技术议题一览

API7.ai 技术团队

Apache 开源 网关 APISIX

NLP随笔(二)

毛显新

人工智能 自然语言处理 深度学习

拼拼有礼模式系统开发详解APP

開發15347427695

工作中如何使用GULP构建项目?

加百利

JavaScript 大前端 8月日更 gulp

赋能后疫情时代的商业创新,用友BIP的力量

海比研究院

格物致知,零代码训练营第三期顺利结业

明道云

【IT运维】快速解决IT疑难故障就用行云管家!

行云管家

系统运维 堡垒机 IT运维

Snowflake如日中天是否代表Hadoop已死?大数据体系到底是什么?

阿里云大数据AI技术

阿里高工从入门,基础,进阶到项目实战,全面讲解spring boot

Java 程序员 架构 面试 spring Boot Starter

Express Flutter SDK 全面支持空安全

ZEGO即构

flutter 大前端 音视频 空安全

使用SpringAop对方法进行增强

捡对象的cy

spring aop

ClickHouse存储原理初窥

循环智能

性能优化 OLAP Clickhouse

详解Guitar Pro的自动化编辑器之节拍自动化

懒得勤快

Java程序员面试需要准备的一些东西

北游学Java

Java 面试

请珍惜每一次被 Code Review 的机会

escray

学习 极客时间 朱赟的技术管理课 8月日更

他是如何被公司辞退,再到1000个小时后拿到阿里巴巴offer的?

Java架构师迁哥

我国数字经济规模已达41万亿元 总量跃居世界第二

CECBC

斯图飞腾产品升级!Stratifyd数据分析平台全新改版

拼拼有礼系统软件开发案例介绍

開發15347427695

应届生如何拿到高薪和职业方向

hanaper

编程 程序员 音视频 软件工程师 应届生

客户选型零代码软件到底在对比哪些方面?

明道云

用好这两个小工具,制作乐谱更高效!

懒得勤快

大数据训练营hive作业

Clarke

Vue进阶(一):Vue 学习资料汇总

No Silver Bullet

Vue 8月日更

鬼斧神工!阿里架构师把多线程编程精华全部总结到这份《Java并发手册》里面了

Java 编程 架构 面试 计算机

Vue进阶(二):Vue 项目文件结构介绍

No Silver Bullet

Vue 8月日更 项目结构

打造区块链“三大平台” 助推数字化转型

CECBC

实操教程 | 如何将一个k3s集群集成到Gitlab项目中_文化 & 方法_Rancher_InfoQ精选文章