Kubernetes 學(xué)習(xí)筆記(四):在 Minikube 中搭建 Jenkins Server

有一段時(shí)間沒(méi)寫了,這個(gè)坑一直在這怪難受的決定把它填了。

大體的搭建流程和先前寫到的 Git Server 大同小異,但細(xì)節(jié)部分不盡相同,有興趣的同僚亦可移步至 這里

關(guān)于 Kubernetes 的配置請(qǐng)移步至 這里。


作為我近日工作的 Microservices framework 中的重要一環(huán),Jenkins 的搭建自然成為了重中之重。

二話不說(shuō)先上我的 Dockerfile:

FROM jenkins:alpine

MAINTAINER Ralph Wang

# 因?yàn)樵诠竟ぷ鞯年P(guān)系內(nèi)部網(wǎng)絡(luò)經(jīng)常會(huì)阻礙 Container 與外部的連結(jié),遂加下文以設(shè)置代理。

ENV http_proxy ${proxy_address}:${proxy_port}

ENV https_proxy ${proxy_address}:${proxy_port}

USER root

# Download and config kubectl(-s:Silent or quiet mode;-O:Download;-S:Show error)

RUN curl -L -O https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl; chmod +x ./kubectl; mv ./kubectl /usr/local/bin/kubectl

# Download and config docker

RUN curl -sSL -O https://get.docker.com/builds/Linux/x86_64/docker-latest.tgz && tar -xvzf docker-latest.tgz; mv docker/* /usr/bin/ && rm docker-latest.tgz

上述兩個(gè) curl command 分別 download / config 了 kubectl 和 docker 兩個(gè)命令,docker 是用來(lái)在 Jenkins 的任務(wù)過(guò)程中創(chuàng)建 Image,kubectl 是用來(lái)在 Jenkins 的任務(wù)中實(shí)現(xiàn) Deployment 和 Service 的創(chuàng)建。


完成 Dockerfile 之后,我們需要建立此 Image,我將其命名為 jenkinserver。

再來(lái)我們需要用一個(gè) config 文件來(lái)實(shí)現(xiàn)創(chuàng)建 Kubernetes Deployment,下面就是我所編寫的 jenkins-deployment.yaml(切記 .yaml 文件不能使用 Tab):

apiVersion: apps/v1

kind: Deployment

metadata:

? name: jenkins

? labels:

? ? app: jenkins

spec:

? replicas: 1 # 我目前只需要一個(gè) Instance 所以就設(shè)置為1。

? selector:

? ? matchLabels:

? ? ? app: jenkins

? template: # This is the pod template。

? ? metadata:

? ? ? labels:

? ? ? ? app: jenkins

? ? spec:

? ? ? containers:

? ? ? - name: jenkins

? ? ? ? image: jenkinserver # Image 的名字。

? ? ? ? imagePullPolicy: Never # 迫使 Kubernetes 使用本地鏡像。

? ? ? ? ports:

? ? ? ? - containerPort: 8080 # 8080 作為 Web Console 的 Port。

? ? ? ? ? name: web

? ? ? ? ? protocol: TCP

? ? ? ? - containerPort: 50000

? ? ? ? ? name: agent

? ? ? ? ? protocol: TCP

? ? ? ? volumeMounts:

? ? ? ? - mountPath: /var/run/docker.sock # 首先掛載了本地 docker 的接口,以便在 Jenkins Container 中訪問(wèn) docker。

? ? ? ? ? name: docker-sock-volume

? ? ? ? - mountPath: /var/jenkins_home # 其次掛載了 jenkins_home 以便在 Container 被摧毀是不丟失 Jenkins Server 中的內(nèi)容。

? ? ? ? ? name: jenkins-volume

? ? ? ? - mountPath: /var/.kube/config # 最后掛載了外部 Kubernetes 的配置文件,以確保可以在 Jenkins Container 內(nèi)部對(duì)外部的 Kubernetes 進(jìn)行修改。

? ? ? ? ? name: kube-config

? ? ? volumes:

? ? ? - name: docker-sock-volume # Docker sock 卷。

? ? ? ? hostPath:

? ? ? ? ? path: /var/run/docker.sock

? ? ? - name: jenkins-volume # Jenkins 卷。

? ? ? ? hostPath:

? ? ? ? ? path: /c/Users/ralph.wang/.jenkins

? ? ? - name: kube-config # Kubernetes config 卷。

? ? ? ? hostPath:

? ? ? ? ? path: /c/Users/ralph.wang/.kube/config

By running:

kubectl create -f jenkins-deployment.yaml

便可以實(shí)現(xiàn)創(chuàng)建 Deployment,隨后可以通過(guò)

kubectl get deployment jenkins

進(jìn)行確認(rèn)。


建立完 Deployment 之后,需要搭載 Service 來(lái)確??梢栽谕獠窟M(jìn)行連結(jié),下面是我創(chuàng)建的 jenkins-service.yaml:

apiVersion: v1

kind: Service

metadata:

? labels:

? ? app: jenkins

? name: jenkins

spec:

? type: NodePort # 和筆記之三的 GitServer 一樣采用 NodePort 的形式直接曝露 Service。

? ports:

? - port: 8080

? ? targetPort: 8080

? ? nodePort: 32200

? ? name: web

? selector:

? ? app: jenkins

隨后我們可以使用

kubectl create -f jenkins-service.yaml

進(jìn)行服務(wù)的創(chuàng)建,并且使用

kubectl get service jenkins

進(jìn)行服務(wù)的再確認(rèn)。


初始 Jenkins 的時(shí)候會(huì)需要在 console 里輸入初始密碼,這個(gè)密碼可以在?/var/jenkins_home/secrets/initialAdminPassword 中找到(當(dāng)然因?yàn)槲覀冊(cè)谏衔闹惺褂昧?Volume,所以自然可以在本地中瀏覽該文件,即范例中的 /c/Users/ralph.wang/.jenkins/secrets/initialAdminPassword)。

配置完成之后即可開(kāi)始使用啦!

希望能對(duì)大家有所幫助。文章的不足之處也請(qǐng)留言告知,感謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容