1. 程式人生 > >運行於kubernetes的php應用的devops方案_Kubernetes中文社群

運行於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.   參考資料

作者簡介:

王善鵬,北京神舟航天軟體技術有限公司軟體開發工程師。本文版權歸原作者所有。