容器服务kubernetes(ACK)基础镜像制作记录

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 1.概述  容器服务云上环境与弹内差别较大,很多弹内支持默认埋点的 agent 在云上没法使用,同时需要预先部署一些云上环境需要的 agent, 因而云上的基础镜像跟弹内差异较大,需要从centos基础镜像开始配置环境。

1.概述

  容器服务云上环境与弹内差别较大,很多弹内支持默认埋点的 agent 在云上没法使用,同时需要预先部署一些云上环境需要的 agent, 因而云上的基础镜像跟弹内差异较大,需要从centos基础镜像开始配置环境。
  容器镜像服务在云上,当云效部署时,需要从镜像服务拉取基础镜像建立镜像,因而需要将基础镜像 push 到镜像服务仓库中。
  为了方便镜像 push 到镜像仓库,因而采用一个跳板机制作镜像,并上传到镜像仓库的方式来加快镜像制作和上传。
最终执行环境:

  • 本地办公电脑执行打包脚本命令;
  • 跳板机打包镜像;
  • 跳板机镜像上传到镜像仓库。

2. 镜像制作:

  主要步骤有:

  1. 跳板机环境安装 Docker;
  2. 上传镜像中需要的第三方包和基础软件安装包上传到跳板机,比如 jdk, agent等;
  3. 编写本地执行脚本,执行镜像打包,并 push 镜像到仓库;

## 2.1 镜像打包跳板机环境配置:
  安装 docker:

1、检查内核版本,必须是3.10及以上     
uname -r   
注:如果版本低于3.10,使用 yum update 升级   
2、安装docker  
yum install docker
3、输入y确认安装
4、启动docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker -v
Docker version 1.12.6, build 3e8e77d/1.12.6
5、开机启动docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
6、停止docker
systemctl stop docker

2.2 上传安装依赖包:

上传 jdk, Agent 等应用依赖的第三方包:

#!/bin/bash
env=$1

if [ ! -n "${env}" ]; then
  echo "Usage: ./upload.sh env "
  echo "env is resource upload or erase enviroment name:daily or online"
  exit 1
fi
## 设置跳板机登录证书和账号等
if [ ${env} == "online" ]; then
    echo "upload wukong resource to online jump machine."
    source "../ssh-production.sh" 
else
    echo "upload wukong resource to daily jump machine."
    source "../ssh-testing.sh"
fi
## 删除原有资源目录
echo "remove file on jump machine ssh  -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE}  'rm -rf /home/admin/resources/; mkdir /home/admin/resources/;'"
## ssh  -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE}  "rm -rf /home/admin/resources; mkdir /home/admin/resources/;"
## 上传依赖软件
echo "scp packag/home/admin/resources/target to jump machine ${JUMP_MACHINE}"
scp -i ${JUMP_CERT} -r ./jdk/  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT} -r ./sunfire/  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT}  ./tengine-yun-1.0.2-1652752.el7u2.x86_64.rpm  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT}  ./taobao-tomcat-7.0.59.3.tar.gz  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT}  ./start.sh  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources
scp -i ${JUMP_CERT}  ./shutdown.sh  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/resources

echo "upload success."

2.3 编写执行脚本:

本地办公环境通过 ssh 执行打包命令:

#!/bin/bash
APP_NAME=my-pandora-boot-base
NAMESPACE=app-base
REPO=${APP_NAME}
VERSION=$1

source "../../../../ssh-production.sh" 

if [ ! -n "${VERSION}" ]; then
  echo "Usage: ./build.sh version "
  echo "version is docker image version"
  exit 1
fi

cd ../../../

cd APP-META/docker-config/

echo "复制需要包含的 jdk,sunfire,key,i18n等 on jump machine ${JUMP_USER}@${JUMP_MACHINE}"
ssh -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE} "mkdir -p /home/admin/${APP_NAME}/dev-base/; \
    cp /home/admin/resources/taobao-hsf.tgz /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/crontabs-1.11.rpm /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/cronie-1.4.11.rpm /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/start-sunfire.sh /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/tsar-2.1.33-1568425.82ced85.el7.x86_64.rpm /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/sunfire/sunfire-agent-1.0.10-20190916175607.noarch.rpm /home/admin/${APP_NAME}/dev-base; \
    cp /home/admin/resources/jdk/ajdk-8_3_6-b129-8.3.6-1207912.alios7.x86_64.rpm /home/admin/${APP_NAME}/dev-base "
    
echo "scp package scp -i ${JUMP_CERT} -r ./dev-base/  ${JUMP_USER}@${JUMP_MACHINE} " 
scp -i ${JUMP_CERT} -r ./dev-base/  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/${APP_NAME}/
scp -i ${JUMP_CERT} -r ./environment/  ${JUMP_USER}@${JUMP_MACHINE}:/home/admin/${APP_NAME}/

