From d252fe254b56547c4bebf26e14f0458469bd1ac9 Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Sat, 15 Aug 2020 12:34:08 +0200 Subject: [PATCH 1/7] Update DNS script --- prepare-vms/map-dns.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/prepare-vms/map-dns.py b/prepare-vms/map-dns.py index 698cad56..6dcdfc2c 100755 --- a/prepare-vms/map-dns.py +++ b/prepare-vms/map-dns.py @@ -1,21 +1,44 @@ #!/usr/bin/env python +""" +There are two ways to use this script: + +1. Pass a tag name as a single argument. +It will then take the clusters corresponding to that tag, and assign one +domain name per cluster. Currently it gets the domains from a hard-coded +path. There should be more domains than clusters. +Example: ./map-dns.py 2020-08-15-jp + +2. Pass a domain as the 1st argument, and IP addresses then. +It will configure the domain with the listed IP addresses. +Example: ./map-dns.py open-duck.site 1.2.3.4 2.3.4.5 3.4.5.6 + +In both cases, the domains should be configured to use GANDI LiveDNS. +""" import os import requests +import sys import yaml # configurable stuff domains_file = "../../plentydomains/domains.txt" config_file = os.path.join( os.environ["HOME"], ".config/gandi/config.yaml") -tag = "test" +tag = None apiurl = "https://dns.api.gandi.net/api/v5/domains" +if len(sys.argv) == 2: + tag = sys.argv[1] + domains = open(domains_file).read().split() + ips = open(f"tags/{tag}/ips.txt").read().split() + settings_file = f"tags/{tag}/settings.yaml" + clustersize = yaml.safe_load(open(settings_file))["clustersize"] +else: + domains = [sys.argv[1]] + ips = sys.argv[2:] + clustersize = len(ips) + # inferred stuff -domains = open(domains_file).read().split() apikey = yaml.safe_load(open(config_file))["apirest"]["key"] -ips = open(f"tags/{tag}/ips.txt").read().split() -settings_file = f"tags/{tag}/settings.yaml" -clustersize = yaml.safe_load(open(settings_file))["clustersize"] # now do the fucking work while domains and ips: From 115cc5e0c00574336a612de6dac876f22d2c2db3 Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Sat, 15 Aug 2020 14:02:24 +0200 Subject: [PATCH 2/7] Add support for Scaleway Cloud instances --- prepare-vms/infra/scaleway | 5 +++ prepare-vms/lib/commands.sh | 8 +++++ prepare-vms/lib/infra/scaleway.sh | 56 +++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 prepare-vms/infra/scaleway create mode 100644 prepare-vms/lib/infra/scaleway.sh diff --git a/prepare-vms/infra/scaleway b/prepare-vms/infra/scaleway new file mode 100644 index 00000000..7615e024 --- /dev/null +++ b/prepare-vms/infra/scaleway @@ -0,0 +1,5 @@ +INFRACLASS=scaleway +if ! [ -f ~/.config/scw/config.yaml ]; then + warn "~/.config/scw/config.yaml not found." + warn "Make sure that the scaleway CLI is installed and configured." +fi diff --git a/prepare-vms/lib/commands.sh b/prepare-vms/lib/commands.sh index 0918b101..5c0cc631 100644 --- a/prepare-vms/lib/commands.sh +++ b/prepare-vms/lib/commands.sh @@ -65,6 +65,14 @@ _cmd_deploy() { sleep 1 done" + # Special case for scaleway since it doesn't come with sudo + if [ "$INFRACLASS" = "scaleway" ]; then + pssh -l root " + grep DEBIAN_FRONTEND /etc/environment || echo DEBIAN_FRONTEND=noninteractive >> /etc/environment + grep cloud-init /etc/sudoers && rm /etc/sudoers + apt-get update && apt-get install sudo -y" + fi + # Copy settings and install Python YAML parser pssh -I tee /tmp/settings.yaml tags/$TAG/ips.txt +} + +infra_stop() { + for ID in $(scw_get_ids_by_tag $TAG); do + info "Scheduling deletion of instance $ID..." + scw instance server delete force-shutdown=true server-id=$ID & + done + info "Waiting for deletion to complete..." + wait +} + +scw_get_ids_by_tag() { + TAG=$1 + scw instance server list name=$TAG -o json | jq -r .[].id +} + +scw_get_ips_by_tag() { + TAG=$1 + scw instance server list name=$TAG -o json | jq -r .[].public_ip.address +} + +infra_opensg() { + die "unimplemented" +} + +infra_disableaddrchecks() { + die "unimplemented" +} From 2e2767b090c991f1b10ea93a409733443864f46d Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Wed, 19 Aug 2020 13:38:49 +0200 Subject: [PATCH 3/7] Bump up kubectl versions in remote section --- slides/k8s/localkubeconfig.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/slides/k8s/localkubeconfig.md b/slides/k8s/localkubeconfig.md index 6d96fd4b..0014c917 100644 --- a/slides/k8s/localkubeconfig.md +++ b/slides/k8s/localkubeconfig.md @@ -34,11 +34,11 @@ - Download the `kubectl` binary from one of these links: - [Linux](https://storage.googleapis.com/kubernetes-release/release/v1.15.3/bin/linux/amd64/kubectl) + [Linux](https://storage.googleapis.com/kubernetes-release/release/v1.18.8/bin/linux/amd64/kubectl) | - [macOS](https://storage.googleapis.com/kubernetes-release/release/v1.15.3/bin/darwin/amd64/kubectl) + [macOS](https://storage.googleapis.com/kubernetes-release/release/v1.18.8/bin/darwin/amd64/kubectl) | - [Windows](https://storage.googleapis.com/kubernetes-release/release/v1.15.3/bin/windows/amd64/kubectl.exe) + [Windows](https://storage.googleapis.com/kubernetes-release/release/v1.18.8/bin/windows/amd64/kubectl.exe) - On Linux and macOS, make the binary executable with `chmod +x kubectl` From f6930042bd4404a860b029a8ad6165ca44888ffa Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Wed, 26 Aug 2020 09:05:24 +0200 Subject: [PATCH 4/7] Mention downward API fields --- slides/k8s/configuration.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slides/k8s/configuration.md b/slides/k8s/configuration.md index 4d5908c1..db5bbc09 100644 --- a/slides/k8s/configuration.md +++ b/slides/k8s/configuration.md @@ -210,6 +210,8 @@ (through files that get created in the container filesystem) +- That second link also includes a list of all the fields that can be used with the downward API + --- ## Environment variables, pros and cons From c32fcc81bb6bb72dc231a163bb2b6ebaa1dbff7a Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Wed, 26 Aug 2020 09:10:15 +0200 Subject: [PATCH 5/7] Tweak 1-day content --- slides/intro-fullday.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/slides/intro-fullday.yml b/slides/intro-fullday.yml index 7662786d..c70eb8d4 100644 --- a/slides/intro-fullday.yml +++ b/slides/intro-fullday.yml @@ -44,8 +44,8 @@ content: - - containers/Container_Networking_Basics.md #- containers/Network_Drivers.md - #- containers/Container_Network_Model.md - containers/Local_Development_Workflow.md + - containers/Container_Network_Model.md - containers/Compose_For_Dev_Stacks.md - containers/Exercise_Composefile.md - @@ -65,6 +65,5 @@ content: #- containers/Pods_Anatomy.md #- containers/Ecosystem.md #- containers/Orchestration_Overview.md -- - shared/thankyou.md - containers/links.md From efdc4fcfa9fcbfa0a62a503f9f211ce93e05b6a9 Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Wed, 26 Aug 2020 12:36:48 +0200 Subject: [PATCH 6/7] bump versions --- compose/kube-router-k8s-control-plane/docker-compose.yaml | 8 ++++---- compose/simple-k8s-control-plane/docker-compose.yaml | 8 ++++---- prepare-vms/lib/commands.sh | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/compose/kube-router-k8s-control-plane/docker-compose.yaml b/compose/kube-router-k8s-control-plane/docker-compose.yaml index cb207715..791bb13c 100644 --- a/compose/kube-router-k8s-control-plane/docker-compose.yaml +++ b/compose/kube-router-k8s-control-plane/docker-compose.yaml @@ -9,21 +9,21 @@ services: etcd: network_mode: "service:pause" - image: k8s.gcr.io/etcd:3.4.3 + image: k8s.gcr.io/etcd:3.4.9 command: etcd kube-apiserver: network_mode: "service:pause" - image: k8s.gcr.io/hyperkube:v1.17.2 + image: k8s.gcr.io/hyperkube:v1.18.8 command: kube-apiserver --etcd-servers http://127.0.0.1:2379 --address 0.0.0.0 --disable-admission-plugins=ServiceAccount --allow-privileged kube-controller-manager: network_mode: "service:pause" - image: k8s.gcr.io/hyperkube:v1.17.2 + image: k8s.gcr.io/hyperkube:v1.18.8 command: kube-controller-manager --master http://localhost:8080 --allocate-node-cidrs --cluster-cidr=10.CLUSTER.0.0/16 "Edit the CLUSTER placeholder first. Then, remove this line.": kube-scheduler: network_mode: "service:pause" - image: k8s.gcr.io/hyperkube:v1.17.2 + image: k8s.gcr.io/hyperkube:v1.18.8 command: kube-scheduler --master http://localhost:8080 diff --git a/compose/simple-k8s-control-plane/docker-compose.yaml b/compose/simple-k8s-control-plane/docker-compose.yaml index 7c370e7b..aabc0746 100644 --- a/compose/simple-k8s-control-plane/docker-compose.yaml +++ b/compose/simple-k8s-control-plane/docker-compose.yaml @@ -9,20 +9,20 @@ services: etcd: network_mode: "service:pause" - image: k8s.gcr.io/etcd:3.4.3 + image: k8s.gcr.io/etcd:3.4.9 command: etcd kube-apiserver: network_mode: "service:pause" - image: k8s.gcr.io/hyperkube:v1.17.2 + image: k8s.gcr.io/hyperkube:v1.18.8 command: kube-apiserver --etcd-servers http://127.0.0.1:2379 --address 0.0.0.0 --disable-admission-plugins=ServiceAccount kube-controller-manager: network_mode: "service:pause" - image: k8s.gcr.io/hyperkube:v1.17.2 + image: k8s.gcr.io/hyperkube:v1.18.8 command: kube-controller-manager --master http://localhost:8080 kube-scheduler: network_mode: "service:pause" - image: k8s.gcr.io/hyperkube:v1.17.2 + image: k8s.gcr.io/hyperkube:v1.18.8 command: kube-scheduler --master http://localhost:8080 diff --git a/prepare-vms/lib/commands.sh b/prepare-vms/lib/commands.sh index 5c0cc631..61d587b3 100644 --- a/prepare-vms/lib/commands.sh +++ b/prepare-vms/lib/commands.sh @@ -139,19 +139,19 @@ _cmd_kubebins() { cd /usr/local/bin if ! [ -x etcd ]; then ##VERSION## - curl -L https://github.com/etcd-io/etcd/releases/download/v3.4.3/etcd-v3.4.3-linux-amd64.tar.gz \ + curl -L https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz \ | sudo tar --strip-components=1 --wildcards -zx '*/etcd' '*/etcdctl' fi if ! [ -x hyperkube ]; then ##VERSION## - curl -L https://dl.k8s.io/v1.17.2/kubernetes-server-linux-amd64.tar.gz \ + curl -L https://dl.k8s.io/v1.18.8/kubernetes-server-linux-amd64.tar.gz \ | sudo tar --strip-components=3 -zx \ kubernetes/server/bin/kube{ctl,let,-proxy,-apiserver,-scheduler,-controller-manager} fi sudo mkdir -p /opt/cni/bin cd /opt/cni/bin if ! [ -x bridge ]; then - curl -L https://github.com/containernetworking/plugins/releases/download/v0.7.6/cni-plugins-amd64-v0.7.6.tgz \ + curl -L https://github.com/containernetworking/plugins/releases/download/v0.8.6/cni-plugins-linux-amd64-v0.8.6.tgz \ | sudo tar -zx fi " From b4c03781141d459968aac49fa0c4c78d4bf1d512 Mon Sep 17 00:00:00 2001 From: Jerome Petazzoni Date: Mon, 31 Aug 2020 16:31:59 +0200 Subject: [PATCH 7/7] Add ips command to output tab-separated addresses --- prepare-vms/lib/commands.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/prepare-vms/lib/commands.sh b/prepare-vms/lib/commands.sh index 61d587b3..1a190b7e 100644 --- a/prepare-vms/lib/commands.sh +++ b/prepare-vms/lib/commands.sh @@ -322,6 +322,22 @@ _cmd_ids() { aws_get_instance_ids_by_client_token $TAG } +_cmd ips "Show the IP addresses for a given tag" +_cmd_ips() { + TAG=$1 + need_tag $TAG + + SETTINGS=tags/$TAG/settings.yaml + CLUSTERSIZE=$(awk '/^clustersize:/ {print $2}' $SETTINGS) + while true; do + for I in $(seq $CLUSTERSIZE); do + read ip || return 0 + printf "%s\t" "$ip" + done + printf "\n" + done < tags/$TAG/ips.txt +} + _cmd list "List available groups for a given infrastructure" _cmd_list() { need_infra $1