写点什么

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

评论

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

百家号打击挂载恶意导流链接行为,必须严厉打击恶意挂链灰产

石头IT视角

Service Mesh迁移原则

阿泽🧸

Service Mesh 8月月更

文本词频统计的利器 Trie树

Five

c 算法题 8月月更

Kubernetes 调度器优化

CTO技术共享

开源 Kubernetes 集群 签约计划第三季

Kubernetes Cilium展示

CTO技术共享

开源 cilium Kubernetes 集群 签约计划第三季

Kubernetes构建Redis 集群

CTO技术共享

redis 开源 签约计划第三季 8月月更

C++为什么始终无法取代 C 吗?

Jackpop

Docker基础:Docker 常用命令梳理

天使不哭

#开源 8月月更

头脑风暴:零钱兑换

HelloWorld杰少

8月月更

SRE运维解密-服务质量目标:SLI,SLO,SLA

董哥的黑板报

微服务 运维 云原生 SRE Google

如何克服紧张

踏雪痕

Kubernetes信息安全

CTO技术共享

开源 信息安全 Kubernetes 集群 签约计划第三季 8月月更

Go-Excelize API源码阅读(一)——NewFile()

Regan Yue

Go 开源 源码刨析 8月月更

Kubernetes内存泄露怎么玩

CTO技术共享

开源 内存泄漏 签约计划第三季 8月月更

Kubernetes证书过期怎么玩

CTO技术共享

开源 签约计划第三季 8月月更

关于 SAP UI5 floating footer 显示与否的单步调试以及使用 SAP UI5 的收益

汪子熙

前端开发 SAP SAP UI5 ui5 8月月更

Kubernetes故障排查eBPF

CTO技术共享

开源 ebpf 签约计划第三季 8月月更

系统管理-Linux重定向与管道

Albert Edison

Linux centos 运维 服务器 8月月更

VS Code如何打造C/C++开发环境?

Jackpop

开源一夏 | jQuery 密码验证和深入理解JSONP【前端jQuery框架】

恒山其若陋兮

开源 8月月更

Android 应用安全机制实现方案探究

No Silver Bullet

android 签约计划第三季 8月月更 安全机制

电动汽车充电站的部署优化策略

乌龟哥哥

8月月更

Kubernetes 实现灰度和蓝绿发布

CTO技术共享

开源 灰度发布 蓝绿发布 签约计划第三季 8月月更

SRv6网络典型部署场景

穿过生命散发芬芳

8月月更 SRv6

gulp 的常用 API

Jason199

js gulp 8月月更

C++ 中的四种智能指针

桑榆

c++ 8月月更

Python 教程之输入输出(5)—— input() 函数中的漏洞 – Python 2.x

海拥(haiyong.site)

Python 8月月更

一起学习集合框架之 TreeSet

宇宙之一粟

Java 8月月更

钝感力与自我和解

Amazing_eve

#开源

Kubernetes网络模型

CTO技术共享

开源 Kubernetes 集群 签约计划第三季 8月月更

【ELT.ZIP】OpenHarmony啃论文俱乐部——学术科研方法论沉淀辑

ELT.ZIP

方法论 OpenHarmony ELT.ZIP 啃论文

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