案例-在Kubernetes运行Jenkins、LNMP的 WordPress案例

79 阅读2分钟

案例-在Kubernetes运行Jenkins、以及在单Pod中以多容器模式运行基于LNMP的WordPress案例

部署架构

image.png

镜像分层

image.png

step1 构建基础镜像

装常用的包、改时区 DOCKERFILE

#自定义Centos 基础镜像
FROM centos:7.9.2009 
MAINTAINER xxx  xxx@qq.com

ADD filebeat-7.12.1-x86_64.rpm /tmp
RUN yum install -y /tmp/filebeat-7.12.1-x86_64.rpm vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel iproute net-tools iotop &&  rm -rf /etc/localtime /tmp/filebeat-7.12.1-x86_64.rpm && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  && useradd nginx -u 2088
#!/bin/bash
docker build -t  harbor.linuxarchitect.io/baseimages/magedu-centos-base:7.9.2009 ./
docker push harbor.linuxarchitect.io/baseimages/magedu-centos-base:7.9.2009

输出 magedu-centos-base:7.9.2009

step2 构建JDK镜像(基于centos镜像) 可以根据版本打多个

cd learning-k8s/01-jiege/k8s-data/dockerfile/web/pub-images/jdk-1.8.212/

#JDK Base Image
#FROM harbor.magedu.net/baseimages/magedu-centos-base:7.9.2009 
FROM harbor.linuxarchitect.io/baseimages/magedu-centos-base:7.9.2009 

MAINTAINER xxx "xxx@magedu.net"


ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/local/jdk 
ADD profile /etc/profile


ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin
docker build -t harbor.linuxarchitect.io/pub-images/jdk-base:v8.212  .
#sleep 1
docker push  harbor.linuxarchitect.io/pub-images/jdk-base:v8.212

输出 jdk-base

step3 构建服务基础镜像 例如tomcat nginx mysql等

learning-k8s/01-jiege/k8s-data/dockerfile/web/pub-images/tomcat-base-8.5.43/Dockerfile

#Tomcat 8.5.43基础镜像
FROM harbor.linuxarchitect.io/pub-images/jdk-base:v8.212 

MAINTAINER xxx "xxx@magedu.net"

RUN mkdir /apps /data/tomcat/webapps /data/tomcat/logs -pv 
ADD apache-tomcat-8.5.43.tar.gz  /apps
RUN useradd tomcat -u 2050 && ln -sv /apps/apache-tomcat-8.5.43 /apps/tomcat && chown -R tomcat.tomcat /apps /data -R
#!/bin/bash
docker build -t harbor.linuxarchitect.io/pub-images/tomcat-base:v8.5.43  .
#sleep 3
docker push  harbor.linuxarchitect.io/pub-images/tomcat-base:v8.5.43

输出 tomcat-base镜像

step4 构建业务镜像

#Jenkins Version 2.190.1
#FROM harbor.magedu.net/pub-images/jdk-base:v8.212
FROM harbor.linuxarchitect.io/pub-images/jdk-base:v8.212 

MAINTAINER xxx xxx@magedu.net

ADD jenkins-2.319.2.war /apps/jenkins/jenkins.war
ADD run_jenkins.sh /usr/bin/


EXPOSE 8080 

CMD ["/usr/bin/run_jenkins.sh"]
echo "即将开始就像构建,请稍等!" && echo 3 && sleep 1 && echo 2 && sleep 1 && echo 1
#nerdctl build -t  harbor.linuxarchitect.io/jenkins:v2.319.2 .
docker build -t  harbor.linuxarchitect.io/magedu/jenkins:v2.319.2 .
if [ $? -eq 0 ];then
  echo "即将开始镜像上传,请稍等!" && echo 3 && sleep 1 && echo 2 && sleep 1 && echo 1
  docker push harbor.linuxarchitect.io/magedu/jenkins:v2.319.2 
  if [ $? -eq 0 ];then
    echo "镜像上传成功!"
  else
    echo "镜像上传失败"
  fi
else
  echo "镜像构建失败,请检查构建输出信息!"
fi

输出jenkins镜像

step5 创建sotrageclass 动态存储

juejin.cn/post/729444…

step6 运行jenkins

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-datadir-pvc
  namespace: magedu
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-root-data-pvc
  namespace: magedu
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  labels:
    app: magedu-jenkins
  name: magedu-jenkins-deployment
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: magedu-jenkins
  template:
    metadata:
      labels:
        app: magedu-jenkins
    spec:
      containers:
      - name: magedu-jenkins-container
        #image: harbor.magedu.net/magedu/jenkins:v2.319.2 
        image: harbor.linuxarchitect.io/magedu/jenkins:v2.319.2 
        #imagePullPolicy: IfNotPresent
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          protocol: TCP
          name: http
        volumeMounts:
        - mountPath: "/apps/jenkins/jenkins-data/"
          name: jenkins-datadir-magedu
        - mountPath: "/root/.jenkins"
          name: jenkins-root-datadir
      volumes:
        - name: jenkins-datadir-magedu
          persistentVolumeClaim:
            claimName: jenkins-datadir-pvc
        - name: jenkins-root-datadir
          persistentVolumeClaim:
            claimName: jenkins-root-data-pvc

---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: magedu-jenkins
  name: magedu-jenkins-service
  namespace: magedu
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
    nodePort: 38080
  selector:
    app: magedu-jenkins