運行於kubernetes的php應用的devops方案_Kubernetes中文社群
1. 概述
php應用在kubernetes上執行,每次釋出新版本人工部署不是很方便,這就需要建立devops方案進行php應用的快速部署。本方案採用jenkins作為流水線工具,在本方案中使用svn作為程式碼庫,開發人員通過svn提交程式碼。快速部署時先從svn拉取程式碼,然後使用docker打包映象,並用nexus建立私有倉庫,在私有倉庫中管理映象,最後devops從私有倉庫中拉取映象並部署於kubernetes。另外大家可以方案作為參考,推廣到其他不需要程式碼依賴和不需要編譯的應用。
2. 安裝部署
本方案中svn和nexus都是採用的容器雲外的應用,docker部署於物理機,在此都不再贅述。
本節重點闡述jenkins在kubernetes上的部署。本文使用jenkins的官方映象作為我們部署映象的基映象,官方映象中沒有安裝docker,我們需要在映象中安裝docker。我們還需要使用一些外掛,這些外掛在映象中一併安裝。
FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get install -y iptables && apt-get install -y libdevmapper1.02.1 && apt-get install -y libltdl7 && apt-get install -y libseccomp2
ADD docker-ce.deb /tmp/
RUN dpkg -i /tmp/docker-ce.deb && rm -rf /tmp/docker-ce.deb
RUN /usr/local/bin/install-plugins.sh kubernetes-cd:0.2.3 subversion:2.11.1 docker-build-publish:1.3.2
USER Jenkins
之後我們就可以使用該映象部署jenkins。
#————————定義代理服務————————-
apiVersion: v1
kind: Service
metadata:
name: jenkins-php
spec:
type: NodePort
ports:
# Port上的對映埠
– port: 8080
targetPort: 8080
name: pipeline8080
selector:
app: jenkins-php
—
# ————————定義jenkins的部署 ———————–
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-php
spec:
selector:
matchLabels:
app: jenkins-php
revisionHistoryLimit: 2
template:
metadata:
labels:
app: jenkins-php
spec:
containers:
# 應用的映象
– image:phpdevops:v1.0 #基於官方映象建立的jenkins映象
name: jenkins-php
imagePullPolicy: IfNotPresent
# 應用的內部埠
ports:
– containerPort: 8080
name: pipeline8080
volumeMounts:
# jenkins-devops持久化
– name: pipeline-persistent
mountPath: /var/jenkins_home
volumes:
# 使用nfs網際網路儲存
– name: pipeline-persistent
nfs:
server: 192.168.8.150
path: /k8s-nfs/jenkins-php
3. Devops配置
3.1. Docker配置
在某檯安裝docker的物理機中,在/etc/docker/daemon.json的檔案中新增下面的內容。其中,10.0.32.148:1008為映象倉庫的地址和埠,tcp://0.0.0.0:4243為對外暴露的地址和埠。
{
“hosts”:[“tcp://0.0.0.0:4243″,”unix:///var/run/docker.sock”],
“insecure-registries”:[“10.0.32.148:1008”]
}
並通過執行下面的命令重啟docker服務:
$ systemctl daemon-reload
$ systemctl restart docker
3.2. Jenkins配置
建立名為php的任務。
設定svn的資訊。
- Repository URL:svn的地址。
- Credentials:svn的使用者名稱和密碼,可以臨時新增。
設定構建映象、上傳映象、部署的資訊。
- Repository Name:映象名稱
- Tag:映象版本
- Docker Host URI:docker服務的地址和埠;
- Docker registry URL:docker映象倉庫的地址;
- Registry credentials:映象倉庫的使用者名稱和密碼。
- Kubernetes Cluster Credentials:Kubernetes叢集的認證方式;
- Path:kubeconfig檔案的所在地址;
- Config Files:在叢集部署應用的yaml配置檔案。
配置完成後需要將構建映象的Dockerfile與部署應用的yaml放在svn專案的根目錄下並由svn管理。
4. 構建
在配置完成後,可以對專案進行構建一鍵操作。通過立即構建一鍵操作,jenkins將會完成拉取程式碼,打包映象,上傳映象,部署的所有工作。
5. 參考資料
作者簡介:
王善鵬,北京神舟航天軟體技術有限公司軟體開發工程師。本文版權歸原作者所有。