在AliCloud Serverless Kubernetes集群Gitlab Runner部署筆記

阿里云 Serverless Kubernetes 讓您無需管理和維護集群與服務器,即可快速創(chuàng)建 Kuberentes 容器應用袖瞻,并且根據(jù)應用實際使用的 CPU 和內存資源量進行按需付費锅风。使用 Serverless Kubernetes兢卵,您可以專注于設計和構建應用程序蜈首,而不是管理運行應用程序的基礎設施岗憋。它基于阿里云彈性計算基礎架構肃晚,并且完全兼容 Kuberentes API 的解決方案,充分結合了虛擬化資源帶來的安全性仔戈、彈性和 Kubernetes 生態(tài)关串。

由此定位拧廊,這種集群是很適合用來跑CI流程場景的。CI觸發(fā)時創(chuàng)建對應資源晋修,CI結束后銷毀對應的資源吧碾。目前Serverless Kubernetes集群尚在公測當中,或多或少有一些不友好的體驗飞蚓,比如:

  • 不支持 Role滤港,RoleBinding
  • 不能自定義CoreDNS/Kube-DNS配置趴拧。
  • 不能使用docker-in-docker方式構建鏡像溅漾。
  • 不支持 PersistentVolumePersistentVolumeClaim

以上提及的四點就是本次部署Runner時需要解決的需求著榴。

不支持 Role添履,RoleBinding

在觸發(fā)CI流程時,Runner會在Kubenertes集群中創(chuàng)建對應的Pod進行CI脑又,在不支持自定義 Role暮胧,RoleBinding的情況下,也就只有使用阿里云提供的kubeconfig文件了问麸,將對應值粘貼到對應字段創(chuàng)建Secret往衷,這里不再累述。最后Runner會引用到這個Secret严卖。

apiVersion: v1
kind: Secret
metadata:
  name: kubernetes-admin-cert
type: kubernetes.io/tls
data:
  ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUq......
  tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR......
  tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQp......

不能自定義CoreDNS/Kube-DNS配置

自定義CoreDNS/Kube-DNS配置是為了讓集群內部應用不通過公網(wǎng)訪問同一VPC下的其他應用直接通過內網(wǎng)即可席舍,比如Gitlab,Harbor等哮笆。

解決方式一:

阿里云官方提供的解決方案是使用privateZone来颤。但本文不介紹這種方式,為什么呢稠肘?這是一個謎一樣的問題福铅,這里不做深入探討。

解決方式二:

??注意:該方法Serverless Kubernetes集群尚不支持项阴,未來將會支持滑黔,故現(xiàn)在解決此問題只能用方式一。

讓Runner所生成的Pod使用HostAliases环揽。但是官方提供的Runner并不支持這個功能拷沸,那就直接優(yōu)化源碼吧,優(yōu)化詳情參見此次提交薯演。

不能使用docker-in-docker方式構建鏡像

解決方式:

使用kaniko進行鏡像構建预明,這里我們將官方鏡像中的可執(zhí)行文件復制到自己的CI鏡像中即可使用兑牡。

FROM gcr.io/kaniko-project/executor:v0.9.0
FROM registry.cn-hangzhou.aliyuncs.com/choerodon-tools/cibase:0.7.0
COPY --from=0 /kaniko/executor /usr/local/bin/kaniko

這是我build好可直接食用的鏡像:

registry.cn-hangzhou.aliyuncs.com/setzero/gitlab-ci-slaver:0.1.0

待友好解決的問題:

  • Harbor界面不顯示鏡像信息issues,但如果原本就有該鏡像的倉庫那么是可以正常顯示的携龟。疑是Harbor版本太低的問題,目前使用的是v1.4.0衡创。
  • 執(zhí)行kaniko后會出現(xiàn)Deleting filesystem...操作帝嗡,導致執(zhí)行完kaniko后不能再執(zhí)行其他命令,在CI中可以再分出一個stage來規(guī)避這個問題璃氢。

不支持 PV 和 PVC

在CI時我們需要緩存一些可復用的文件哟玷,或者上一job所產生的文件下個job會用到。

解決方式一:

先部署minio一也,minio通過nfs volume方式掛載nas巢寡,然后在.gitlab-ci.yml文件中使用cacheartifacts關鍵字。但本文不介紹這種方式椰苟,為什么呢抑月?這是一個謎一樣的問題,這里不做深入探討舆蝴。

相關資料:

解決方式二:

讓Runner所生成的Pod使用nfs volume方式掛載nas谦絮,但是官方提供的Runner并不支持這個功能,那就直接優(yōu)化源碼吧洁仗,優(yōu)化詳情參見此次MR层皱,故將這次CI生成的二進制文件覆蓋官方原有的就行。

