diff --git a/README.md b/README.md index de0a3b3..0430d8f 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ AWS Kubernetes is a Kubernetes cluster deployed using [Kubeadm](https://kubernet ## Updates +* *18.12.2020* Update to Kubernetes 1.20.0, update add-ons, move to Containerd runtime * *24.11.2020* Update to Kubernetes 1.19.4 * *18.10.2020* Update to Kubernetes 1.19.3 * *19.9.2020* Update to Kubernetes 1.19.2 diff --git a/scripts/init-aws-kubernetes-master.sh b/scripts/init-aws-kubernetes-master.sh index 23214a7..f0f6aae 100755 --- a/scripts/init-aws-kubernetes-master.sh +++ b/scripts/init-aws-kubernetes-master.sh @@ -16,12 +16,13 @@ export ASG_MAX_NODES="${asg_max_nodes}" export AWS_REGION=${aws_region} export AWS_SUBNETS="${aws_subnets}" export ADDONS="${addons}" -export KUBERNETES_VERSION="1.19.4" +export KUBERNETES_VERSION="1.20.0" # 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 @@ -32,16 +33,81 @@ yum install -y epel-release yum install -y python2-pip pip install awscli --upgrade +######################################## +######################################## # 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 '/^ \[plugins\."io\.containerd\.grpc\.v1\.cri"\.containerd\.runtimes\.runc\.options\]/a \ SystemdCgroup = true' /etc/containerd/config.toml +systemctl restart containerd + +######################################## +######################################## # Install docker -yum install -y yum-utils device-mapper-persistent-data lvm2 docker +######################################## +######################################## -# Install Kubernetes components +# yum install -y yum-utils device-mapper-persistent-data lvm2 docker + +# # Start services +# systemctl enable docker +# systemctl start docker + +# # Set settings needed by Docker +# sysctl net.bridge.bridge-nf-call-iptables=1 +# sysctl net.bridge.bridge-nf-call-ip6tables=1 + +######################################## +######################################## +# Install Kubernetes compoenents +######################################## +######################################## sudo cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes @@ -53,32 +119,24 @@ gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF -# 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 - yum install -y kubelet-$KUBERNETES_VERSION kubeadm-$KUBERNETES_VERSION kubernetes-cni # Start services -systemctl enable docker -systemctl start docker systemctl enable kubelet systemctl start kubelet -# Set settings needed by Docker -sysctl net.bridge.bridge-nf-call-iptables=1 -sysctl net.bridge.bridge-nf-call-ip6tables=1 - # 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 +kubeadm alpha kubeconfig user --client-name admin --config /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:\/\/$IP_ADDRESS:6443/server: https:\/\/$DNS_NAME:6443/g" /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 -# Load addons +######################################## +######################################## +# Install addons +######################################## +######################################## for ADDON in $ADDONS do curl $ADDON | envsubst > /tmp/addon.yaml diff --git a/scripts/init-aws-kubernetes-node.sh b/scripts/init-aws-kubernetes-node.sh index cb12dc0..3e15b19 100755 --- a/scripts/init-aws-kubernetes-node.sh +++ b/scripts/init-aws-kubernetes-node.sh @@ -9,21 +9,84 @@ set -o pipefail export KUBEADM_TOKEN=${kubeadm_token} export MASTER_IP=${master_private_ip} export DNS_NAME=${dns_name} -export KUBERNETES_VERSION="1.19.4" +export KUBERNETES_VERSION="1.20.0" # Set this only after setting the defaults set -o nounset # We 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') +######################################## +######################################## +# 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 '/^ \[plugins\."io\.containerd\.grpc\.v1\.cri"\.containerd\.runtimes\.runc\.options\]/a \ SystemdCgroup = true' /etc/containerd/config.toml +systemctl restart containerd + +######################################## +######################################## # Install docker -yum install -y yum-utils device-mapper-persistent-data lvm2 docker +######################################## +######################################## + +# yum install -y yum-utils curl gettext device-mapper-persistent-data lvm2 docker + +# # Start services +# systemctl enable docker +# systemctl start docker + +# # Set settings needed by Docker +# sysctl net.bridge.bridge-nf-call-iptables=1 +# sysctl net.bridge.bridge-nf-call-ip6tables=1 -# Install Kubernetes components + +######################################## +######################################## +# Install Kubernetes compoenents +######################################## +######################################## sudo cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes @@ -35,32 +98,23 @@ gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF -# 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 - yum install -y kubelet-$KUBERNETES_VERSION kubeadm-$KUBERNETES_VERSION kubernetes-cni # Start services -systemctl enable docker -systemctl start docker systemctl enable kubelet systemctl start kubelet -# Set settings needed by Docker -sysctl net.bridge.bridge-nf-call-iptables=1 -sysctl net.bridge.bridge-nf-call-ip6tables=1 - # 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 master +######################################## +######################################## +# Initialize the Kube node +######################################## +######################################## cat >/tmp/kubeadm.yaml <