echo "exec : docker build on ${JUMP_USER}@${JUMP_MACHINE} --build-arg APP_NAME=${APP_NAME} --build-arg APPID=${APPID} --pull -f Dockerfile_base -t registry-vpc.cn-north-2-gov-1.aliyuncs.com/${NAMESPACE}/${REPO}:${VERSION} ."
ssh -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE} "cd /home/admin/${APP_NAME}/;sudo docker build --build-arg APPNAME=${APP_NAME} --build-arg  --pull -f ./dev-base/Dockerfile_base -t registry-vpc.cn-north-2-gov-1.aliyuncs.com/${NAMESPACE}/${REPO}:${VERSION} ."

echo "exec : docker push registry-vpc.cn-north-2-gov-1.aliyuncs.com/${NAMESPACE}/${REPO}:${VERSION}"
ssh -i ${JUMP_CERT} -t ${JUMP_USER}@${JUMP_MACHINE} "cd /home/admin/${APP_NAME}/;sudo docker push registry-vpc.cn-north-2-gov-1.aliyuncs.com/${NAMESPACE}/${REPO}:${VERSION}"

echo "docker push done"

2.4 dockerfile 编写:

# 基于centos 基础镜像
FROM centos:7.4.1708

LABEL name="pandoraBoot Base Image" \
    vendor="alibaba" \
    build-date="20181201"
    
ENV LANG=en_US.UTF-8 \
    JAVA_HOME=/opt/taobao/java \
    TZ=PRC

# 安装工具软件,建立目录等
RUN adduser admin && \
mkdir -p /home/admin/lightapi/ && \
yum install -y telnet && \
yum install -y less && \
mkdir -p /home/admin/logs/ && \
mkdir -p /home/admin/logs/$BUILD_APP_NAME && \
yum install -y sudo && \
yum install -y unzip && \
yum install -y which && \
yum install -y iproute iproute-doc 

# 增加中间件新提供的 pandora 包 taobao-hsf.sar
COPY dev-base/taobao-hsf.tgz /home/admin/taobao-hsf.tgz
COPY dev-base/ajdk-8_3_6-b129-8.3.6-1207912.alios7.x86_64.rpm /home/admin/ajdk-8_3_6-b129-8.3.6-1207912.alios7.x86_64.rpm
COPY dev-base/sunfire-agent-1.0.10-20190916175607.noarch.rpm /home/admin/sunfire-agent-1.0.10-20190916175607.noarch.rpm
COPY dev-base/tsar-2.1.33-1568425.82ced85.el7.x86_64.rpm /home/admin/tsar-2.1.33-1568425.82ced85.el7.x86_64.rpm
COPY dev-base/cronie-1.4.11.rpm /home/admin/cronie-1.4.11.rpm
COPY dev-base/crontabs-1.11.rpm /home/admin/crontabs-1.11.rpm

# 解压安装
RUN rpm -ivh "/home/admin/ajdk-8_3_6-b129-8.3.6-1207912.alios7.x86_64.rpm" && \
ln -s /opt/taobao/install/ajdk-8_3_6-b129 /opt/taobao/java

#测试环境 setenv.sh
COPY dev-base/start-sunfire.sh /home/admin/start-sunfire.sh

# 拷贝执行程序的 shell 文件
COPY environment/common/bin/ /home/admin/appconf/bin/

COPY dev-base/init /home/admin/
COPY dev-base/init.sh /home/admin/
# 增加国际化资源
COPY dev-base/srvcode_i18nResourcesFile /home/admin/logs/mcms/i18n/i18nResourcesFile

# 安装sunfire监控agent
USER root
RUN rpm -ivh /home/admin/tsar-2.1.33-1568425.82ced85.el7.x86_64.rpm  && \
rpm -ivh --nodeps /home/admin/cronie-1.4.11.rpm  && \
rpm -ivh --nodeps /home/admin/crontabs-1.11.rpm && \
rpm -ivh /home/admin/sunfire-agent-1.0.10-20190916175607.noarch.rpm && \
echo "source '/home/admin/start-sunfire.sh' " >> /home/admin/start.sh && \
chmod -R a+x /home/admin/appconf/bin/ && \
chmod +x /home/admin/*.sh

WORKDIR /home/admin/appconf/bin

ENTRYPOINT ["/home/admin/start.sh" ]
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
28天前
|
人工智能 弹性计算 运维
ACK Edge与IDC:高效容器网络通信新突破
本文介绍如何基于ACK Edge以及高效的容器网络插件管理IDC进行容器化。
|
17天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
90 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
1天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
24 10
|
14天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
79 19
|
29天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
15天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
7天前
|
人工智能 运维 监控
容器服务Kubernetes场景下可观测体系生产级最佳实践
阿里云容器服务团队在2024年继续蝉联Gartner亚洲唯一全球领导者象限,其可观测体系是运维的核心能力之一。该体系涵盖重保运维、大规模集群稳定性、业务异常诊断等场景,特别是在AI和GPU场景下提供了全面的观测解决方案。通过Tracing、Metric和Log等技术,阿里云增强了对容器网络、存储及多集群架构的监控能力,帮助客户实现高效运维和成本优化。未来,结合AI助手,将进一步提升问题定位和解决效率,缩短MTTR,助力构建智能运维体系。
|
25天前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
260 10
|
29天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
2天前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 下一篇
    开通oss服务