社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
application.yml
#以实际项目的yml为准即可。
server:
port: 8888
spring:
application:
name: test-jar
#=================[Eureka]注册中心配置=======================#
eureka:
client:
fetch-registry: true
register-with-eureka: true
# 注册器中心地址
service-url:
defaultZone: http://192.168.1.9/eureka/eureka
# 在服务端定义的地址
instance:
leaseRenewalIntervalInSeconds: 10
# 在Eureka 中健康 点击的地址
health-check-url-path: /actuator/health
# 使用IP 注册 非Host
prefer-ip-address: true
ignore:
urls:
- /test/ignore
创建configmap,命名为testjarconfig,在yaml文件中要用到。
kubectl create configmap -n testnamespace testjarconfig --from-file=application.yml
vim testjar.yaml
直接替换testjar=项目名称,ingress路径使用的也是项目名称。namespace命名空间。
:%s/testjar/yourprojectname/g
configmap使用项目名称+config命名
nginx-rewrite规则还有其它的参考官方文档。
端口替换:8888
:%s/8888/yourport/g
命名空间提前创建好:
kubectl create namespace testnamespace
kind: Deployment
apiVersion: apps/v1
metadata:
name: testjar
namespace: testnamespace
spec:
replicas: 1
selector:
matchLabels:
app: testjar
template:
metadata:
labels:
app: testjar
spec:
containers:
- name: testjar
image: harbor.zlxk.com/public/testjar:2020.12.3.15.66
resources: # 资源限制
limits:
cpu: 2000m
memory: 1Gi
requests:
cpu: 200m
memory: 512Mi
livenessProbe: # 存活探针
failureThreshold: 2
httpGet:
path: /actuator/health
port: 8888
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 2
readinessProbe: # 就绪探针
failureThreshold: 2
httpGet:
path: /actuator/health
port: 8888
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 2
startupProbe: # 启动探针
httpGet:
path: /actuator/health #URL
port: 8888 #端口
scheme: HTTP #协议
initialDelaySeconds: 60 #延时60秒才开始检测
periodSeconds: 10 #检测频率
successThreshold: 1 #成功次数限制
failureThreshold: 15 #启动失败计次*检测频率10秒=最大失败时长150秒
timeoutSeconds: 1 #超时时间限制
volumeMounts:
- name: testjarconfig
mountPath: /config #挂载路径,会将www.conf放到该路径下。
readOnly: true #是否允许pod去修改
volumes:
- name: appconfig
configMap: #挂载configmap,使用name定位。
name: testjarconfig
---
apiVersion: v1
kind: Service
metadata:
name: testjar
namespace: testnamespace
spec:
selector:
app: testjar
ports:
- protocol: TCP
port: 8888
targetPort: 8888
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: testjar
namespace: testnamespace
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/proxy-body-size: 100M #413时使用
spec:
rules:
- http:
paths:
- path: /testjar(/|$)(.*)
pathType: Prefix
backend:
service:
name: testjar
port:
number: 8888
创建:
kubectl apply -f testjar.yaml
application.yml
server:
port: 8761
eureka:
instance:
hostname: ${EUREKA_HOST_NAME:peer1} #服务主机
appname: ${spring.application.name} #服务名,默认为 unknow,取spring.application.name
client:
register-with-eureka: ${BOOL_REGISTER:true} # 把服务中心当client 注册,默认true
fetch-registry: ${BOOL_FETCH:true} # 拉取 eureka server注册信息,默认true
service-url:
defaultZone: ${EUREKA_URL_LIST:http://peer1:8761/eureka/} # eureka server的地址
server:
enable-self-preservation: ${SELF_PRESERVATION:false} # 开启自我保护,为 true.
spring:
application:
name: ${EUREKA_APPLICATION_NAME:eureka-server}
eureka3.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: eureka
spec:
selector:
matchLabels:
app: eureka
serviceName: "eureka-service-internal"
replicas: 3
template:
metadata:
labels:
app: eureka
spec:
terminationGracePeriodSeconds: 10
containers:
- env:
- name: MY_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE # 传入当前命名空间
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: MY_IN_SERVICE_NAME # 因为pod 通过域名互相访问,需要使用headless 服务名称
value: eureka-service-internal
- name: EUREKA_APPLICATION_NAME
value: "eureka"
- name: EUREKA_REPLICAS
value: "3"
image: harbor.zlxk.com/public/eureka:3node # 这个镜像是修改后的
imagePullPolicy: IfNotPresent
name: eureka-container
ports:
- containerPort: 8761
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: eureka-service-internal
labels:
app: eureka-service-internal
namespace: default
spec:
clusterIP: None
ports:
- port: 8761
protocol: TCP
targetPort: 8761
selector:
app: eureka
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: eureka
namespace: default
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- path: /eureka(/|$)(.*)
pathType: Prefix
backend:
service:
name: eureka-service-internal
port:
number: 8761
eureka3.yaml中的修改过的镜像构建:先准备eureka.jar包和init.sh脚本。基于openjdk:8,其它不同的底包可能有不同的方式,请自行研究。
Dockerfile
FROM harbor.zlxk.com/public/openjdk:8
LABEL maintainer hxq/zlxk.com
ADD init.sh /init.sh
ADD eureka.jar /eureka.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8761
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
ENTRYPOINT ["/bin/bash","-c","source /init.sh"]
init.sh
参考网上资料。
#!/usr/bin/env bash
postFix="svc.cluster.local"
EUREKA_HOST_NAME="$MY_POD_NAME.$MY_IN_SERVICE_NAME.$MY_POD_NAMESPACE.$postFix"
export EUREKA_HOST_NAME=$EUREKA_HOST_NAME
BOOL_REGISTER="true"
BOOL_FETCH="true"
#根据参数选择erueka副本数量运行不同的配置
if [ $EUREKA_REPLICAS = 1 ]; then
echo "the replicas of eureka pod is one"
BOOL_REGISTER="false"
BOOL_FETCH="false"
EUREKA_URL_LIST="http://$EUREKA_HOST_NAME:8761/eureka/,"
echo " set the EUREKA_URL_LIST is $EUREKA_URL_LIST"
else
echo "the replicas of the eureka pod is $EUREKA_REPLICAS" > /log.txt
BOOL_REGISTER="true"
BOOL_FETCH="true"
for ((i=0 ;i<$EUREKA_REPLICAS; i ++))
do
temp="http://$EUREKA_APPLICATION_NAME-$i.$MY_IN_SERVICE_NAME.$MY_POD_NAMESPACE.$postFix:8761/eureka/,"
EUREKA_URL_LIST="$EUREKA_URL_LIST$temp"
echo $EUREKA_URL_LIST >> /log.txt
done
fi
# 每个 pod 的 EUREKA_URL_LIST 都设置成了全部的 pod 内部域名,自行选择是否向自己注册。
#如 eureka-0 的 EUREKA_URL_LIST 可以不加 http://eureka-0.eureka-service-internal.default.svc.cluster.local:8761/eureka/
EUREKA_URL_LIST=${EUREKA_URL_LIST%?}
export EUREKA_URL_LIST=$EUREKA_URL_LIST
export BOOL_FETCH=$BOOL_FETCH
export BOOL_REGISTER=$BOOL_REGISTER
echo "start jar...." >>/log.txt
java -jar /eureka.jar
yaml(deployment/service/ingress)
不需要配置文件,直接使用nginx底包打包即可。
kind: Deployment
apiVersion: apps/v1
metadata:
name: web-test
namespace: testnamespace
spec:
replicas: 1
selector:
matchLabels:
app: web-test
template:
metadata:
labels:
app: web-test
spec:
containers:
- name: web-test
image: harbor.zlxk.com/public/testweb:2020.10.13.17
---
apiVersion: v1
kind: Service
metadata:
name: web-test
namespace: testnamespace
spec:
selector:
app: web-test
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-test
namespace: testnamespace
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- path: /web-test(/|$)(.*)
pathType: Prefix
backend:
service:
name: web-test
port:
number: 80
提前准备:
a、jar包
b、项目端口
c、本地仓地址及提前登陆
Dockerfile
底包自选:java,JDK
FROM harbor.zlxk.com/public/openjdk:8-jdk-alpine
LABEL maintainer hxq/zlxk.com
ADD *.jar /app.jar
ARG port
EXPOSE $port
ENTRYPOINT [ "sh", "-c", "java -Duser.timezone=GMT+08 -Dfile.encoding=utf-8 -jar /app.jar" ]
RUN if [ "x$port" = "x" ] ; then echo Argument not provided ; else echo Argument is $arg ; fi
buildjarimg.sh
传入:$1=打包后的镜像名称,$2=暴露端口。脚本功能涉及到创建configmap等,适用于第一次部署或删除配置重新部署。
#!/bin/bash
dir=$(cd $(dirname $0);pwd) #获取当前路径
echo call format:imagename port
imagename=$1 #打成的images名称,传入参数决定Image名称
port=$2 #port #暴露端口
harbor='harbor.zlxk.com/public' #本地仓项目地址路径
tag=`date +%-Y`.`date +%-m`.`date +%-d`.`date +%-H`.`date +%-M` #TAG用时间到分钟
if [ "x$imagename" = "x" ] ; then echo imagename must set! ; exit 1; else echo ----imagename is: $imagename ; fi
if [ "x$port" = "x" ] ; then echo port must set! ;exit 1; else echo ----imagename is: $imagename ; fi
#判断传入参数是否完整
docker build -t $harbor/$imagename:$tag . --build-arg port=$port
#使用指定r:rag创建镜像
docker push $harbor/$imagename:$tag
#抢着到私仓
echo $tag
#输出TAG用于dashboard上使用
docker rmi $harbor/$imagename:$tag
#删除本机镜像
Dockerfile
FROM harbor.zlxk.com/public/nginx
MAINTAINER "hxq"
LABEL description="web"
COPY dist/ /usr/share/nginx/html/
#将dist下的文件复制到nginx/html/下
EXPOSE 80
buildwebimg.sh
调用时传入 imagename即可。
#!/bin/bash
dir=$(cd $(dirname $0);pwd) #获取当前路径
echo call format:imagename,default port 80 #暴露80端口
imagename=$1 #打成的images名称,传入参数决定Image名称
port=80 #port
harbor='harbor.zlxk.com/public'
tag=`date +%-Y`.`date +%-m`.`date +%-d`.`date +%-H`
if [ "x$imagename" = "x" ] ; then echo imagename must set! ; exit 1; else echo ----imagename is: $imagename ; fi
if [ "x$port" = "x" ] ; then echo port must set! ;exit 1; else echo ----imagename is: $imagename ; fi
#判断参数
docker build -t $harbor/$imagename:$tag . --build-arg port=$port
docker push $harbor/$imagename:$tag
echo $harbor/$imagename >tag.txt
echo $harbor/$imagename:$tag
docker rmi $harbor/$imagename:$tag
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!