-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpushmaster
executable file
·52 lines (44 loc) · 1.9 KB
/
pushmaster
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/python
import argparse
import datetime
from util import *
# BASE_IMAGE = "busybox"
BASE_IMAGE = "k8s.gcr.io/build-image/go-runner:buster-v2.2.2"
OUTPUT_PATH = "/tmp/my{}.tar"
COMPONENTS = ["kube-apiserver", "kube-controller-manager", "kube-scheduler"]
parser = argparse.ArgumentParser(description='push master component')
parser.add_argument("--skip-build", dest='build', action='store_false',
help='build kube-proxy image')
parser.add_argument('component', metavar='COMPONENT', type=str, nargs=1,
choices=COMPONENTS,
help='{ %s }' % " | ".join(COMPONENTS))
parser.add_argument('host', metavar='host', type=str, nargs="?",
help='target host to push')
parser.set_defaults(build=True)
args = parser.parse_args()
binary = args.component[0]
bin_path = search_binary_in_k8s_output_path(binary)
tarball_path = OUTPUT_PATH.format(binary)
if args.build:
print
"============= Build %s image tarball ================" % binary
tag = "my" + binary + ":" + datetime.datetime.now().strftime("%Y%m%d%H%M")
build_kube_image(BASE_IMAGE, bin_path, binary, tag=tag)
build_kube_image_tarball(tag, output_path=tarball_path)
docker_rmi(tag)
else:
tag = retrieve_image_tag(tarball_path)
print
"===================Pushing %s ===================" % binary
# docker node uses this to load image
# docker load < my{}.tar
cmd = """sudo bash -c '
ctr -n=k8s.io images import my{}.tar
ls -al ~/{}.manifest > /dev/null 2>&1 || cp /etc/kubernetes/manifests/{}.manifest /home/kubernetes/{}.manifest
sed -i "s/\\"image\\":.*/\\"image\\": \\"docker.io\\/library\\/{}\\",/" /etc/kubernetes/manifests/{}.manifest
'
"""
cmd = cmd.format(binary, binary, binary, binary, tag, binary)
instance = get_target_gce_instance(args.host)
gcloud_compute_copy_file_to_host(instance.name, tarball_path)
gcloud_compute_ssh_command(instance.zone, instance.name, cmd)