摘要:嘗試運(yùn)行腳本發(fā)生了的錯(cuò)誤。錯(cuò)誤信息接下來就是,天的調(diào)查,關(guān)于這個(gè)錯(cuò)誤的能查到的資料幾乎沒有,也嘗試了很多方法,無果非常煎熬。問題解決了參考文檔初試使用完成持續(xù)構(gòu)建與發(fā)布集群安全配置
背景
為了使用Kubernetes管理并自動(dòng)化部署應(yīng)用程序,領(lǐng)導(dǎo)"糾結(jié)"了幾個(gè)同事搭了一個(gè)Kubernetes集群環(huán)境。
不過,為了減少?gòu)?fù)雜度,采用了非官方推薦的方式:
API Server使用http方式
不使用Admission Controllers,即API Server啟動(dòng)參數(shù)admission-control設(shè)為空
關(guān)于Admission Controllers的解釋,可以參照官方文檔
搭好k8s環(huán)境后,參考文檔 初試 Jenkins 使用 Kubernetes Plugin 完成持續(xù)構(gòu)建與發(fā)布 部署了Jenkins Server。
嘗試運(yùn)行pipeline腳本:
def label = "mypod-${UUID.randomUUID().toString()}" podTemplate(label: label, cloud: "kubernetes", containers: [ containerTemplate(name: "maven", image: "maven:3.3.9-jdk-8-alpine", ttyEnabled: true, command: "cat"), ]) { node(label) { stage("Get a Maven Project") { git "https://github.com/jenkins-docs/simple-java-maven-app.git" container("maven") { stage("Build a Maven project") { sh "mvn -B clean install" } } } } }
發(fā)生了java.nio.file.NoSuchFileException: /var/run/secrets/kubernetes.io/serviceaccount/namespace的錯(cuò)誤。錯(cuò)誤信息:
... > git checkout -f 0d85b7e1fd39bc6978511f92381aa10534ca4c1b > git branch -a -v --no-abbrev # timeout=10 > git checkout -b master 0d85b7e1fd39bc6978511f92381aa10534ca4c1b Commit message: "Amend README.md" First time build. Skipping changelog. [Pipeline] container [Pipeline] // container [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] } [Pipeline] // podTemplate [Pipeline] End of Pipeline java.nio.file.NoSuchFileException: /var/run/secrets/kubernetes.io/serviceaccount/namespace at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) ...
接下來就是2,3天的調(diào)查,關(guān)于這個(gè)錯(cuò)誤的能查到的資料幾乎沒有,也嘗試了很多方法,無果... 非常煎熬。
原因關(guān)于這個(gè)錯(cuò)誤,有幾個(gè)疑問
文件/var/run/secrets/kubernetes.io/serviceaccount/namespace有什么用
為什么Jenkins(Kubernetes Plugin)要去找這個(gè)文件
為什么這個(gè)文件不存在
帶著這些問題找到了官方文檔 Accessing Clusters,文檔中出現(xiàn)了這個(gè)文件的身姿。
Accessing the API from a Pod
When accessing the API from a pod, locating and authenticating to the apiserver are somewhat different.The recommended way to locate the apiserver within the pod is with the kubernetes.default.svc DNS name, which resolves to a Service IP which in turn will be routed to an apiserver.
The recommended way to authenticate to the apiserver is with a service account credential. By kube-system, a pod is associated with a service account, and a credential (token) for that service account is placed into the filesystem tree of each container in that pod, at /var/run/secrets/kubernetes.io/serviceaccount/token.
If available, a certificate bundle is placed into the filesystem tree of each container at/var/run/secrets/kubernetes.io/serviceaccount/ca.crt , and should be used to verify the serving certificate of the apiserver.
Finally, the default namespace to be used for namespaced API operations is placed in a file at /var/run/secrets/kubernetes.io/serviceaccount/namespace in each container.
那為什么我們搭建環(huán)境的container里沒有這個(gè)文件呢?就連目錄 /var/run/secrets 都沒有...
調(diào)查過程中,漸漸地把疑點(diǎn)定位到API Server的啟動(dòng)參數(shù) admission-control (1.10版本后被替換成 enable-admission-plugins)。官方推薦的設(shè)值有 ServiceAccount 但是搭環(huán)境的時(shí)候沒有設(shè)置,即設(shè)置為空。
于是,把API Server的啟動(dòng)admission-control參數(shù)改成了 --admission-control=ServiceAccount。
然后,重啟API Server,修改Jenkins的Deployment(為了讓k8s重新部署Jenkins Pod)。
接著,進(jìn)入新部署的Jenkins Pod(container)確認(rèn),上帝保佑,生成了目錄/var/run/secrets以及相關(guān)文件!
由于重新部署了Jenkins,需要重新設(shè)置Jenkins(安裝Plugin、設(shè)置k8s云、創(chuàng)建上述腳本的pipeline job)
運(yùn)行job(item),腳本運(yùn)行成功。問題解決了!
參考文檔jenkinsci/kubernetes-plugin
Accessing Clusters
初試 Jenkins 使用 Kubernetes Plugin 完成持續(xù)構(gòu)建與發(fā)布
Using Admission Controllers
Configure Service Accounts for Pods
How to Set Up Scalable Jenkins on Top of a Kubernetes Cluster
Kubernetes集群安全配置
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/32670.html
摘要:基于年底或年初沒有推廣的現(xiàn)狀,唯品會(huì)部門目前已經(jīng)做了兩年的時(shí)間。唯品會(huì)現(xiàn)狀唯品會(huì)目前線上有一千多個(gè)域,每個(gè)域之間相互的依賴比較復(fù)雜,每次的部署發(fā)布困難。這是唯品會(huì)的架構(gòu),主要包含持續(xù)集成和持續(xù)部署。 數(shù)人云上海&深圳兩地容器之Mesos/K8S/Swarm三國(guó)演義的嘉賓精彩實(shí)錄第三更來啦。唯品會(huì)是數(shù)人云Meetup的老朋友,去年曾做過RPC服務(wù)框架和Mesos容器化的分享。本次分享中,...
本期目標(biāo) : 基于 Centos 7.6 , 封裝出一個(gè)可用于運(yùn)行 php 項(xiàng)目的開箱即用鏡像本文不討論 dockerfile 語法 , 并且假設(shè)你懂得基本的類unix 操作系統(tǒng)常識(shí)并擁有類unix 運(yùn)行環(huán)境 (包括但不限于安裝了mac 或 linux 的實(shí)體機(jī) , 類unix虛擬機(jī) , 安裝了 MinGW 或 CygWin 的 windows 機(jī)器) , 并且認(rèn)為你懂得基本的 docker 操作...
本期目標(biāo) : 基于 Centos 7.6 , 封裝出一個(gè)可用于運(yùn)行 php 項(xiàng)目的開箱即用鏡像本文不討論 dockerfile 語法 , 并且假設(shè)你懂得基本的類unix 操作系統(tǒng)常識(shí)并擁有類unix 運(yùn)行環(huán)境 (包括但不限于安裝了mac 或 linux 的實(shí)體機(jī) , 類unix虛擬機(jī) , 安裝了 MinGW 或 CygWin 的 windows 機(jī)器) , 并且認(rèn)為你懂得基本的 docker 操作...
本期目標(biāo) : 基于 Centos 7.6 , 封裝出一個(gè)可用于運(yùn)行 php 項(xiàng)目的開箱即用鏡像本文不討論 dockerfile 語法 , 并且假設(shè)你懂得基本的類unix 操作系統(tǒng)常識(shí)并擁有類unix 運(yùn)行環(huán)境 (包括但不限于安裝了mac 或 linux 的實(shí)體機(jī) , 類unix虛擬機(jī) , 安裝了 MinGW 或 CygWin 的 windows 機(jī)器) , 并且認(rèn)為你懂得基本的 docker 操作...
摘要:的設(shè)計(jì)模式的設(shè)計(jì)模式以持續(xù)集成持續(xù)測(cè)試持續(xù)交付和持續(xù)部署為中心,自動(dòng)化協(xié)作和持續(xù)監(jiān)控是中使用的一些其他設(shè)計(jì)模式。持續(xù)集成持續(xù)集成是不斷地將源代碼集成到一個(gè)新的構(gòu)建或發(fā)布的過程,源代碼可以在本地存儲(chǔ)中,也可以在或中。 showImg(https://segmentfault.com/img/remote/1460000010452455); 識(shí)別二維碼報(bào)名活動(dòng) 8月19日,來自微軟、數(shù)人...
閱讀 2171·2023-04-26 00:43
閱讀 2689·2021-11-22 15:22
閱讀 3827·2021-11-11 16:55
閱讀 978·2021-11-04 16:06
閱讀 1795·2019-08-30 14:12
閱讀 1004·2019-08-30 14:02
閱讀 3378·2019-08-29 17:05
閱讀 1424·2019-08-29 12:27