实操教程丨如何将一个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.yaml
apiVersion:?v1
clusters:
-?cluster:
certificate-authority-data:?LS0tL...tCg==
server:?https://localhost:6443
name:?default
contexts:
-?context:
cluster:?default
user:?default
name:?default
current-context:?default
kind:?Config
preferences:?{}
users:
-?name:?default
user:
?48f4b...4b4e7
?admin

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

$?kubectl?get?nodes
NAMESTATUS?ROLESAGE?VERSION
node1?Readymaster?3mv1.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:?v1
kind:?ServiceAccount
metadata:
name:?gitlab-admin
namespace:?kube-system
---
apiVersion:?rbac.authorization.k8s.io/v1beta1
kind:?ClusterRoleBinding
metadata:
name:?gitlab-admin
roleRef:
apiGroup:?rbac.authorization.k8s.io
kind:?ClusterRole
name:?cluster-admin
subjects:
-?kind:?ServiceAccount
name:?gitlab-admin
namespace:?kube-system
EOF

当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?tiller
NAMESPACE?NAMEREADY?UP-TO-DATE?AVAILABLE?AGE
gitlab-managed-apps?tiller-deploy?1/1?11?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集群进行测试

更多关于云服务器域名注册虚拟主机的问题,请访问西部数码官网:www.west.cn

赞(0)
声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-62778877-8306;邮箱:fanjiao@west.cn。本站原创内容未经允许不得转载,或转载时需注明出处:西部数码知识库 » 实操教程丨如何将一个k3s集群集成到Gitlab项目中

登录

找回密码

注册