目录
k3d
k3d是一个轻量级的包装器,主要用于在 docker
中运行 k3s(k3s 是 Rancher Lab 发行的一个轻量级的 Kubernetes 发行版)。借助 k3d 可以很方便的快速创建一个单节点或多节点的 k3s集群,方便在本地的 Kubernetes 集群上进行开发。
k3d 的安装
k3d 的安装非常简单,在其官网上有非常详细的安装教程。本文使用脚本的方式来安装最新版本,执行如下命令即可:
$ curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
可以用 --version
或 --help
来查看安装是否成功:
$ k3d --version
k3d version v5.4.1
k3s version v1.22.7-k3s1 (default)
k3d 的使用
- 前提
k3d 的使用前提是要有 docker
和 kubectl
环境,安装两者的官网指导安装即可
- 使用
使用 k3d 快速创建一个 Kubernetes 集群:
$ k3d cluster create devops-is-shit
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-devops-is-shit'
INFO[0000] Created image volume k3d-devops-is-shit-images
INFO[0000] Starting new tools node...
INFO[0001] Creating node 'k3d-devops-is-shit-server-0'
INFO[0002] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.4.1'
INFO[0010] Pulling image 'docker.io/rancher/k3s:v1.22.7-k3s1'
INFO[0089] Creating LoadBalancer 'k3d-devops-is-shit-serverlb'
INFO[0091] Pulling image 'ghcr.io/k3d-io/k3d-proxy:5.4.1'
INFO[0134] Starting Node 'k3d-devops-is-shit-tools'
INFO[0338] Using the k3d-tools node to gather environment information
INFO[0338] HostIP: using network gateway 172.18.0.1 address
INFO[0338] Starting cluster 'devops-is-shit'
INFO[0338] Starting servers...
INFO[0338] Starting Node 'k3d-devops-is-shit-server-0'
INFO[0343] All agents already running.
INFO[0343] Starting helpers...
INFO[0343] Starting Node 'k3d-devops-is-shit-serverlb'
INFO[0350] Injecting records for hostAliases (incl. host.k3d.internal) and for 2 network members into CoreDNS configmap...
INFO[0352] Cluster 'devops-is-shit' created successfully!
INFO[0352] You can now use it like this:
kubectl cluster-info
可以查看创建集群的信息:
$ kubectl cluster-info
Kubernetes control plane is running at https://0.0.0.0:33237
CoreDNS is running at https://0.0.0.0:33237/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://0.0.0.0:33237/api/v1/namespaces/kube-system/services/https:metrics-server:https/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k3d-devops-is-shit-server-0 Ready control-plane,master 13m v1.22.7+k3s1
接下来就可以体验这个集群了。
极狐GitLab Runner
极狐GitLab Runner 是极狐GitLab 实现 CI/CD 的执行器,每当有 CI/CD Pipeline 需要构建时,就会根据调度来选择一个 Runner 执行此次 CI/CD Pipeline 的构建。可以选择极狐GitLab默认的 Runner,但是很多都是共享 Runner,在使用高峰期会碰到排队的情况,需要等待。通过自建 Runner 来解决这个问题,而且自建 Runner 可以自己随意嚯嚯。下面就给大家演示一下如何在 k3d 环境上安装和运行极狐GitLab Runner。
用 k3d 运行极狐GitLab Runner
Helm 的安装
在 k3d 上安装极狐GitLab Runner 本质上就是在 Kubernetes 集群上进行安装,所以 Helm 是很好的选择,必须要先安装 Helm。
可以根据Helm 官网的指导来完成 Helm 的安装,并进行确认:
$ helm version
version.BuildInfo{Version:"v3.7.1", GitCommit:"1d11fcb5d3f3bf00dbe6fe31b8412839a96b3dc4", GitTreeState:"clean", GoVersion:"go1.16.9"}
极狐GitLab Runner 的安装
- 极狐GitLab Runner Helm Repo 的添加
$ helm repo add k3d-jh https://charts.gitlab.io
"k3d-jh" has been added to your repositories
- 定制 values.yaml
通过修改 values.yaml
文件来制定安装极狐GitLab Runner 所必须的一些参数:
imagePullPolicy: IfNotPresent
gitlabUrl: "https://jihulab.com"
runnerRegistrationToken: "jh-runner-register-token"
concurrent: 10
checkInterval: 30
logLevel: info
rbac:
create: true
metrics:
enabled: false
runners:
config: |
[[runners]]
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "ubuntu:20.04"
[[runners.kubernetes.volumes.host_path]]
name = "docker"
mount_path = "/var/run/docker.sock"
host_path = "/var/run/docker.sock"
privileged: "true"
name: k3d-runner
tags: "jh,k3d,runner"
重点是 gitlabUrl
和 runnerRegistrationToken
两个参数,分别对应极狐GitLab instance 以及 Runner 的注册 Token,这个可以通过 Porject --> Settings --> CI/CD --> Runner 来找到:
- 安装极狐GitLab Runner
执行如下命令即可完成极狐GitLab Runner 的安装:
$ helm install --namespace k3d-jh-runner k3d-jh-runner --create-namespace -f values.yaml k3d-jh/gitlab-runner
NAME: k3d-jh-runner
LAST DEPLOYED: Thu Apr 21 15:04:25 2022
NAMESPACE: k3d-jh-runner
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Your GitLab Runner should now be registered against the GitLab instance reachable at: "https://jihulab.com"
Runner namespace "k3d-jh-runner" was found in runners.config template.
可以在 k3d-jh-runner
这个 namespace 下面查看 pod:
$ kubectl -n k3d-jh-runner get pods -w
NAME READY STATUS RESTARTS AGE
k3d-jh-runner-gitlab-runner-5f59b8d4c7-p6vn6 0/1 Init:0/1 0 17s
k3d-jh-runner-gitlab-runner-5f59b8d4c7-p6vn6 0/1 PodInitializing 0 26s
k3d-jh-runner-gitlab-runner-5f59b8d4c7-p6vn6 0/1 Running 0 27s
k3d-jh-runner-gitlab-runner-5f59b8d4c7-p6vn6 1/1 Running 0 40s
当 pod 的状态是 Running
时,就可以在极狐GitLab Runner 界面查看新安装的 Runner。依旧在 Project --> Settings --> CI/CD --> Runner 界面:
可以看到 ID 为 1575
,名称为 k3d-runner
,tag 为 k3d、jh、runner
的 Runner 正在运行,说明 Runner 安装成功。接下来就可以使用了。
极狐GitLab CI/CD
在项目中添加一个 .gitlab-ci.yml
文件即可开启极狐GitLab CI/CD,在初次添加的时候,可以选择一个模版:
添加的时候,注意在每个 stage 中添加如下内容:
tags:
- k3d
添加上面的内容就会使用前面用 k3d 安装的 Kubernetes 上的 Runner 来执行此次 CI/CD 构建了(原因是匹配到了 Runner 的 tag)。可以通过查看 CI/CD 构建日志来确认: