阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

实操教程 | 如何将一个 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:181158

评论

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

星环科技 TDH8.1.0:全新升级为用户带来极致体验

星环科技

大数据

Go语言学习查缺补漏ing Day3

恒生LIGHT云社区

Go 编程语言

少儿春晚表演

Tiger

28天写作

基于HTML、CSS、JS的小游戏/工具制作过程及完整源码

海拥(haiyong.site)

28天写作 内容合集 签约计划第二季 12月日更 技术专题合集

服务端质量保证体系(二) 流水线标准化建设

homber

服务端 CI/CD 流程 质量保证 签约计划第二季

2021 China DevOpsDays演讲实录

homber

DevOps DevOpsDays 签约计划第二季

基于HTML、CSS和JS的年龄计算器

海拥(haiyong.site)

html 大前端 28天写作 签约计划第二季 12月日更

大数据开发之数据读取—Pandas vs Spark

@零度

大数据 spark pandas

【分布式技术专题】「OSS中间件系列」Minio的Server端服务的架构和实战搭建

洛神灬殇

OSS Minio Minio 集群 12月日更 FS

服务端质量保证体系(三) CI原子能力建设

homber

ci 服务端 质量保证 签约计划第二季

Apache ShenYu源码阅读系列-注册中心实现原理之Http注册

子夜2104

企业如何做好员工安全意识提升

腾讯安全云鼎实验室

Redis 很强,不懂使用规范就糟蹋了

码哥字节

redis Redis开发规范 签约计划第二季

Redis 核心知识点归纳总结,从根上理解 Redis

码哥字节

redis Redis 核心技术与实战 签约计划第二季

编程谜题:提升你解决问题的训练场

华为云开发者联盟

Python 编程 编程语言 代码 编程谜题

换个角度思考勒索攻击事件

华为云开发者联盟

漏洞 勒索 攻击 安全检测 蜜罐检测

一文讲透数仓临时表的用法

华为云开发者联盟

数据库 sql Local GaussDB(DWS) 临时表

和合共赢,DataPipeline与麒麟软件完成产品兼容性互认证

DataPipeline数见科技

中间件 数据库中间件

Linux一学就会之Centos8软件包的管理和安装之yum管理软件包

学神来啦

Linux centos 运维 rpm yum

为什么要做团建TB?(6/28)

赵新龙

28天写作

【讲坛实录】知识图谱的探索与应用

星环科技

知识图谱

春松客服入驻Rainbond开源应用商店

北京好雨科技有限公司

恒源云(GPUSHARE)_云GPU服务器如何使用PyCharm?

恒源云

深度学习 gpu 算力加速

开源机器学习数据库OpenMLDB贡献者计划全面启动

第四范式开发者社区

第四范式 开源社区 OpenMLDB 机器学习数据库 贡献者

服务端质量保证体系(一) 全流程规范管理

homber

服务端 流程 质量保证 签约计划第二季

云原生时代的"应用级"多云管理

北京好雨科技有限公司

云计算 Kubernetes 容器 多云管理

Python代码阅读(第67篇):获取列表中的去重后的元素

Felix

Python 编程 列表 阅读代码 Python初学者

会用泛型,但你知道什么是泛型的类型擦除吗?

码农参上

Java泛型 签约计划第二季

QA进阶成长感悟录

homber

成长 内容合集 签约计划第二季

「Oracle」Oracle 数据库备份还原

恒生LIGHT云社区

数据库 oracle

使用Harbor作为Rainbond默认容器镜像仓库,扩展Rainbond镜像管理能力

北京好雨科技有限公司

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