FROM gitlab/gitlab-runner:alpine-v11.8.0
ADD https://gitlab.com/TimeBye/gitlab-runner/-/jobs/174588999/artifacts/raw/out/binaries/gitlab-runner-linux-amd64 /usr/bin/gitlab-ci-multi-runner
RUN chmod +x /usr/bin/gitlab-ci-multi-runner

這是我build好可直接食用的鏡像:

registry.cn-hangzhou.aliyuncs.com/setzero/gitlab-runner:alpine-v11.8.1

后記

優(yōu)化Runner后的配置示例

concurrent = 3
check_interval = 0
[[runners]]
  name = "runner"
  url = "https://gitlab.com/"
  token = "2b388a2636d35b9d141348e972706b"
  executor = "kubernetes"
  output_limit = 51200
  environment = ["CHART_REPOSITORY=http://chart.com",
                 "SONAR_URL=http://sonarqube.com"]
  [runners.kubernetes]
    host = "https://abcde.serverless-1.kubernetes.cn-shanghai.aliyuncs.com:6443"
    cert_file = "/etc/gitlab-runner/tls.crt"
    key_file = "/etc/gitlab-runner/tls.crt"
    ca_file = "/etc/gitlab-runner/ca.crt"
    namespace = "default"
    pull_policy = "always"
    cpu_limit = "2"
    cpu_request = "2"
    memory_limit = "4Gi"
    memory_request = "4Gi"
    service_cpu_limit = "1"
    service_cpu_request = "1"
    service_memory_limit = "2Gi"
    service_memory_request = "2Gi"
    helper_cpu_limit = "250m"
    helper_cpu_request = "250m"
    helper_memory_limit = "512Mi"
    helper_memory_request  = "512Mi"
    helper_image = "gitlab/gitlab-runner-helper:x86_64-3fff1dcf"
    [runners.kubernetes.pod_annotations]
     # "k8s.aliyun.com/enable-eip" = "true"
    [runners.kubernetes.host_aliases]
      "127.0.0.1" = [ "foo.local", "bar.local" ]
      "127.0.0.2" = [ "oof.local", "rab.local" ]
    [runners.kubernetes.volumes]
      [[runners.kubernetes.volumes.nfs]]
        name = "runner-cache"
        mount_path = "/cache"
        server = "abcde-map64.cn-shanghai.nas.aliyuncs.com"
        nfs_path = "/runner/cache-pv"
      [[runners.kubernetes.volumes.nfs]]
        name = "runner-maven"
        mount_path = "/root/.m2"
        server = "abcde-map64.cn-shanghai.nas.aliyuncs.com"
        nfs_path = "/runner/maven-pv"
      [[runners.kubernetes.volumes.secret]]
        name = "docker-registry-secret"
        mount_path = "/root/.docker"
        read_only = false
        [runners.kubernetes.volumes.secret.items]
          "config.json" = "config.json"
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赠潦,一起剝皮案震驚了整個濱河市叫胖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祭椰,老刑警劉巖臭家,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異方淤,居然都是意外死亡钉赁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門携茂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來你踩,“玉大人,你說我怎么就攤上這事讳苦〈ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵鸳谜,是天一觀的道長膝藕。 經(jīng)常有香客問我,道長咐扭,這世上最難降的妖魔是什么芭挽? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任滑废,我火速辦了婚禮,結果婚禮上袜爪,老公的妹妹穿的比我還像新娘蠕趁。我一直安慰自己,他們只是感情好辛馆,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布俺陋。 她就那樣靜靜地躺著,像睡著了一般昙篙。 火紅的嫁衣襯著肌膚如雪腊状。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天瓢对,我揣著相機與錄音寿酌,去河邊找鬼。 笑死硕蛹,一個胖子當著我的面吹牛醇疼,可吹牛的內容都是我干的。 我是一名探鬼主播法焰,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秧荆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了埃仪?” 一聲冷哼從身側響起乙濒,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卵蛉,沒想到半個月后颁股,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡傻丝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年甘有,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葡缰。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡亏掀,死狀恐怖,靈堂內的尸體忽然破棺而出泛释,到底是詐尸還是另有隱情滤愕,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布怜校,位于F島的核電站间影,受9級特大地震影響,放射性物質發(fā)生泄漏茄茁。R本人自食惡果不足惜宇智,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一蔓搞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧随橘,春花似錦、人聲如沸锦庸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甘萧。三九已至萝嘁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扬卷,已是汗流浹背牙言。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怪得,地道東北人咱枉。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像徒恋,于是被迫代替她去往敵國和親蚕断。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354