Last active
August 1, 2018 16:41
-
-
Save CalvinHartwell/3bceb647dbf181750449a77dc2699da0 to your computer and use it in GitHub Desktop.
canonical-kubernetes-offline-install.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
echo "Installing Missing Packages" | |
sudo apt update && sudo apt install -y simplestreams apache2 apt-mirror git docker.io python3-pip unzip | |
sudo pip3 install pyyaml | |
sudo pip3 install pyaml | |
sudo snap install kubectl --classic | |
sudo apt-get install juju -y | |
echo "Writing Config Files" | |
sudo tee /etc/apt/mirror.list > /dev/null <<EOL | |
set nthreads 20 | |
set _tilde 0 | |
deb-i386 http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse | |
deb-i386 http://archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse | |
deb-i386 http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse | |
deb-i386 http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse | |
deb-amd64 http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse | |
deb-amd64 http://archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse | |
deb-amd64 http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse | |
deb-amd64 http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse | |
deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse | |
deb http://archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse | |
deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse | |
deb http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse | |
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse | |
deb-src http://archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse | |
deb-src http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse | |
deb-src http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse | |
clean http://archive.ubuntu.com/ubuntu | |
EOL | |
echo "Syncing Files, this will take 2-3+ hours" | |
sudo docker run -d -p 5000:5000 --restart=always --name registry registry:2 | |
export REGISTRY="localhost:5000" | |
sudo docker pull gcr.io/google_containers/pause-amd64:3.1 | |
sudo docker tag gcr.io/google_containers/pause-amd64:3.1 ${REGISTRY}/google_containers/pause-amd64:3.1 | |
sudo docker push ${REGISTRY}/google_containers/pause-amd64:3.1 | |
sudo docker pull k8s.gcr.io/nginx-ingress-controller:0.9.0-beta.15 | |
sudo docker tag k8s.gcr.io/nginx-ingress-controller:0.9.0-beta.15 ${REGISTRY}/nginx-ingress-controller:0.9.0-beta.15 | |
sudo docker push ${REGISTRY}/nginx-ingress-controller:0.9.0-beta.15 | |
sudo docker pull k8s.gcr.io/defaultbackend:1.4 | |
sudo docker tag k8s.gcr.io/defaultbackend:1.4 ${REGISTRY}/defaultbackend:1.4 | |
sudo docker push ${REGISTRY}/defaultbackend:1.4 | |
sudo docker pull cdkbot/addon-resizer-amd64:1.8.1 | |
sudo docker tag cdkbot/addon-resizer-amd64:1.8.1 ${REGISTRY}/addon-resizer-amd64:1.8.1 | |
sudo docker push ${REGISTRY}/addon-resizer-amd64:1.8.1 | |
sudo docker pull k8s.gcr.io/heapster-amd64:v1.5.3 | |
sudo docker tag k8s.gcr.io/heapster-amd64:v1.5.3 ${REGISTRY}/heapster-amd64:v1.5.3 | |
sudo docker push ${REGISTRY}/heapster-amd64:v1.5.3 | |
sudo docker pull k8s.gcr.io/heapster-influxdb-amd64:v1.3.3 | |
sudo docker tag k8s.gcr.io/heapster-influxdb-amd64:v1.3.3 ${REGISTRY}/heapster-influxdb-amd64:v1.3.3 | |
sudo docker push ${REGISTRY}/heapster-influxdb-amd64:v1.3.3 | |
sudo docker pull k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.10 | |
sudo docker tag k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.10 ${REGISTRY}/k8s-dns-kube-dns-amd64:1.14.10 | |
sudo docker push ${REGISTRY}/k8s-dns-kube-dns-amd64:1.14.10 | |
sudo docker pull k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.10 | |
sudo docker tag k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.10 ${REGISTRY}/k8s-dns-dnsmasq-nanny-amd64:1.14.10 | |
sudo docker push ${REGISTRY}/k8s-dns-dnsmasq-nanny-amd64:1.14.10 | |
sudo docker pull k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.10 | |
sudo docker tag k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.10 ${REGISTRY}/k8s-dns-sidecar-amd64:1.14.10 | |
sudo docker push ${REGISTRY}/k8s-dns-sidecar-amd64:1.14.10 | |
sudo docker pull k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3 | |
sudo docker tag k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3 ${REGISTRY}/kubernetes-dashboard-amd64:v1.8.3 | |
sudo docker push ${REGISTRY}/kubernetes-dashboard-amd64:v1.8.3 | |
sudo docker pull k8s.gcr.io/metrics-server-amd64:v0.2.1 | |
sudo docker tag k8s.gcr.io/metrics-server-amd64:v0.2.1 ${REGISTRY}/metrics-server-amd64:v0.2.1 | |
sudo docker push ${REGISTRY}/metrics-server-amd64:v0.2.1 | |
# pull nexus for a private registry (optional) | |
sudo docker pull sonatype/nexus3:latest | |
sudo docker tag sonatype/nexus3:latest ${REGISTRY}/nexus3:latest | |
sudo docker push ${REGISTRY}/nexus3:latest | |
# pull rancher for management (optional) | |
sudo docker pull rancher/rancher:latest | |
sudo docker tag rancher/rancher:latest ${REGISTRY}/rancher:latest | |
sudo docker push ${REGISTRY}/rancher:latest | |
sudo apt-mirror | |
# simplestreams metadata | |
workdir=/var/spool/sstreams/juju | |
sudo sstream-mirror --no-verify --progress --max=1 --path=streams/v1/index2.sjson https://streams.canonical.com/juju/tools/ $workdir 'arch=amd64' 'release~(xenial|bionic)' 'version~(2.2|2.3|2.4)' | |
workdir=/var/spool/sstreams/lxdkvm | |
sudo sstream-mirror --keyring=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg --progress --max=1 --path=streams/v1/index.json https://cloud-images.ubuntu.com/releases/ $workdir/_latest 'arch=amd64' 'release~(trusty|xenial)' 'ftype~(lxd.tar.xz|squashfs|root.tar.xz|root.tar.gz|disk1.img|.json|.sjson)' | |
# Running CDK Shrink Wrap | |
git clone https://github.com/juju-solutions/cdk-shrinkwrap.git | |
cd cdk-shrinkwrap && ./shrinkwrap.py canonical-kubernetes --channel stable | |
# Pull some missing charms for CDK: Ceph-OSD, Ceph-Mon, Canal, Calico, Vault | |
wget -O ceph-osd.zip https://api.jujucharms.com/charmstore/v5/ceph-osd/archive | |
wget -O ceph-mon.zip https://api.jujucharms.com/charmstore/v5/ceph-mon/archive | |
wget -O canal.zip https://api.jujucharms.com/charmstore/v5/canonical-kubernetes-canal/archive | |
wget -O calico.zip https://api.jujucharms.com/charmstore/v5/~containers/calico/archive | |
wget -O vault.zip https://api.jujucharms.com/charmstore/v5/~openstack-charmers/vault/archive | |
# Pull missing charms for log-monitoring and performance monitoring | |
wget -O telegraf.zip https://api.jujucharms.com/charmstore/v5/telegraf/archive | |
wget -O graylog.zip https://api.jujucharms.com/charmstore/v5/graylog/archive | |
wget -O mongodb.zip https://api.jujucharms.com/charmstore/v5/mongodb/archive | |
wget -O elasticsearch.zip https://api.jujucharms.com/charmstore/v5/elasticsearch/archive | |
wget -O apache2.zip https://api.jujucharms.com/charmstore/v5/apache2/archive | |
wget -O prometheus.zip https://api.jujucharms.com/charmstore/v5/prometheus/archive | |
wget -O grafana.zip https://api.jujucharms.com/charmstore/v5/grafana/archive | |
wget -o filebeat.zip https://api.jujucharms.com/charmstore/v5/filebeat/archive | |
# Pull missing configuration scripts and kubernetes payloads | |
git clone https://github.com/CanonicalLtd/canonical-kubernetes-demos.git | |
git clone https://github.com/CanonicalLtd/canonical-kubernetes-third-party-integrations.git | |
# Configure Mirror to Serve Repo to other nodes | |
sudo tee /etc/apache2/sites-available/sstreams-mirror.conf > /dev/null <<EOL | |
<VirtualHost *:443> | |
ServerName sstreams.cdk-juju | |
ServerAlias * | |
DocumentRoot /var/spool/sstreams/ | |
SSLCACertificatePath /etc/ssl/certs | |
SSLCertificateFile /etc/pki/tls/certs/mirror.crt | |
SSLEngine On | |
SSLCertificateKeyFile /etc/pki/tls/private/mirror.key | |
LogLevel info | |
ErrorLog /var/log/apache2/mirror-lxdkvm-error.log | |
CustomLog /var/log/apache2/mirror-lxdkvm-access.log combined | |
<Directory /var/spool/sstreams/> | |
Options Indexes FollowSymLinks | |
AllowOverride None | |
Require all granted | |
</Directory> | |
</VirtualHost> | |
EOL | |
sudo tee /etc/apache2/sites-available/ubuntu-mirror.conf > /dev/null <<EOL | |
<VirtualHost *:80> | |
ServerName cdk-juju | |
ServerAlias * | |
DocumentRoot /var/spool/apt-mirror/mirror/archive.ubuntu.com/ | |
LogLevel info | |
ErrorLog /var/log/apache2/mirror-archive.ubuntu.com-error.log | |
CustomLog /var/log/apache2/mirror-archive.ubuntu.com-access.log combined | |
<Directory /var/spool/apt-mirror/> | |
Options Indexes FollowSymLinks | |
AllowOverride None | |
Require all granted | |
</Directory> | |
</VirtualHost> | |
EOL | |
# Generate SSL cert to be used by apache | |
sudo mkdir -p /etc/pki/tls/private/ | |
sudo mkdir -p /etc/pki/tls/certs/ | |
PRIMARYIP=`hostname -i` | |
sudo tee /root/$HOSTNAME.conf > /dev/null <<EOL | |
[ req ] | |
prompt = no | |
default_bits = 4096 | |
distinguished_name = req_distinguished_name | |
req_extensions = req_ext | |
[ req_distinguished_name ] | |
C=GB | |
ST=London | |
L=London | |
O=Canonical | |
OU=Canonical | |
CN=$HOSTNAME | |
[ req_ext ] | |
subjectAltName = @alt_names | |
[alt_names] | |
DNS.1 = $HOSTNAME | |
DNS.2 = $PRIMARYIP | |
IP.1 = $PRIMARYIP | |
EOL | |
sudo openssl req \ | |
-new \ | |
-newkey rsa:4096 \ | |
-days 3650 \ | |
-nodes \ | |
-x509 \ | |
-config /root/$HOSTNAME.conf \ | |
-keyout /etc/pki/tls/private/mirror.key \ | |
-out /etc/pki/tls/certs/mirror.crt | |
sudo a2enmod ssl | |
sudo a2ensite sstreams-mirror.conf | |
sudo a2ensite ubuntu-mirror.conf | |
sudo systemctl restart apache2 | |
echo "Repo configuration and sync done, exiting...!" | |
echo "Ubuntu repo: http://$HOSTNAME/ubuntu/" | |
echo "LXD and KVM metadata: https://$HOSTNAME/lxdkvm/" | |
echo "Juju metadata: https://$HOSTNAME/juju/" | |
echo "You should also be able to use the IP address" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
...then to bootstrap: