容器服務kubernetes(ACK)基礎鏡像製作記錄

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" ]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章