annotate multikube.py @ 202:a5399e8b47b6

upgrade some ubuntu
author drewp@bigasterisk.com
date Fri, 30 Jun 2023 22:36:53 -0700
parents 375515ab60ba
children 3af02e24eaf9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
1 # leave kube.py running single-host and try again
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
2 import os
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
3
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
4 from pyinfra import host
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
5 from pyinfra.facts.files import FindInFile
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
6 from pyinfra.facts.server import Arch, LinuxDistribution
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
7 from pyinfra.operations import files, server, systemd
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
8
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
9 is_pi = host.get_fact(LinuxDistribution)['name'] in ['Debian', 'Raspbian GNU/Linux']
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
10
112
drewp@bigasterisk.com
parents: 111
diff changeset
11 from multikube_config import server_node, server_ip, nodes, admin_from, k3s_version, skaffold_version
111
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
12
136
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
13 def install_k3s():
111
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
14 tail = 'k3s' if host.get_fact(Arch) == 'x86_64' else 'k3s-armhf'
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
15 files.download(
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
16 src=f'https://github.com/rancher/k3s/releases/download/{k3s_version}/{tail}',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
17 dest='/usr/local/bin/k3s',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
18 user='root',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
19 group='root',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
20 mode='755',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
21 cache_time=43000,
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
22 #force=True, # to get a new version
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
23 )
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
24
136
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
25 def install_k3sup():
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
26 files.download(
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
27 src='https://github.com/alexellis/k3sup/releases/download/0.12.0/k3sup',
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
28 dest='/usr/local/bin/k3sup',
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
29 mode='755'
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
30 )
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
31 # then do like:
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
32 # root@slash:/home/drewp# ./k3sup install --ip 10.2.0.84 --k3s-extra-args '--no-deploy traefik' --ssh-key /root/.ssh/id_ecdsa
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
33 # root@slash:/home/drewp# ./k3sup join --ip 10.2.0.23 --server-ip 10.2.0.84 --ssh-key /root/.ssh/id_ecdsa
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
34 # but it doesn't seem to make networking go any better
111
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
35
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
36 def install_skaffold():
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
37 files.download(src=f'https://storage.googleapis.com/skaffold/releases/{skaffold_version}/skaffold-linux-amd64',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
38 dest='/usr/local/bin/skaffold',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
39 user='root',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
40 group='root',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
41 mode='755',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
42 cache_time=1000)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
43 # one time; writes to $HOME
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
44 #skaffold config set --global insecure-registries bang5:5000
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
45
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
46
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
47 def pi_cgroup_setup():
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
48 old_cmdline = host.get_fact(FindInFile, path='/boot/cmdline.txt', pattern=r'.*')[0]
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
49 if 'cgroup' not in old_cmdline:
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
50 cmdline = old_cmdline + ' cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory'
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
51 files.line(path='/boot/cmdline.txt', line='.*', replace=cmdline)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
52 # pi needs reboot now
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
53
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
54
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
55 def host_prep():
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
56 server.sysctl(key='net.ipv4.ip_forward', value="1", persist=True)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
57 server.sysctl(key='net.ipv6.conf.all.forwarding', value="1", persist=True)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
58 server.sysctl(key='net.ipv6.conf.all.disable_ipv6' , value='1',persist=True)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
59 server.sysctl(key='fs.inotify.max_user_instances', value='8192', persist=True)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
60 server.sysctl(key='fs.inotify.max_user_watches', value='524288', persist=True)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
61
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
62 # https://sysctl-explorer.net/net/ipv4/rp_filter/
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
63 #none, strict, loose = 0, 1, 2
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
64 #server.sysctl(key='net.ipv4.conf.default.rp_filter', value=loose, persist=True)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
65
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
66 if is_pi:
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
67 pi_cgroup_setup()
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
68
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
69 def service_name():
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
70 return 'k3s.service' if host.name == server_node else 'k3s-node.service'
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
71
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
72 def config_and_run_service():
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
73 role = 'server' if host.name == server_node else 'agent'
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
74 which_conf = 'config-server.yaml.j2' if host.name == server_node else 'config-agent.yaml.j2'
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
75
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
76 if host.name == server_node:
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
77 token = "unused"
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
78 else:
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
79 token = open('/tmp/k3s-token', 'rt').read().strip()
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
80 files.template(
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
81 src=f'templates/kube/{which_conf}',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
82 dest='/etc/k3s_config.yaml',
112
drewp@bigasterisk.com
parents: 111
diff changeset
83 server_ip=server_ip,
111
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
84 token=token,
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
85 wg_ip=host.host_data['mk_addr'],#wireguard_address'],
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
86 )
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
87
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
88 files.template(
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
89 src='templates/kube/k3s.service.j2',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
90 dest=f'/etc/systemd/system/{service_name()}',
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
91 role=role,
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
92 )
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
93 systemd.service(service=service_name(), daemon_reload=True, enabled=True, restarted=True)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
94
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
95 if host.name == server_node:
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
96 files.get(src='/var/lib/rancher/k3s/server/node-token', dest='/tmp/k3s-token')
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
97 files.get(src='/etc/rancher/k3s/k3s.yaml', dest='/tmp/k3s-yaml')
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
98
112
drewp@bigasterisk.com
parents: 111
diff changeset
99
111
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
100 if host.name in nodes + [server_node]:
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
101 host_prep()
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
102 files.directory(path='/etc/rancher/k3s')
136
375515ab60ba multikube experiment junk. do not run
drewp@bigasterisk.com
parents: 113
diff changeset
103 install_k3s()
111
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
104 config_and_run_service()
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
105
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
106 # docs: https://rancher.com/docs/k3s/latest/en/installation/private-registry/
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
107 # user confusions: https://github.com/rancher/k3s/issues/1802
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
108 files.template(src='templates/kube/registries.yaml.j2', dest='/etc/rancher/k3s/registries.yaml')
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
109 # for the possible registries update:
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
110 systemd.service(service=service_name(), daemon_reload=True, enabled=True, restarted=True)
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
111
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
112 if host.name in admin_from:
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
113 files.directory(path='/etc/rancher/k3s')
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
114 install_skaffold()
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
115 files.link(path='/usr/local/bin/kubectl', target='/usr/local/bin/k3s')
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
116 files.directory(path='/home/drewp/.kube', user='drewp', group='drewp')
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
117 # .zshrc has: export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
118
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
119 if host.name != server_node:
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
120 files.put(src='/tmp/k3s-yaml', dest='/etc/rancher/k3s/k3s.yaml')
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
121
340d778a1682 start multikube experiment
drewp@bigasterisk.com
parents:
diff changeset
122 files.file(path='/etc/rancher/k3s/k3s.yaml', user='root', group='drewp', mode='640')
112
drewp@bigasterisk.com
parents: 111
diff changeset
123 server.shell(f"kubectl config set-cluster default --server=https://{server_ip}:6443 --kubeconfig=/etc/rancher/k3s/k3s.yaml")