成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Kubernetes持續(xù)集成:Jenkins關(guān)于java.nio.file.NoSuchFileEx

tomener / 1718人閱讀

摘要:嘗試運(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

相關(guān)文章

  • 構(gòu)建與定制:唯品會(huì) PaaS 基于 Kubernetes 的實(shí)踐

    摘要:基于年底或年初沒有推廣的現(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容器化的分享。本次分享中,...

    JackJiang 評(píng)論0 收藏0
  • 基于 Docker ,Gogs,Jenkins,Kubernetes 實(shí)踐工程源代碼的自動(dòng)構(gòu)建和持續(xù)

    本期目標(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 操作...

    Achilles 評(píng)論0 收藏0
  • 基于 Docker ,Gogs,JenkinsKubernetes 實(shí)踐工程源代碼的自動(dòng)構(gòu)建和持續(xù)

    本期目標(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 操作...

    RayKr 評(píng)論0 收藏0
  • 基于 Docker ,Gogs,Jenkins,Kubernetes 實(shí)踐工程源代碼的自動(dòng)構(gòu)建和持續(xù)

    本期目標(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 操作...

    Moxmi 評(píng)論0 收藏0
  • 優(yōu)勢(shì)+工具+實(shí)踐=DevOps&Docker的企業(yè)級(jí)落地

    摘要:的設(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ù)人...

    stormjun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

tomener

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<