一起来学k8s 29.二进制k8s集群cronjob

二进制k8s集群cronjob

环境准备

##/etc/hosts
192.168.48.101 master01
192.168.48.102 master02
192.168.48.103 master03
192.168.48.201 node01
192.168.48.202 node02
192.168.48.54  nfs
## keepalived的vip
192.168.48.66
IP Hostname CPU Memory
192.168.48.101 master01 2 4G
192.168.48.102 master02 2 4G
192.168.48.103 master03 2 4G
192.168.48.201 node01 2 4G
192.168.48.202 node02 2 4G
192.168.48.54 nfs 2 4G
软件 版本
kubernetes 1.15.2
docker-ce 19.03
calico 3.8
etcd 3.3.13
CNI 0.8.1
coredns 1.4.0
metrics-server 0.3.3
ingress-controller 0.25.0
dashboard 1.10.1
Weave Scope 1.11.4
nfs v4
helm 2.14.3
harbor 1.1.1

cronjob

制作一个java环境镜像

获取官方基础镜像centos7.6

[root@master01 ~]# docker pull centos:centos7.6.1810

准备jdk8,maven

[root@master01 ~]# mkdir /root/java
[root@master01 ~]# cd /root/java/
[root@master01 java]# ll
total 199448
-rw-r--r-- 1 root root   9136463 Jun 16 12:47 apache-maven-3.6.1-bin.tar.gz
-rw-r--r-- 1 root root 195094741 Aug 15 13:30 jdk-8u221-linux-x64.tar.gz

制作基础镜像

[root@master01 java]# pwd
/root/java
[root@master01 java]# ll
total 199448
-rw-r--r-- 1 root root   9136463 Jun 16 12:47 apache-maven-3.6.1-bin.tar.gz
-rw-r--r-- 1 root root 195094741 Aug 15 13:30 jdk-8u221-linux-x64.tar.gz
[root@master01 java]# vim Dockerfile

#CentOS with JDK8

#build a new image with basic centos7.6.1810
FROM centos:centos7.6.1810

#author
MAINTAINER tk8s

#create directory
RUN mkdir /usr/local/java

#copy archive to the image
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
ADD apache-maven-3.6.1-bin.tar.gz /usr/local/java/

##make a symbol link
RUN ln -s /usr/local/java/jdk1.8.0_221  /usr/local/java/jdk 
RUN ln -s /usr/local/java/apache-maven-3.6.1  /usr/local/java/maven

##set ENV
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
ENV MAVEN_HOME /usr/local/java/maven
ENV PATH $JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$PATH
[root@master01 java]# docker build -t registry.tk8s.com/library/centos7:jdk8_221 ./
[root@master01 java]# docker run -i -t --name=test registry.tk8s.com/library/centos7:jdk8_221  /bin/sh
sh-4.2# mvn -v
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T19:00:29Z)
Maven home: /usr/local/java/maven
Java version: 1.8.0_221, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_221/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "5.2.2-1.el7.elrepo.x86_64", arch: "amd64", family: "unix"
sh-4.2# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
sh-4.2# echo $PATH
/usr/local/java/jdk/bin:/usr/local/java/jdk/jre/bin:/usr/local/java/maven/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

上传到harbor

[root@master01 java]# docker login registry.tk8s.com
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

[root@master01 java]# docker push registry.tk8s.com/library/centos7:jdk8_221
The push refers to repository [registry.tk8s.com/library/cent0s7]
c480f8fabd63: Pushed 
1bb63a8e4cb9: Pushed 
5380e90c66da: Pushed 
f2ee9360cf6b: Pushed 
bac1ef4bd29b: Pushed 
89169d87dbe2: Pushed 
jdk8_221: digest: sha256:8c5d7097c04718376a11a089d861f493fc2b8f37d29ee46a5b3abbae2844129b size: 1574

下载k8s-demo

