#!/bin/bash exec &> /var/log/init-aws-kubernetes-master.log set -o verbose set -o errexit set -o pipefail export KUBEADM_TOKEN=${kubeadm_token} export DNS_NAME=${dns_name} export IP_ADDRESS=${ip_address} export CLUSTER_NAME=${cluster_name} export ASG_NAME=${asg_name} export ASG_MIN_NODES="${asg_min_nodes}" export ASG_MAX_NODES="${asg_max_nodes}" export AWS_REGION=${aws_region} export AWS_SUBNETS="${aws_subnets}" export ADDONS="${addons}" export KUBERNETES_VERSION="1.25.2" # Set this only after setting the defaults set -o nounset # We needed to match the hostname expected by kubeadm an the hostname used by kubelet LOCAL_IP_ADDRESS=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4) FULL_HOSTNAME="$(curl -s http://169.254.169.254/latest/meta-data/hostname)" # Make DNS lowercase DNS_NAME=$(echo "$DNS_NAME" | tr 'A-Z' 'a-z') # Install AWS CLI client yum install -y epel-release yum install -y python3-pip pip3 install --upgrade awscli ######################################## ######################################## # Tag subnets ######################################## ######################################## for SUBNET in $AWS_SUBNETS do aws ec2 create-tags --resources $SUBNET --tags Key=kubernetes.io/cluster/$CLUSTER_NAME,Value=shared --region $AWS_REGION done ######################################## ######################################## # Disable SELinux ######################################## ######################################## # setenforce returns non zero if already SE Linux is already disabled is_enforced=$(getenforce) if [[ $is_enforced != "Disabled" ]]; then setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config fi ######################################## ######################################## # Install containerd ######################################## ######################################## cat < /etc/containerd/config.toml sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml systemctl restart containerd systemctl enable containerd ######################################## ######################################## # Install Kubernetes components ######################################## ######################################## sudo cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF yum install -y kubelet-$KUBERNETES_VERSION kubeadm-$KUBERNETES_VERSION kubernetes-cni --disableexcludes=kubernetes # Start services systemctl enable kubelet systemctl start kubelet # Fix certificates file on CentOS if cat /etc/*release | grep ^NAME= | grep CentOS ; then rm -rf /etc/ssl/certs/ca-certificates.crt/ cp /etc/ssl/certs/ca-bundle.crt /etc/ssl/certs/ca-certificates.crt fi ######################################## ######################################## # Initialize the Kube cluster ######################################## ######################################## # Initialize the master cat >/tmp/kubeadm.yaml < $KUBECONFIG_OUTPUT chown centos:centos $KUBECONFIG_OUTPUT chmod 0600 $KUBECONFIG_OUTPUT cp /home/centos/kubeconfig_ip /home/centos/kubeconfig sed -i "s/server: https:\/\/.*:6443/server: https:\/\/$IP_ADDRESS:6443/g" /home/centos/kubeconfig_ip sed -i "s/server: https:\/\/.*:6443/server: https:\/\/$DNS_NAME:6443/g" /home/centos/kubeconfig chown centos:centos /home/centos/kubeconfig chmod 0600 /home/centos/kubeconfig ######################################## ######################################## # Install addons ######################################## ######################################## for ADDON in $ADDONS do curl $ADDON | envsubst > /tmp/addon.yaml kubectl apply -f /tmp/addon.yaml rm /tmp/addon.yaml done