Skip to content

Commit dd12093

Browse files
committed
Build lockc on OpenStack with openSUSE Leap image
1 parent 3e92ee7 commit dd12093

File tree

11 files changed

+247
-103
lines changed

11 files changed

+247
-103
lines changed

contrib/terraform/libvirt/worker.tf

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -146,13 +146,12 @@ resource "null_resource" "worker_provision_k8s_containerd" {
146146
type = "ssh"
147147
}
148148

149-
provisioner "file" {
150-
source = "../../../target/debug/lockc.tar.gz"
151-
destination = "/home/opensuse/lockc.tar.gz"
149+
provisioner "remote-exec" {
150+
script = "provision-k8s-containerd.sh"
152151
}
153152

154153
provisioner "remote-exec" {
155-
script = "provision-k8s-containerd.sh"
154+
script = "provision-k8s-containerd-cp.sh"
156155
}
157156
}
158157

@@ -177,13 +176,13 @@ export sshopts="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -oCo
177176
if ! ssh $sshopts $user@$host 'sudo needs-restarting -r'; then
178177
ssh $sshopts $user@$host sudo reboot || :
179178
export delay=5
180-
# # wait for node reboot completed
181-
# # lol, doesn't work
182-
# while ! ssh $sshopts $user@$host 'sudo needs-restarting -r'; do
183-
# sleep $delay
184-
# delay=$((delay+1))
185-
# [ $delay -gt 60 ] && exit 1
186-
# done
179+
# wait for node reboot completed
180+
while ! ssh $sshopts $user@$host 'sudo needs-restarting -r'; do
181+
sleep $delay
182+
delay=$((delay+1))
183+
[ $delay -gt 60 ] && exit 1
184+
ssh $sshopts $user@$host 'sudo needs-restarting -r'
185+
done
187186
fi
188187
EOT
189188
}

contrib/terraform/openstack/cloud-init/common.tpl

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
#cloud-config
22

3+
# set hostname
4+
hostname: ${hostname}
5+
36
# set locale
4-
locale: en_US.UTF-8
7+
locale: ${locale} # en_US.UTF-8
58

69
# set timezone
7-
timezone: Etc/UTC
10+
timezone: ${timezone} # Etc/UTC
811

912
# Inject the public keys
1013
ssh_authorized_keys:
@@ -27,11 +30,6 @@ ${repositories}
2730
solver.onlyRequires: "true"
2831
download.use_deltarpm: "true"
2932

30-
#packages:
31-
32-
# set hostname
33-
hostname: ${hostname}
34-
3533
runcmd:
3634
# workaround for bsc#1119397 . If this is not called, /etc/resolv.conf is empty
3735
- netconfig -f update
@@ -42,8 +40,11 @@ runcmd:
4240
- sshd -t || echo "ssh syntax failure"
4341
- systemctl restart sshd
4442
# Set node's hostname from DHCP server
45-
- sed -i -e '/^DHCLIENT_SET_HOSTNAME/s/^.*$/DHCLIENT_SET_HOSTNAME=\"${hostname_from_dhcp}\"/' /etc/sysconfig/network/dhcp
43+
- sed -i -e '/^DHCLIENT_SET_HOSTNAME/s/^.*$/DHCLIENT_SET_HOSTNAME=\"yes\"/' /etc/sysconfig/network/dhcp
4644
- systemctl restart wicked
45+
# Refresh repos and upgrade
46+
- zypper ref
47+
- zypper dup -y --allow-vendor-change --replacefiles
4748
${commands}
4849

4950
final_message: "The system is finally up, after $UPTIME seconds"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
- id: ${repository_name}
22
name: ${repository_name}
33
baseurl: ${repository_url}
4+
priority: 90
45
enabled: 1
56
autorefresh: 1
67
gpgcheck: 0
Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,65 @@
11
#!/bin/bash
22
#shellcheck disable=SC2145,SC2016
3+
4+
set -eux
5+
36
log() { (>&1 echo -e "$@") ; }
4-
cmd() { log "$@" ; }
57
info() { log "[ INFO ] $@" ; }
68
error() { (>&2 echo -e "[ ERROR ] $@") ;}
79

