Dockerfile安装jenkins镜像+k8s多副本+service暴露ip和端口
当service有了port和nodePort之后,就可以对内/外提供服务。原理:kube-proxy在本地node上创建的iptables规则。Kube-Proxy 通过配置 DNAT规则(从容器出来的访问,从本地主机出来的访问两方面),将到这个服务地址的访问映射到本地的kube-proxy端口(随机端口)。然后Kube-Proxy 会监听在本地的对应端口,将到这个端口访问给代理到远端真实的 p
·
在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
更多推荐
已为社区贡献2条内容
所有评论(0)