• 本地Java代码打成镜像提交到K8S部署


    场景定义

    需要有一个支持Python/java环境的镜像,本地研发的代码在阿里云ACK集群中能够正常启动执行对应的Python与Java程序。

    背景说明

    为了简化搭建K8S集群及容器镜像服务的过程,我们选择直接使用阿里云上的SAAS化服务:ACK及ACR。能够极大降低了学习K8S门槛。

     ACR仓库配置

    1、配置ACR访问密码

    当执行docker push镜像的时候需要有访问凭证,密码就是在这块设置。

    2、设置镜像仓库

    3、为了简化配置,我把ACR的一些安全都先关了。比如支持公网的匿名访问。

    这样在ACK里面启动POD的时候就不需要再配置访问策略。先简化一下

    制作镜像

    基础镜像Dockerfile

    1. FROM alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3
    2. RUN yum -y install python3.8 && \
    3. yum -y install java && \
    4. curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
    5. python3 get-pip.py && \
    6. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple alibabacloud_sts20150401==1.1.1 && \
    7. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple aliyun-python-sdk-sts==3.1.0

    说明:这个基础镜像可以在阿里云ACR上看到。当然你也可以选择其他开源镜像。

    打镜像

    docker build -t dsafd-registry.cn-shenzhen.cr.aliyuncs.com/yaofangapp/basicapp:v0.1 -f Dockerfile ./

    Java环境Dockerfile(业务镜像)

    1. FROM dsafd-registry.cn-shenzhen.cr.aliyuncs.com/yaofangapp/basicapp:v0.1
    2. # 这里替换成你自己的应用名
    3. ARG APP_NAME=calcula
    4. ARG ENV_TYPE=production
    5. # 容器运行时的环境变量
    6. ENV APP_NAME=$APP_NAME
    7. ENV APP_ENVIRONMENT=$ENV_TYPE
    8. COPY bin /root/${APP_NAME}/bin
    9. RUN mkdir -p /root/${APP_NAME}/logs && mkdir -p /root/${APP_NAME}/target
    10. VOLUME /root/${APP_NAME}/logs
    11. COPY ${APP_NAME}.jar /root/${APP_NAME}/target

    打包脚本

    1. #!/bin/bash
    2. # 执行脚本:./build.sh v0.1
    3. TAG=$1
    4. mvn clean package -DskipTests
    5. cp target/calcula.jar calcula.jar
    6. # yaofangapp
    7. docker build -t dsafd-registry.cn-shenzhen.cr.aliyuncs.com/yaofangapp/calcula:${TAG} -f Dockerfile_biz ./
    8. docker push dsafd-registry.cn-shenzhen.cr.aliyuncs.com/yaofangapp/calcula:${TAG}
    9. docker images | grep calcula
    10. rm calcula.jar

    应用部署

    部署的Yaml文件

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: basicapp
    5. spec:
    6. containers:
    7. - image: dsafd-registry-vpc.cn-shenzhen.cr.aliyuncs.com/yaofangapp/basicapp:v0.1
    8. command:
    9. - sh
    10. - -c
    11. - 'sleep inf'
    12. name: test

    可能遇到的问题

    1、ACK无法访问到ACR里面的VPC地址

    Failed to pull image "yf-test-registry-vpc.cn-shanghai.cr.aliyuncs.com/yaofang/yaofang-app:v0.1": rpc error: code = Unknown desc = failed to pull and unpack image "yf-test-registry-vpc.cn-shanghai.cr.aliyuncs.com/yaofang/yaofang-app:v0.1": failed to resolve reference "yf-test-registry-vpc.cn-shanghai.cr.aliyuncs.com/yaofang/yaofang-app:v0.1": failed to do request: Head "https://yf-test-registry-vpc.cn-shanghai.cr.aliyuncs.com/v2/yaofang/yaofang-app/manifests/v0.1": dial tcp: lookup yf-test-registry-vpc.cn-shanghai.cr.aliyuncs.com on 100.100.2.138:53: no such host

    解决办法

    配置专有网络的访问控制, 参考:配置专有网络的访问控制 - 容器镜像服务 ACR - 阿里云

    需要配置

    视频讲解

    本地Java代码打成镜像提交到K8S部署

  • 相关阅读:
    这就叫速度,并发编程深度解析实战七天杀上 GitHub 榜首
    mycat实现分库分表小例子
    利用FastAPI和OpenAI-Whisper打造高效的语音转录服务
    linux 安装mysql8.0 超详细教程(实战多次)
    【pytorch深度学习 应用篇02】训练过程可视化
    完全二叉树问题
    收钱吧研发效能实践之工具篇
    互联网行业,常见含金量高的证书,看看你有几个?
    计算机网络笔记(王道考研) 第三章:数据链路层
    PgSQL-执行器机制-Unique算子
  • 原文地址:https://blog.csdn.net/cainiao_user/article/details/126553521