810
if [ -z "${TR_STACK}" ] || [ -z "${TR_LB_IP}" ] || \
9-
[ -z "$TR_MASTER_IPS" ] || [ -z "$TR_WORKER_IPS" ] || \
10-
[ -z "${TR_USERNAME}" ]; then
11-
error '$TR_STACK $TR_LB_IP $TR_MASTER_IPS $TR_WORKER_IPS $TR_USERNAME must be specified'
11+
[ -z "$TR_MASTER_IPS" ] || [ -z "${TR_USERNAME}" ]; then
12+
error '$TR_STACK $TR_LB_IP $TR_MASTER_IPS $TR_USERNAME must be specified'
1213
exit 1
1314
fi
1415

16+
sleep 5
17+
18+
CILIUM_VERSION=$(curl -s https://api.github.com/repos/cilium/cilium/releases/latest | jq -r '.tag_name' | sed -e 's/^v//')
19+
1520
info "### Run following commands to bootstrap Kubernetes cluster:\\n"
16-
cmd ""
1721

1822
i=0
1923
for MASTER in $TR_MASTER_IPS; do
20-
cmd "ssh -o 'StrictHostKeyChecking no' -l ${TR_USERNAME} ${MASTER} /bin/bash <<EOF"
21-
cmd ""
22-
2324
if [ $i -eq "0" ]; then
24-
cmd " sudo kubeadm init --cri-socket /run/containerd/containerd.sock --control-plane-endpoint ${TR_LB_IP}:6443 | tee kubeadm-init.log"
25-
cmd ""
26-
cmd " mkdir -p /home/${TR_USERNAME}/.kube"
27-
cmd " sudo cp /etc/kubernetes/admin.conf /home/${TR_USERNAME}/.kube/config"
28-
cmd " sudo chown ${TR_USERNAME}:users /home/${TR_USERNAME}/.kube/config"
29-
cmd "EOF"
30-
3125
ssh -o 'StrictHostKeyChecking no' -l ${TR_USERNAME} ${MASTER} /bin/bash <<-EOF
32-
sudo kubeadm init --cri-socket /run/containerd/containerd.sock --control-plane-endpoint ${TR_LB_IP}:6443 | tee kubeadm-init.log
26+
set -eux
27+
sudo kubeadm init --cri-socket /run/containerd/containerd.sock --control-plane-endpoint ${MASTER}:6443 --upload-certs | tee kubeadm-init.log
3328
mkdir -p /home/${TR_USERNAME}/.kube
3429
sudo cp /etc/kubernetes/admin.conf /home/${TR_USERNAME}/.kube/config
3530
sudo chown ${TR_USERNAME}:users /home/${TR_USERNAME}/.kube/config
31+
helm repo add cilium https://helm.cilium.io/
32+
helm install cilium cilium/cilium --version ${CILIUM_VERSION} --namespace kube-system
3633
EOF
3734

38-
cmd ""
39-
export KUBEADM_JOIN=`ssh -l ${TR_USERNAME} ${MASTER} tail -n2 kubeadm-init.log`
40-
export KUBEADM_CMD=`echo $KUBEADM_JOIN | sed -e 's/\\\ //'`
41-
echo $KUBEADM_CMD
35+
export KUBEADM_MASTER_JOIN=`ssh -o 'StrictHostKeyChecking no' -l ${TR_USERNAME} ${MASTER} tail -n12 kubeadm-init.log | head -n3`
36+
export KUBEADM_WORKER_JOIN=`ssh -o 'StrictHostKeyChecking no' -l ${TR_USERNAME} ${MASTER} tail -n2 kubeadm-init.log`
4237
else
43-
cmd ""
44-
cmd " sudo kubeadm join"
45-
cmd "EOF"
46-
cmd ""
38+
ssh -o 'StrictHostKeyChecking no' -l ${TR_USERNAME} ${MASTER} /bin/bash <<-EOF
39+
set -eux
40+
sudo ${KUBEADM_MASTER_JOIN}
41+
mkdir -p /home/${TR_USERNAME}/.kube
42+
sudo cp /etc/kubernetes/admin.conf /home/${TR_USERNAME}/.kube/config
43+
sudo chown ${TR_USERNAME}:users /home/${TR_USERNAME}/.kube/config
44+
EOF
4745
fi
4846
((++i))
4947
done
5048

5149
i=0
5250
for WORKER in $TR_WORKER_IPS; do
53-
cmd "ssh -o 'StrictHostKeyChecking no' -l ${TR_USERNAME} ${WORKER} sudo ${KUBEADM_CMD}"
54-
ssh -o 'StrictHostKeyChecking no' -l ${TR_USERNAME} ${WORKER} sudo ${KUBEADM_CMD}
51+
ssh -o 'StrictHostKeyChecking no' -l ${TR_USERNAME} ${WORKER} /bin/bash <<-EOF
52+
set -eux
53+
sudo ${KUBEADM_WORKER_JOIN}
54+
EOF
5555
((++i))
5656
done
5757

58-
cmd ""
59-
cmd "scp ${TR_USERNAME}@${MASTER}:/home/${TR_USERNAME}/.kube/config ./admin.conf"
60-
cmd "export KUBECONFIG=`pwd`/admin.conf"
61-
cmd ""
62-
6358
scp ${TR_USERNAME}@${MASTER}:/home/${TR_USERNAME}/.kube/config ./admin.conf
6459
export KUBECONFIG=`pwd`/admin.conf
6560
kubectl get nodes
6661

67-
cmd ""
68-
cmd "WARNING!!! To start with K8s cluster please run following command:"
69-
cmd "export KUBECONFIG=`pwd`/admin.conf"
70-
cmd ""
62+
log ""
63+
log "WARNING!!! To start with K8s cluster please run following command:"
64+
log "export KUBECONFIG=`pwd`/admin.conf"
65+
log ""

contrib/terraform/openstack/dns.tf

Lines changed: 0 additions & 30 deletions
This file was deleted.

contrib/terraform/openstack/master-instance.tf

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,26 @@ data "template_file" "master_repositories" {
1010

1111
data "template_file" "master_commands" {
1212
template = file("cloud-init/commands.tpl")
13-
count = join("", var.packages) == "" ? 0 : 1
13+
count = length(var.packages)
1414

1515
vars = {
1616
packages = join(", ", var.packages)
1717
}
1818
}
1919

20-
data "template_file" "master-cloud-init" {
20+
data "template_file" "master_cloud_init" {
2121
template = file("cloud-init/common.tpl")
2222
count = var.masters
2323

2424
vars = {
25+
hostname = "${var.stack_name}-k8s-master${count.index}"
26+
locale = var.locale
27+
timezone = var.timezone
28+
username = var.username
2529
authorized_keys = join("\n", formatlist(" - %s", var.authorized_keys))
2630
repositories = join("\n", data.template_file.master_repositories.*.rendered)
2731
commands = join("\n", data.template_file.master_commands.*.rendered)
28-
username = var.username
2932
ntp_servers = join("\n", formatlist(" - %s", var.ntp_servers))
30-
hostname = "${var.stack_name}-k8s-master${count.index}"
31-
hostname_from_dhcp = var.hostname_from_dhcp
3233
}
3334
}
3435

@@ -54,7 +55,7 @@ resource "openstack_compute_instance_v2" "master" {
5455
openstack_networking_secgroup_v2.master_nodes.id,
5556
]
5657

57-
user_data = data.template_file.master-cloud-init[count.index].rendered
58+
user_data = data.template_file.master_cloud_init[count.index].rendered
5859
}
5960

6061
resource "openstack_networking_floatingip_v2" "master_ext" {
@@ -95,9 +96,51 @@ resource "null_resource" "master_wait_cloudinit" {
9596
}
9697
}
9798

98-
resource "null_resource" "master_reboot" {
99+
resource "null_resource" "master_provision" {
99100
depends_on = [null_resource.master_wait_cloudinit]
100101
count = var.masters
102+
connection {
103+
host = element(
104+
openstack_compute_floatingip_associate_v2.master_ext_ip.*.floating_ip,
105+
count.index
106+
)
107+
user = var.username
108+
type = "ssh"
109+
}
110+
111+
provisioner "remote-exec" {
112+
script = "provision.sh"
113+
}
114+
}
115+
116+
resource "null_resource" "master_provision_k8s_containerd" {
117+
depends_on = [null_resource.master_provision]
118+
count = var.masters
119+
120+
connection {
121+
host = element(
122+
openstack_compute_floatingip_associate_v2.master_ext_ip.*.floating_ip,
123+
count.index
124+
)
125+
user = var.username
126+
type = "ssh"
127+
}
128+
129+
provisioner "remote-exec" {
130+
script = "provision-k8s-containerd.sh"
131+
}
132+
133+
provisioner "remote-exec" {
134+
script = "provision-k8s-containerd-cp.sh"
135+
}
136+
}
137+
138+
139+
resource "null_resource" "master_reboot" {
140+
depends_on = [
141+
null_resource.master_provision_k8s_containerd,
142+
]
143+
count = var.masters
101144

102145
provisioner "local-exec" {
103146
environment = {
@@ -118,6 +161,7 @@ if ! ssh $sshopts $user@$host 'sudo needs-restarting -r'; then
118161
sleep $delay
119162
delay=$((delay+1))
120163
[ $delay -gt 30 ] && exit 1
164+
ssh $sshopts $user@$host 'sudo needs-restarting -r'
121165
done
122166
fi
123167
EOT
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/bin/bash
2+
3+
# ensure running as root
4+
if [ "$(id -u)" != "0" ]; then
5+
exec sudo "$0" "$@"
6+
fi
7+
8+
HELM_VERSION=$(curl -s https://api.github.com/repos/helm/helm/releases/latest | jq -r '.tag_name')
9+
curl -sSL "https://get.helm.sh/helm-${HELM_VERSION}-linux-amd64.tar.gz" | sudo tar -C /usr/local/bin --strip-components=1 -xzf - linux-amd64/helm
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/bin/bash
2+
3+
# ensure running as root
4+
if [ "$(id -u)" != "0" ]; then
5+
exec sudo "$0" "$@"
6+
fi
7+
8+
CONTAINERD_URL=$(curl -s https://api.github.com/repos/containerd/containerd/releases/latest | jq -r '.assets[] | select(.browser_download_url | contains("cri-containerd-cni") and endswith("linux-amd64.tar.gz")) | .browser_download_url')
9+
curl -L "${CONTAINERD_URL}" | sudo tar --no-overwrite-dir -C / -xz
10+
11+
systemctl enable containerd
12+
13+
CNI_VERSION=$(curl -s https://api.github.com/repos/containernetworking/plugins/releases/latest | jq -r '.tag_name')
14+
ARCH="amd64"
15+
mkdir -p /opt/cni/bin
16+
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz
17+
18+
DOWNLOAD_DIR=/usr/local/bin
19+
mkdir -p $DOWNLOAD_DIR
20+
21+
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
22+
cd $DOWNLOAD_DIR
23+
curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl}
24+
chmod +x {kubeadm,kubelet,kubectl}
25+
26+
RELEASE_VERSION=$(curl -s https://api.github.com/repos/kubernetes/release/releases/latest | jq -r '.name')
27+
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | tee /etc/systemd/system/kubelet.service
28+
mkdir -p /etc/systemd/system/kubelet.service.d
29+
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
30+
31+
systemctl enable kubelet

0 commit comments

Comments
 (0)