[root@master01 ~]# git clone https://github.com/tangwei0928/k8s-demo.git
[root@master01 ~]# cd k8s-demo/
[root@master01 k8s-demo]# ll
total 12
drwxr-xr-x 2 root root   87 Aug 15 14:33 configs
drwxr-xr-x 3 root root   50 Aug 15 14:33 cronjob-demo
drwxr-xr-x 3 root root   50 Aug 15 14:33 dubbo-demo
drwxr-xr-x 3 root root   32 Aug 15 14:33 dubbo-demo-api
-rw-r--r-- 1 root root 5201 Aug 15 14:33 pom.xml
-rw-r--r-- 1 root root   62 Aug 15 14:33 README.md
drwxr-xr-x 3 root root   50 Aug 15 14:33 springboot-web-demo
drwxr-xr-x 4 root root   69 Aug 15 14:33 web-demo
[root@master01 k8s-demo]# cd /root/k8s-demo/cronjob-demo/
[root@master01 cronjob-demo]# ll
total 8
-rw-r--r-- 1 root root 190 Aug 15 14:33 Dockerfile
-rw-r--r-- 1 root root 425 Aug 15 14:33 pom.xml
drwxr-xr-x 3 root root  18 Aug 15 14:33 src

制作cronjob镜像

vim Dockerfile

FROM registry.tk8s.com/library/centos7:jdk8_221 as BUILD

COPY src /usr/app/src
COPY pom.xml /usr/app

RUN mvn -f /usr/app/pom.xml clean package -Dmaven.test.skip=true

FROM registry.tk8s.com/library/centos7:jdk8_221

MAINTAINER tk8s

ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV TZ=Asia/Shanghai

RUN mkdir /app

WORKDIR /app

COPY --from=BUILD /usr/app/target/cronjob-demo-1.0-SNAPSHOT.jar   /app/cronjob-demo.jar

ENTRYPOINT ["java", "-cp", "/app/cronjob-demo.jar", "com.mooc.demo.cronjob.Main"]

[root@master01 cronjob-demo]# docker build -t registry.tk8s.com/library/cronjob:demo ./
[root@master01 cronjob-demo]# docker run -it  registry.tk8s.com/library/cronjob:demo
I will working for 25 seconds!
All work is done! Bye!
[root@master01 cronjob-demo]# docker push registry.tk8s.com/library/cronjob:demo

编写cronjob yaml

vim cronjob-demo.yaml

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: registry.tk8s.com/library/cronjob:demo
          imagePullSecrets:
          - name: registry-secret 

加载yaml

[root@master01 ~]# kubectl apply  -f cronjob-demo.yaml 
cronjob.batch/cronjob-demo created

查看是否执行

[root@master01 ~]# kubectl get cronjob -o wide
NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE   CONTAINERS     IMAGES                                   SELECTOR
cronjob-demo   */1 * * * *   False     0                  41s   cronjob-demo   registry.tk8s.com/library/cronjob:demo   

[root@master01 ~]# kubectl get cronjob -o wide
NAME           SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE   CONTAINERS     IMAGES                                   SELECTOR
cronjob-demo   */1 * * * *   False     1        40s             81s   cronjob-demo   registry.tk8s.com/library/cronjob:demo   

[root@master01 ~]# kubectl get pod -o wide
NAME                                    READY   STATUS      RESTARTS   AGE     IP              NODE     NOMINATED NODE   READINESS GATES
cronjob-demo-1565861340-46rhb           0/1     Completed   0          2m31s   10.244.140.72   node02              
cronjob-demo-1565861400-9529r           0/1     Completed   0          101s    10.244.140.71   node02              
cronjob-demo-1565861460-7tfnj           0/1     Completed   0          40s     10.244.140.76   node02              
nfs-client-provisioner-74c85598-x6djg   1/1     Running     1          25h     10.244.140.96   node02              

[root@master01 ~]# kubectl logs cronjob-demo-1565861400-9529r 
I will working for 16 seconds!
All work is done! Bye!

你可能感兴趣的:(kubernetes)