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

640?wx_fmt=jpeg
作者|RancherLabs
来源|CSDN企业博客
关于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。

640?wx_fmt=png

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

640?wx_fmt=png

我们现在有两个选项:
  • 在GKE上创建一个新的Kubernetes集群
  • 导入现有Kubernetes 集群的配置(无论这一集群在何处创建均可导入)
注意: 在当前版本的GitLab中,新集群的创建仅限于GKE。
640?wx_fmt=png

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

640?wx_fmt=png

在这一步中,我们需要填写几个字段来提供我们需要集成的集群配置。 一直打开这个选项卡,暂时无需理会。 现在,我们先去创建一个全新的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:	
    password: 48f4b...4b4e7	
    username: admin

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

$ kubectl get nodes	
NAME STATUS ROLES AGE VERSION	
node1 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: 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 】表单的字段:

640?wx_fmt=png

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

640?wx_fmt=png
640?wx_fmt=png

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

$ kubectl get deploy --all-namespaces | grep tiller	
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE	
gitlab-managed-apps tiller-deploy 1/1 1 1 67s	

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

  • Ingress Controller,暴露集群中运行的服务
  • Cert-Manager,使用Let's Encrypt管理TLS证书
  • Prometheus,监控运行在集群中 的应用程序
  • Knative,部署Serverless工作负载

640?wx_fmt=png

总 结

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

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

  • 源代码
  • Dockerfile,指定如何从代码中创建Docker镜像
  • Kubernetes资源,如部署、服务……
  • .gitlab-ci.yaml文件,定义CI流水线以及如何部署应用程序并且针对相关Kubernetes集群进行测试。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

福利
扫描添加小编微信,备注“ 姓名+公司职位 ”,加入【 云计算学习交流群 】,r入驻博客,和志同道合的朋友们共同打卡学习!

640?wx_fmt=jpeg

推荐阅读:
真香,朕在看了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值