GitLab Kubernetes连接(本地部署)

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体も関係ございません。

这篇文章的功能在GitLab 16版本中预计会被删除。

GitLab 14.5版本中,可以免费使用用于连接GitLab与Kubernetes的GitLab代理程序。
建议不要使用本文中介绍的方法进行连接。

image.png

版本降级 | GitLab

请参考以下文章以了解GitLab Agent for Kubernetes的继任功能。
尝试使用GitLab Agent for Kubernetes(即GitLab Kubernetes Agent)- Qiita

将GitLab连接到Kubernetes(本地Kubernetes环境)

0. GitLab 和 Kubernetes 环境的整合

GitLab从10.1版本开始可以连接到Kubernetes。
开发正在通过AutoDevOps功能得到推进。

image.png

Add a Kubernetes cluster integration
このプロジェクトに Kubernetes クラスターを関連付けることで、Review Apps の使用、
アプリケーションのデプロイ、パイプラインの実行などを簡単に行うことができます。

とありますが、まだまだ開発中です。

本記事でも、GitLabのメニューからKubernetesへの認証に成功したということだけで、Knativeも動かしていませんし、Runnerも現時点では動かせていません。

(1) 环境很重要。

GitLab : Community Edition 11.7.5
Kubernetes : v1.13.1
  PodSecurityPolicy:false
Docker : 18.9.1
OS : Ubuntu 16.04.5

Kubernetesは、rke でインストールしました。.kube/config を整備して、kubectl で接続できるようにしておいてください。Rancher UIからインストールした場合、Rancher上のkubectl は、Rancher側がKubernetes APIサーバーをラップしているので上手くいきません。rkeが出力した kube_config_cluster.yml やkubeadm のconfigを使ってKubernetes APIサーバーに直接接続するようにしましょう。

また、tillerが入っているとGitLabからKubernetes接続時にインストールしようとしてエラーになります。現時点では、なるべく作ったばかりのKubernetesクラスターが良いでしょう。現時点では、PodSecurityPolicy は、Falseにしておく必要があります。

2. 准备Kubernetes端

Index · Clusters · Project · User · ヘルプ · GitLab
Project-level Kubernetes clusters (certificate-based) (DEPRECATED) | GitLab
ゴニョゴニョ書いてありますが、重要なのは Token です。

为了创建输入GitLab账号及其Token信息的步骤,请按照以下方式进行。

    1. ServiceAccountを作成(gitlabという名前は固定のようです)

 

    1. ClusterRoleBindingを作成

 

    1. 1のアカウントのToken名を取得

 

    1. 3のtoken中身を取得

 

    を行います。

创建ServiceAccount

kubectl create -f  - <<EOF
  apiVersion: v1
  kind: ServiceAccount
  metadata:
    name: gitlab
    namespace: default
EOF

创建ClusterRoleBinding。

kubectl create -f - <<EOF
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: gitlab-cluster-admin
subjects:
- kind: ServiceAccount
  name: gitlab
  namespace: default
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
EOF

获取帐户1的令牌名称。

kubectl get secrets
NAME                  TYPE                                  DATA   AGE
gitlab-token-XXXXX    kubernetes.io/service-account-token   3      59s

gitlab-token-XXXXX がToken名です。

2-4. token中身を取得

kubectl get secret gitlab-token-XXXXX -o jsonpath="{['data']['token']}" | base64 --decode
<ダラダラっとTokenが表示されるはず>

2-5. Tokenの証明書を取得

kubectl get secret gitlab-token-XXXXX -o jsonpath="{['data']['ca\.crt']}" | base64 --decode
<ダラダラっとca.crtが表示されるはず>

将设置为GitLab

    1. の Add a Kubernetes cluster integration 画面に各項目を追記します。

 

    1. Kubernetes クラスター名:任意

 

    1. API URL:kubeconfigの server: 行を貼ります

 

    1. CA 証明書:2-5のTokenの証明書 を貼ります

 

    1. トークン:2-4のTokenの中身 を貼ります

 

    プロジェクトの名前空間:空(指定しない場合はgitlab-managed-appsが作成されました)

保存更改。

4. 成果

image.png

使用kubectl命令确认后,发现已创建了名为gitlab-managed-apps的命名空间,并部署了tiller和ingres-nginx。

kubectl get pods --all-namespaces | grep gitlab
NAMESPACE             NAME                                                     READY   STATUS      RESTARTS   AGE
gitlab-managed-apps   ingress-nginx-ingress-default-backend-78fc87c466-5wrdj   1/1     Running     0          21h
gitlab-managed-apps   tiller-deploy-7dd47f89cc-x8mxk                           1/1     Running     0          21h

可能性大概是这个命名空间中的各种应用将会通过AutoDevOps进行部署。

我从一个农场主的角度看了一下。

image.png

目前,由于PodSecurityPolicy的验证失败而停止了。目前似乎更倾向于将PodSecurityPolicy设置为False。

总结

很遗憾,目前只实现到这一步。

如果有最新消息,我将继续添加到文章中。

bannerAds