實操教程丨如何將一個k3s集羣集成到Gitlab項目中

K3s是一個輕量級的Kubernetes發行版(小於40MB),而且很是易於安裝,僅須要512MB的RAM。它可以完美知足IoT設備以及邊緣計算的需求。在本文中,咱們將建立一個k3s集羣而且展現如何將其集成到一個Gitlab的項目中。node


關於k3s

K3s是由Rancher Labs發佈的一個輕量級Kubernetes發行版,這款產品專爲在資源有限的環境中運行Kubernetes的研發和運維人員設計。git

它是通過認證的Kubernetes發行版,其最低的系統要求爲:web

  • 系統內核版本:Linux 3.10+
  • 每一個Server最低RAM要求:512 MB
  • 每一個節點RAM最低要求:75MB
  • 磁盤空間最低要求:200 MB
  • 支持的硬件架構:x86_6四、 ARMv七、 ARM64

這些低配置的要求使得k3s很是適用於IoT相關的場景。docker

在GitLab中建立項目

在安裝k3s以前,咱們先在Gitlab上建立一個新的項目,稱爲api。shell

建立完成以後,咱們點擊側邊菜單欄裏的Operations,並在下級菜單中選擇Kubernetes。json

咱們如今有兩個選項:api

  • 在GKE上建立一個新的Kubernetes集羣
  • 導入現有Kubernetes 集羣的配置(不管這一集羣在何處建立都可導入)

注意:在當前版本的GitLab中,新集羣的建立僅限於GKE。服務器

咱們選擇【Add existing cluster】這一選項卡。架構

在這一步中,咱們須要填寫幾個字段來提供咱們須要集成的集羣配置。一直打開這個選項卡,暫時無需理會。如今,咱們先去建立一個全新的Kubernetes集羣。app

建立一個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 】表單的字段:

集羣集成以後,咱們能夠直接從web界面安裝helm(Kubernetes包管理器)。

如今,咱們能夠從命令行檢查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工做負載

總 結

在本文中,咱們瞭解如何建立一個k3s集羣而且將其集成到一個Gitlab項目中。固然,任何Kubernetes集羣均可以使用相同的過程。

咱們如今能夠添加各類資源到項目中:

  • 源代碼
  • Dockerfile,指定如何從代碼中建立Docker鏡像
  • Kubernetes資源,如部署、服務……
  • .gitlab-ci.yaml文件,定義CI流水線以及如何部署應用程序而且針對相關Kubernetes集羣進行測試
相關文章
相關標籤/搜索