image.png

把服务做到镜像里

下载基础镜像

  1. 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!