K8S发布系统-发布访问配置

接上一篇,后续操作

发布配置

安装插件

安装SSH,Docker,Docker Pipeline, docker-build-step, Kubernetes插件。

设置Docker打包机(若使用本地安装的docker进行打包,此操作忽略):

远程打包机(220.143)开启端口:

vim /etc/systemd/system/docker.service
...
ExecStart=/opt/kube/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
...
systemctl daemon-reload
systemctl restart docker
netstat -nlput | grep docker

Jenkins设置“系统管理——节点管理——配置云”添加远程Docker:

创建基础Docker镜像

在打包机(220.143)上操作:

拉取官方系统镜像

docker pull centos
docker images

准备要添加进镜像的文件:

mkdir docker-baseimg
cd docker-baseimg
vim java.sh
export JAVA_HOME=/usr/local/jdk1.8.0_271
export PATH=$JAVA_HOME/bin:$PATH
vim start-jar.sh
#!/bin/bash
# Author:Chris                          __On 2021/01/18
# =====================Description=====================
# [Features]: This is for Start a jar Package in Docker Container.
# =====================================================

# <----------------------------Configure Start--------------------------->
Base=$(cd `dirname ${BASH_SOURCE}` ; pwd)
App_Name="app.jar"
App_Execute="${Base}/${App_Name}"
Log_Path="${Base}/logs"
App_Log="${Log_Path}/app-stdout.log"

Xms=${JVM_XMS:-"256m"}
Xmx=${JVM_XMX:-"512m"}
Start_Opts="-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -XX:+UseCMSInitiatingOccupancyOnly -XX:-UseLargePages -XX:+UseFastAccessorMethods -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${Log_Path}/java_heapdump.hprof"
[ ! -z "${PROFILE_ACTIVE}" ] && S_Profile="--spring.profiles.active=${PROFILE_ACTIVE}"
Ext_Args="$@"
# <----------------------------Configure  End---------------------------->
if [ ! -f "${App_Execute}" ];then
    echo "ERROR: Can not find execute file: ${App_Execute}."
    exit 1
fi
if [ -z "${JAVA_HOME}" ];then
    source /etc/profile.d/java.sh
fi
[ ! -d "${Log_Path}" ] && mkdir -p ${Log_Path}

# 使用exec command, 会用 command 进程替换当前shell进程, 并且保持 PID 不变。
# 为保证Docker容器不会终止, 脚本需一直处于运行状态, 
# 故不要在最后添加 & 让java在后台另起进程运行, 而是直接替代当前脚本运行。
# Tips: docker logs显示容器内/dev/stdout, /dev/stderr的内容, 阿里云k8s也是收集此日志;
#       故运行时就不进行日志重定向($App_Log)及 2>&1 了
exec java -server -Xms${Xms} -Xmx${Xmx} -jar ${App_Execute} ${Start_Opts} ${S_Profile} ${Ext_Args}
chmod +x start-jar.sh
vim Dockerfile
FROM centos as build
RUN sed -i "/^alias mv/a\alias ll='ls -lh --time-style=\"+%Y/%m/%d %H:%M\" --color'" ~/.bashrc
RUN mkdir -p /app/logs
ADD jdk-8u271-linux-x64.tar.gz /usr/local/
ADD java.sh /etc/profile.d/
ADD start-jar.sh /app/
RUN cd /usr/local/jdk1.8.0_271 && rm -rf src.zip \
    lib/visualvm jre/lib/plugin.jar jre/bin/javaws \
    jre/lib/desktop jre/plugin jre/lib/deploy* \
    jre/lib/amd64/libglass.so \
    jre/lib/amd64/libgstreamer-lite.so \
    jre/lib/amd64/libjavafx*.so \
    jre/lib/amd64/libjfx*.so
FROM scratch
COPY --from=build / .
LABEL maintainer="Chris"
WORKDIR /app

Dockerfile中的相关命令解释:

  • FROM 指的是依赖的基础镜像,如scratch表示的是空白的,从零开始的。依赖的镜像可以是本地的,也可以是远程库的
  • ADD 指的是添加本地文件到镜像中,如果遇到linux可解压格式文件,会自动解压,这就是为什么整个文件中没有对tar.gz进行显式解压
  • RUN 运行命令,如安装软件的相关命令
  • CMD 设置启动Container时默认执行的命令,这个可以在启动容器时覆盖
  • 第二阶段 FROM 空库scratch后,将现存所有文件复制过来,从零构建新镜像,减少不必要的层,缩小镜像体积

制作镜像:

docker build -t baseimg-jdk8:c8 .
docker images

试运行基础镜像:

docker run -it --rm baseimg-jdk8:c8 /bin/bash

上传基础镜像到Harbor:

vim /etc/docker/daemon.json
...
  "insecure-registries": ["127.0.0.1/8","nw-harbor.xxx.cc"],
...
systemctl restart docker
docker info

 

Tips:若要从自建Harbor上拉取镜像,此配置需要在群集内所有worker上都操作。若Harbor配置了HTTPS访问则可不用。

docker login http://nw-harbor.xxx.cc/ -u admin -p Nw-Harbor123

docker tag baseimg-jdk8:c8 nw-harbor.xxx.cc/library/baseimg-jdk8:c8
docker images

docker push nw-harbor.xxx.cc/library/baseimg-jdk8:c8

登陆Harbor,即可看到已上传:

在顶级目录新建一个项目:

Tips: 本地打包下载基础镜像方法:

docker save -o baseimg-jdk8.tar baseimg-jdk8:c8

导入还原使用:

docker load -i baseimg-jdk8.tar

 

发表评论

error: Content is protected !!