准备步骤
准备一个deployment
1 打一个jdk基础镜像
2 将原来的启动文件jar包或者文件夹拷贝到打包机字上(这里以用脚本启动的spring cloud项目为例)
我这里选择在k8s-op-m01上服务器打镜像 在k8s-op-m01上启动服务
Dockerfile-java
Dockerfile-java
FROM centos:centos7.4.1708
MAINTAINER PDABC Enterprise Container Images <[email protected]>
ADD jdk-8u161-linux-x64.tar.gz /usr/local/java/
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
WORKDIR /data/module
ENV JAVA_HOME /usr/local/java/jdk1.8.0_161
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
docker build -f Dockerfile-java -t harbor.aircourses.com/kubernetes/jdk-1.8.0_161:v1
创建Dockerfile
Dockerfile-wehub-80
FROM harbor.aircourses.com/kubernetes/jdk-1.8.0_161:v1
MAINTAINER PDABC Enterprise Container Images <[email protected]>
COPY ac-wehub-80 /data/module/ac-wehub
ENTRYPOINT ["sh", "/data/module/ac-wehub/bin/start.sh","start"]
构建镜像
docker build -f Dockerfile-wehub-80 -t harbor.aircourses.com/kubernetes/wehub:v1.80 .
上传镜像
创建wehub的yaml
**注意 **这里使用了secret保存harbor信息 确保安全性
deployment-eureka.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
# deployment名字 和svc 和ingress绑定没关系
name: pre-wehub-dp
namespace: default
spec:
replicas: 1
# 在定义模板的时候必须定义labels,因为Deployment.spec.selector是必须字段,而他又必须和template.labels对应
selector:
matchLabels:
app: pre-wehub
# template里面定义的内容会应用到下面所有的副本集里面(例如depolyment下的pod),在template.spec.containers里面不能定义labels标签。可以kubectl get pods --show-labels查看
template:
metadata:
labels:
app: pre-wehub
env: pre
spec:
containers:
# containers名字 和svc 和ingress绑定没关系
- name: pre-wehub
image: harbor.aircourses.com/kubernetes/wehub:v1.80
ports:
- name: http
containerPort: 80
imagePullSecrets:
- name: myregistrykey
kubectl apply -f deployment-wehub.yaml
扫描二维码关注公众号,回复:
10016707 查看本文章
修改replicas为2个再次apply
2个pods来了
使用configmap 挂载conf bin文件夹
# 先创建一个configmap
kubectl create configmap wehub-config --from-file=/opt/kubernetes/Dockfile/cm-ac-wehub-80/conf/
# 查看configmap
kubectl get cm
# 查看详情
kubectl describe cm wehub-config
创建一个不带conf文件夹的镜像并push bin文件夹也可以做成configmap哦
注意 如果原来有conf文件夹会被清空
创建lifecycle-deployment-wehub.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
# deployment名字 和svc 和ingress绑定没关系
name: pre-cm-wehub-dp
namespace: default
spec:
replicas: 2
# 在定义模板的时候必须定义labels,因为Deployment.spec.selector是必须字段,而他又必须和template.labels对应
selector:
matchLabels:
app: pre-wehub
# template里面定义的内容会应用到下面所有的副本集里面(例如depolyment下的pod),在template.spec.containers里面不能定义labels标签。可以kubectl get pods --show-labels查看
template:
metadata:
labels:
app: pre-wehub
env: pre
spec:
containers:
# containers名字 和svc 和ingress绑定没关系
- name: pre-wehub
image: harbor.aircourses.com/kubernetes/wehub:v7.80
env:
- name: jobname
value: ac-wehub
# 加入lifecycle 否则退
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", 'for i in bin/start.sh conf/application.properties conf/logback.xml ;do sed -i "s/demojob/wehub/g" /data/module/ac-wehub/$i;done']
preStop:
exec:
command: ["/bin/sh", "-c", "sh /data/module/ac-wehub/bin/start.sh stop"]
ports:
- name: http
containerPort: 80
imagePullSecrets:
- name: myregistrykey