winloong 3 years ago
parent
commit
aef3985762
  1. 18
      syncimages/app/Dockerfile
  2. 4
      syncimages/app/entrypoint.sh
  3. 48
      syncimages/app/syncimages.py

18
syncimages/app/Dockerfile

@ -1,22 +1,26 @@
FROM docker:20-dind-rootless FROM docker:20-dind-rootless
USER root USER root
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \ RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
&& apk add --no-cache python3 py3-pip shadow \ && apk add --no-cache python3 py3-pip shadow su-exec \
&& ln -sf python3 /usr/bin/python \ && ln -sf python3 /usr/bin/python \
&& python3 -m ensurepip \ && python3 -m ensurepip \
&& pip3 install --no-cache --upgrade pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple \ && pip3 install --no-cache --upgrade pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& pip install --no-cache kubernetes requests docker -i https://pypi.tuna.tsinghua.edu.cn/simple \ && pip install --no-cache kubernetes requests docker -i https://pypi.tuna.tsinghua.edu.cn/simple \
&& rm -rf /var/cache/apk/* \
&& usermod -aG ping rootless \ && usermod -aG ping rootless \
&& echo "#!/bin/sh \n\ && echo $'#!/bin/sh \n\
python syncimages.py " >> /etc/periodic/daily/sync-images \ python /app/syncimages.py' >> /etc/periodic/daily/sync-images \
&& chmod +x /etc/periodic/daily/sync-images && chmod +x /etc/periodic/daily/sync-images \
&& apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk del tzdata shadow \
&& rm -rf /var/cache/apk/*
WORKDIR /app WORKDIR /app
COPY . . COPY . .
RUN chown -R rootless:rootless /app RUN chown -R rootless /app
USER rootless ENTRYPOINT ["./entrypoint.sh"]

4
syncimages/app/entrypoint.sh

@ -0,0 +1,4 @@
#!/bin/sh
crond;
su rootless -c 'dockerd-entrypoint.sh'

48
syncimages/app/syncimages.py

@ -6,16 +6,37 @@ from docker import errors
from kubernetes import client, config from kubernetes import client, config
import requests import requests
import time import time
import logging.config
import logging import logging
from logging import handlers
from datetime import datetime
config.load_kube_config("/app/config") config.load_kube_config("/app/config")
apps_v1 = client.AppsV1Api() apps_v1 = client.AppsV1Api()
client = None client = None
logging.config.fileConfig("/app/logging.ini")
logger = logging.getLogger('sync-images')
ns_list = ['anxincloud', 'environment', 'smart-city', 'smart-xxx', 'free-sun', 'ops'] ns_list = ['anxincloud', 'environment', 'smart-city', 'smart-xxx', 'free-sun', 'ops']
logger = logging.getLogger('sync-images')
logger.setLevel(logging.DEBUG)
log_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler = logging.FileHandler('/app/log.log')
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(log_formatter)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(log_formatter)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
# time_rotating_file_handler = handlers.TimedRotatingFileHandler(filename='/app/log.log', when='w')
# time_rotating_file_handler.setLevel(logging.INFO)
# time_rotating_file_handler.setFormatter(log_formatter)
# logger.addHandler(time_rotating_file_handler)
def list_deployment(ns): def list_deployment(ns):
image_list = [] image_list = []
@ -50,17 +71,16 @@ def get_image_latest_tag(project, image):
def exist_images(name): def exist_images(name):
# image = client.images.get('hello-world')
try: try:
client.images.get(name) client.images.get(name)
return True return True
except errors.ImageNotFound: except errors.ImageNotFound:
return False return False
except errors.APIError as err: except errors.APIError as err:
print(err) logger.error(err)
return False return False
except Exception as ex: except Exception as ex:
print(ex) logger.error(ex)
return False return False
@ -75,17 +95,15 @@ def pull_images():
logger.info("镜像 {}:{} 下载完成。".format(image_url, image['tag'])) logger.info("镜像 {}:{} 下载完成。".format(image_url, image['tag']))
def write_out_2_file(line):
with open("/app/log2.log", "a") as file:
file.writelines(line)
if __name__ == '__main__': if __name__ == '__main__':
count = 0
while count < 10:
print("wait ... ...")
time.sleep(5)
count += 1
while not os.path.exists('/var/run/docker.sock'):
print("wait ... ...")
time.sleep(5)
print("init complete.")
client = docker.DockerClient(base_url='unix://var/run/docker.sock') client = docker.DockerClient(base_url='unix://var/run/docker.sock')
write_out_2_file("{} - start sync images ... ...\n".format(datetime.now()))
logger.info("start sync images ....") logger.info("start sync images ....")
pull_images() pull_images()
write_out_2_file("{} - images sync finished.\n".format(datetime.now()))
logger.info("images sync finished.") logger.info("images sync finished.")