在node节点使用Dcokerfile安装jenkins镜像

将需要的安装包拉入新创建的tomcat目录下

[root@k8s-node2 tomcat]# ls
apache-tomcat-8.5.45.tar.gz  Dockerfile  jdk-8u211-linux-x64.tar.gz  jenkins.war

Dockerfile内容

[root@k8s-node2 tomcat]# cat Dockerfile 
FROM centos:7
MAINTAINER docker-server
ENV JAVA_HOME /usr/local/jdk1.8.0_211
ENV TOMCAT_HOME /usr/local/apache-tomcat-8.5.45
ENV PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
ADD apache-tomcat-8.5.45.tar.gz /usr/local/
ADD jdk-8u211-linux-x64.tar.gz /usr/local/
RUN rm -rf /usr/local/apache-tomcat-8.5.45/webapps/*
ADD jenkins.war /usr/local/apache-tomcat-8.5.45/webapps
RUN rm -rf apache-tomcat-8.5.45.tar.gz  jdk-8u211-linux-x64.tar.gz
EXPOSE 8080
ENTRYPOINT ["/usr/local/apache-tomcat-8.5.45/bin/catalina.sh","run"]

创建jenkins的镜像

注意当前路径

[root@k8s-node2 tomcat]# docker build -t jenkins:v1 .

在master节点上创建jenkins的Deployment

可指定节点位置,但需要做解析,或者在每个节点安装jenkins的镜像

[root@k8s-master prome]# cat jenkins-dy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-deployment   #定义Deployment名
spec:
  selector:
    matchLabels:
      app: jenkins
  replicas: 1
  template:
    metadata:
      labels:
        app: jenkins  #定义标签,要和service中对应
    spec:
      containers:    #设置容器
      - name: jenkins 
        image: jenkins:v1   #对应着node节点里的版本号
        ports:
        - containerPort: 8080   #容器开放端口为tomcat默认端口号
      nodeName: k8s-node2  #创建到指定的node节点上

在master上创建jenkins的service,采用NodePort类型,可暴露port和ip

NodePort
外网client—>nodeIP+nodePort—>podIP+PodPort

为每个节点暴露一个端口,通过nodeip + nodeport可以访问这个服务,同时服务依然会有cluster类型的ip+port。内部通过clusterip方式访问,外部通过nodeport方式访问。
需要转发数据包,修改目标地址和源地址,需要iptables,k8s中的kube-proxy可自动用iptables转发规则

安装iptables(但是需要关闭iptables),创建service之后k8s会自动添加规则到Iptables里面,而且会生效(虽然iptables处于关闭状态)
[root@kub-k8s-master prome]# yum install -y iptables iptables-services
[root@k8s-master prome]# cat jenkins-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: jenkins-svc
spec:
  type: NodePort  #类型
  ports:
    - port: 8088   #clusterIP端口号,可自定义,要与其他端口号不一致
      nodePort: 30003  ##30000-32767之内,node节点端口号,可自定义
      targetPort: 8080  #容器的端口号
  selector:   #选择器 
    app: jenkins  #识别pod上的标签,要对应着label

创建deployment和service

[root@k8s-master prome]# kubectl apply -f jenkins-dy.yaml
[root@k8s-master prome]# kubectl apply -f jenkins-svc.yaml

测试访问

使用node节点ip+端口30003/jenkins
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