1
1
#! /bin/bash -x
2
- # shellcheck disable=SC2086
2
+ # shellcheck disable=SC2086,SC2029
3
3
4
4
master_ip=$1
5
5
worker_ip=$2
6
6
sshkey=$3
7
7
8
- SSH_OPTS=" -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -i ${sshkey} "
9
-
10
- function wait_pids() {
11
- pids=" $1 "
12
- message=" $2 "
13
- for pid in ${pids} ; do
14
- echo " waiting for PID ${pid} "
15
- wait ${pid}
16
- code=$?
17
- if test $code -ne 0; then
18
- echo " ${message} : process exited with code $code , aborting..." && return 1
19
- fi
20
- done
21
- return 0
22
- }
23
-
24
- # Setup SR-IOV
8
+ SSH_CONFIG=" ssh_config"
9
+ SSH_OPTS=" -F ${SSH_CONFIG} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -i ${sshkey} "
10
+
11
+ if [[ " $CNI " == " calico" ]]; then # calico
12
+ # Use a new 10.0.0.${base_ip}/30 subnet to prevent IP addresses collisions
13
+ # ${base_ip} should be <= 248, because 10.0.0.252/30 subnet is reserved for manual testing
14
+ base_ip=$(( GITHUB_RUN_NUMBER % 63 * 4 ))
15
+
16
+ CALICO_MASTER_IP=" 10.0.0.$(( base_ip + 1 )) "
17
+ CALICO_WORKER_IP=" 10.0.0.$(( base_ip + 2 )) "
18
+ CALICO_CIDR_PREFIX=" 30"
19
+ CALICO_INTERFACE=" eno2"
20
+ fi
21
+
22
+ ENVS=" KUBERNETES_VERSION CNI"
23
+
24
+ # wait_pids pid_1 ... pid_n
25
+ source scripts/include/wait-pids.sh
26
+ # wait_start ip_1 ... ip_n
27
+ source scripts/include/wait-start.sh
28
+
29
+ # 0. Setup SendEnv on the local side.
30
+ cp /etc/ssh/ssh_config ${SSH_CONFIG} || exit 1
31
+ echo " Host *
32
+ SendEnv ${ENVS} " >> ${SSH_CONFIG} || exit 2
33
+
34
+ wait_start ${master_ip} ${worker_ip} || exit 3
35
+
36
+ # 1. Setup AcceptEnv on the servers sides and wait for sshd to restart.
37
+ scp ${SSH_OPTS} scripts/setup-sshd.sh root@${master_ip} :setup-sshd.sh || exit 11
38
+ scp ${SSH_OPTS} scripts/setup-sshd.sh root@${worker_ip} :setup-sshd.sh || exit 12
39
+
40
+ pids=" "
41
+ ssh ${SSH_OPTS} root@${master_ip} ./setup-sshd.sh " ${ENVS} " &
42
+ pids+=" $! "
43
+ ssh ${SSH_OPTS} root@${worker_ip} ./setup-sshd.sh " ${ENVS} " &
44
+ pids+=" $! "
45
+ wait_pids " ${pids} " " sshd config failed" || exit 13
46
+
47
+ wait_start ${master_ip} ${worker_ip} || exit 14
48
+
49
+ # # 2. Setup SR-IOV.
25
50
pids=" "
26
51
/bin/bash scripts/sriov/setup-SRIOV.sh " ${master_ip} " " ${worker_ip} " " ${SSH_OPTS} " &
27
52
pids+=" $! "
28
- wait_pids " ${pids} " " SR-IOV config failed" || exit 1
53
+ wait_pids " ${pids} " " SR-IOV config failed" || exit 21
54
+
55
+ if [[ " $CNI " == " calico" ]]; then # calico
56
+ # 3. Create Calico scripts directory on nodes.
57
+ ssh ${SSH_OPTS} root@${master_ip} mkdir -p calico || exit 31
58
+ ssh ${SSH_OPTS} root@${worker_ip} mkdir -p calico || exit 32
59
+
60
+ # 4. Setup Calico interfaces.
61
+ scp ${SSH_OPTS} scripts/calico/setup-interfaces.sh root@${master_ip} :calico/setup-interfaces.sh || exit 41
62
+ scp ${SSH_OPTS} scripts/calico/setup-interfaces.sh root@${worker_ip} :calico/setup-interfaces.sh || exit 42
29
63
30
- # Create k8s scripts directory on nodes
31
- ssh ${SSH_OPTS} root@${master_ip} mkdir k8s
32
- ssh ${SSH_OPTS} root@${worker_ip} mkdir k8s
64
+ pids=" "
65
+ ssh ${SSH_OPTS} root@${master_ip} ./calico/setup-interfaces.sh " ${CALICO_INTERFACE} " " ${CALICO_MASTER_IP} " " ${CALICO_CIDR_PREFIX} " &
66
+ pids+=" $! "
67
+ ssh ${SSH_OPTS} root@${worker_ip} ./calico/setup-interfaces.sh " ${CALICO_INTERFACE} " " ${CALICO_WORKER_IP} " " ${CALICO_CIDR_PREFIX} " &
68
+ pids+=" $! "
69
+ wait_pids " ${pids} " " setup Calico interfaces failed" || exit 43
70
+ fi
33
71
34
- # Setup docker ulimit
35
- scp ${SSH_OPTS} scripts/k8s/docker-ulimit.sh root@${master_ip} :k8s/docker-ulimit.sh || exit 2
36
- scp ${SSH_OPTS} scripts/k8s/docker-ulimit.sh root@${worker_ip} :k8s/docker-ulimit.sh || exit 3
72
+ # 5. Create k8s scripts directory on nodes.
73
+ ssh ${SSH_OPTS} root@${master_ip} mkdir -p k8s || exit 51
74
+ ssh ${SSH_OPTS} root@${worker_ip} mkdir -p k8s || exit 52
75
+
76
+ # 6. Config docker.
77
+ scp ${SSH_OPTS} scripts/k8s/config-docker.sh root@${master_ip} :k8s/config-docker.sh || exit 61
78
+ scp ${SSH_OPTS} scripts/k8s/config-docker.sh root@${worker_ip} :k8s/config-docker.sh || exit 62
37
79
38
80
pids=" "
39
- ssh ${SSH_OPTS} root@${master_ip} ./k8s/docker-ulimit .sh &
81
+ ssh ${SSH_OPTS} root@${master_ip} ./k8s/config-docker .sh &
40
82
pids+=" $! "
41
- ssh ${SSH_OPTS} root@${worker_ip} ./k8s/docker-ulimit .sh &
83
+ ssh ${SSH_OPTS} root@${worker_ip} ./k8s/config-docker .sh &
42
84
pids+=" $! "
43
- wait_pids " ${pids} " " kubernetes install failed" || exit 4
85
+ wait_pids " ${pids} " " docker config failed" || exit 63
44
86
45
- # Install kubeadm, kubelet and kubectl
46
- scp ${SSH_OPTS} scripts/k8s/install-kubernetes.sh root@${master_ip} :k8s/install-kubernetes.sh || exit 5
47
- scp ${SSH_OPTS} scripts/k8s/install-kubernetes.sh root@${worker_ip} :k8s/install-kubernetes.sh || exit 6
87
+ # 7. Install kubeadm, kubelet and kubectl.
88
+ scp ${SSH_OPTS} scripts/k8s/install-kubernetes.sh root@${master_ip} :k8s/install-kubernetes.sh || exit 71
89
+ scp ${SSH_OPTS} scripts/k8s/install-kubernetes.sh root@${worker_ip} :k8s/install-kubernetes.sh || exit 72
48
90
49
91
pids=" "
50
- ssh ${SSH_OPTS} root@${master_ip} ./k8s/install-kubernetes.sh ${KUBERNETES_VERSION} &
92
+ ssh ${SSH_OPTS} root@${master_ip} ./k8s/install-kubernetes.sh &
51
93
pids+=" $! "
52
- ssh ${SSH_OPTS} root@${worker_ip} ./k8s/install-kubernetes.sh ${KUBERNETES_VERSION} &
94
+ ssh ${SSH_OPTS} root@${worker_ip} ./k8s/install-kubernetes.sh &
53
95
pids+=" $! "
54
- wait_pids " ${pids} " " kubernetes install failed" || exit 7
96
+ wait_pids " ${pids} " " kubernetes install failed" || exit 73
55
97
56
- # master: start kubernetes and create join script
57
- # worker: download kubernetes images
58
- scp ${SSH_OPTS} scripts/k8s/start-master.sh root@${master_ip} :k8s/start-master.sh || exit 8
59
- scp ${SSH_OPTS} scripts/k8s/download-worker-images.sh root@${worker_ip} :k8s/download-worker-images.sh || exit 9
98
+ # 8.
99
+ # master: start kubernetes and create join script.
100
+ # worker: download kubernetes images.
101
+ scp ${SSH_OPTS} scripts/k8s/start-master.sh root@${master_ip} :k8s/start-master.sh || exit 81
102
+ scp ${SSH_OPTS} scripts/k8s/download-worker-images.sh root@${worker_ip} :k8s/download-worker-images.sh || exit 82
60
103
61
104
pids=" "
62
- ssh ${SSH_OPTS} root@${master_ip} ./k8s/start-master.sh ${KUBERNETES_VERSION } &
105
+ ssh ${SSH_OPTS} root@${master_ip} ./k8s/start-master.sh ${master_ip} ${CALICO_MASTER_IP } &
63
106
pids+=" $! "
64
107
ssh ${SSH_OPTS} root@${worker_ip} ./k8s/download-worker-images.sh &
65
108
pids+=" $! "
66
- wait_pids " ${pids} " " node setup failed" || exit 10
109
+ wait_pids " ${pids} " " nodes setup failed" || exit 83
67
110
68
- # Download worker join script
111
+ # 9. Download, upload and run worker join script.
69
112
mkdir -p /tmp/${master_ip}
70
- scp ${SSH_OPTS} root@${master_ip} :k8s/join-cluster.sh /tmp/${master_ip} /join-cluster.sh || exit 11
71
- chmod +x /tmp/${master_ip} /join-cluster.sh || exit 12
113
+ scp ${SSH_OPTS} root@${master_ip} :k8s/join-cluster.sh /tmp/${master_ip} /join-cluster.sh || exit 91
114
+ chmod +x /tmp/${master_ip} /join-cluster.sh || exit 92
72
115
73
- # Upload and run worker join script
74
- scp ${SSH_OPTS} /tmp/${master_ip} /join-cluster.sh root@${worker_ip} :k8s/join-cluster.sh || exit 13
116
+ scp ${SSH_OPTS} /tmp/${master_ip} /join-cluster.sh root@${worker_ip} :k8s/join-cluster.sh || exit 93
75
117
76
118
pids=" "
77
119
ssh ${SSH_OPTS} root@${worker_ip} ./k8s/join-cluster.sh &
78
120
pids+=" $! "
79
- wait_pids " ${pids} " " worker join failed" || exit 14
121
+ wait_pids " ${pids} " " worker join failed" || exit 94
122
+
123
+ # 10. Save KUBECONFIG to file.
124
+ scp ${SSH_OPTS} root@${master_ip} :.kube/config ${KUBECONFIG} || exit 101
125
+
126
+ if [[ " $CNI " == " calico" ]]; then # calico
127
+ # 11. Setup cluster nodes IPs.
128
+ scp ${SSH_OPTS} scripts/calico/setup-node-ip.sh root@${master_ip} :calico/setup-node-ip.sh || exit 111
129
+ scp ${SSH_OPTS} scripts/calico/setup-node-ip.sh root@${worker_ip} :calico/setup-node-ip.sh || exit 112
130
+
131
+ pids=" "
132
+ ssh ${SSH_OPTS} root@${master_ip} ./calico/setup-node-ip.sh " ${CALICO_MASTER_IP} " &
133
+ pids+=" $! "
134
+ ssh ${SSH_OPTS} root@${worker_ip} ./calico/setup-node-ip.sh " ${CALICO_WORKER_IP} " &
135
+ pids+=" $! "
136
+ wait_pids " ${pids} " " nodes IPs setup failed" || exit 113
137
+
138
+ # 12. Deploy Calico CNI.
139
+ /bin/bash scripts/calico/deploy-calico.sh || exit 121
140
+ fi
80
141
81
- echo " Save KUBECONFIG to file "
82
- scp ${SSH_OPTS} root@ ${master_ip} :.kube/config ${KUBECONFIG} || exit 15
142
+ # Get pods
143
+ kubectl get pods --all-namespaces
0 commit comments