GitLab Kubernetes连接(本地部署)
毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体も関係ございません。
这篇文章的功能在GitLab 16版本中预计会被删除。
GitLab 14.5版本中,可以免费使用用于连接GitLab与Kubernetes的GitLab代理程序。
建议不要使用本文中介绍的方法进行连接。

版本降级 | GitLab
请参考以下文章以了解GitLab Agent for Kubernetes的继任功能。
尝试使用GitLab Agent for Kubernetes(即GitLab Kubernetes Agent)- Qiita
将GitLab连接到Kubernetes(本地Kubernetes环境)
0. GitLab 和 Kubernetes 环境的整合
GitLab从10.1版本开始可以连接到Kubernetes。
开发正在通过AutoDevOps功能得到推进。

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信息的步骤,请按照以下方式进行。
-
- ServiceAccountを作成(gitlabという名前は固定のようです)
-
- ClusterRoleBindingを作成
-
- 1のアカウントのToken名を取得
-
- 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
-
- の Add a Kubernetes cluster integration 画面に各項目を追記します。
-
- Kubernetes クラスター名:任意
-
- API URL:kubeconfigの server: 行を貼ります
-
- CA 証明書:2-5のTokenの証明書 を貼ります
-
- トークン:2-4のTokenの中身 を貼ります
- プロジェクトの名前空間:空(指定しない場合はgitlab-managed-appsが作成されました)
保存更改。
4. 成果

使用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进行部署。
我从一个农场主的角度看了一下。

目前,由于PodSecurityPolicy的验证失败而停止了。目前似乎更倾向于将PodSecurityPolicy设置为False。
总结
很遗憾,目前只实现到这一步。
如果有最新消息,我将继续添加到文章中。