把服务做到镜像里
下载基础镜像
docker pull hub.hexiaodai.com/kubernetes/openjdk:8-jre-alpine
打包项目(MVN 构建项目)
[root@m1 cronjob-demo]# ll
总用量 12
-rw-r--r--. 1 root root 658 12月 13 13:07 cronjob-demo.iml
-rw-r--r--. 1 root root 190 12月 13 13:07 Dockerfile
-rw-r--r--. 1 root root 535 12月 13 13:07 pom.xml
drwxr-xr-x. 3 root root 18 12月 13 13:07 src
drwxr-xr-x. 6 root root 125 12月 13 13:07 target
[root@m1 cronjob-demo]# mvn package
[root@m1 cronjob-demo]# cd target/
[root@m1 target]# ll
总用量 4
drwxr-xr-x. 3 root root 17 12月 13 13:07 classes
-rw-r--r--. 1 root root 2671 12月 13 13:36 cronjob-demo-1.0-SNAPSHOT.jar
drwxr-xr-x. 3 root root 25 12月 13 13:07 generated-sources
drwxr-xr-x. 2 root root 28 12月 13 13:07 maven-archiver
drwxr-xr-x. 3 root root 35 12月 13 13:07 maven-status
构建镜像 - Dockerfile
FROM hub.hexiaodai.com/kubernetes/openjdk:8-jre-alpine
COPY target/cronjob-demo-1.0-SNAPSHOT.jar /cronjob-demo.jar
ENTRYPOINT ["java", "-cp", "/cronjob-demo.jar", "com.mooc.demo.cronjob.Main"]
build
docker build -t cronjob:v1 .
测试镜像
docker run -it cronjob:v1
[root@m1 ~]# docker run -it cronjob:v1
I will working for 13 seconds!
All work is done! Bye!
发布镜像
[root@m1 ~] docker tag cronjob:v1 hub.hexiaodai.com/kubernetes/cronjob:v1
[root@m1 ~] docker push hub.hexiaodai.com/kubernetes/cronjob:v1
制作 k8s 服务,并调度
编写 k8s 配置文件
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronjob-demo
spec:
schedule: "*/1 * * * *"
successfulJobsHistoryLimit: 3
suspend: false
concurrencyPolicy: Forbid
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
metadata:
labels:
app: cronjob-demo
spec:
restartPolicy: Never
containers:
- name: cronjob-demo
image: hub.hexiaodai.com/kubernetes/cronjob:v1
kubectl apply -f cronjob.yaml
坑
hub.hexiaodai.com/kubernetes/cronjob:v1 镜像拉取失败,由于我们的镜像仓库使用 http 协议,k8s 使用 https 协议去访问:Get [https://hub.hexiaodai.com/v2/:](https://hub.hexiaodai.com/v2/:) dial tcp 192.168.109.10:443。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m56s default-scheduler Successfully assigned default/cronjob-demo-1639375920-m5b2d to s2
Normal Pulling 4m24s (x4 over 5m44s) kubelet, s2 Pulling image "hub.hexiaodai.com/kubernetes/cronjob:v1"
Warning Failed 4m24s (x4 over 5m44s) kubelet, s2 Failed to pull image "hub.hexiaodai.com/kubernetes/cronjob:v1": rpc error: code = Unknown desc = Error response from daemon: Get https://hub.hexiaodai.com/v2/: dial tcp 192.168.109.10:443: connect: connection refused
Warning Failed 4m24s (x4 over 5m44s) kubelet, s2 Error: ErrImagePull
Normal BackOff 4m10s (x6 over 5m43s) kubelet, s2 Back-off pulling image "hub.hexiaodai.com/kubernetes/cronjob:v1"
Warning Failed 3m56s (x7 over 5m43s) kubelet, s2 Error: ImagePullBackOff
修改 /etc/docker/daemon.json
vim /etc/docker/daemon.json
# 添加前缀 http
"insecure-registries": ["http://hub.hexiaodai.com"]
查看 cronjob 运行情况
[root@m1 nginx]# k get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cronjob-demo-1639375920-z9h9g 0/1 Completed 0 9m48s 10.244.1.26 s1 <none> <none>
cronjob 执行完毕,并且被调度到 s1 节点上
[root@s1 harbor]# docker ps -a | grep cronjob
...
4dcf0ac094b9
# 查看 cronjob 日志
[root@s1 harbor]# docker logs 4dcf0ac094b9
I will working for 25 seconds!
All work is done! Bye!

