Cloud/Kubernetes

Kubernetes) AWS 기반 쿠버네티스 H.A 구축 프로젝트 1편

Adım Kim 2022. 10. 18. 00:34
실습 환경 : AWS console (2022/10), Visual Studio Code
실습 목적 : stacked etcd 방식의 고가용성(HA) 쿠버네티스 클러스터를 구성해본다.

 

1. 템플릿 생성과 Node 생성


(1) 템플릿 생성하기
    - 
AWS Ec2메뉴 인스턴스 > 시작 템플릿, 시작 템플릭 생성 버튼 클릭
    #  1. 시작 템플릿 이름/설명 설정하기

    #  2. 애플리케이션 및 OS 이미지에서 Ubuntu, Ubuntu Server 20.04LTS 선택

    #  3. 인스턴스 유형은 t3.large, 키페어는 기존 키페어를 사용

    #  4. 서브넷은 기존 서브넷 사용, 연습용으로 모든 트래픽을 허용하는 보안그룹 생성

    #  5. 리소스 태그에 Name 태그 추가


(2)  Masternode 생성하기
    -  인스턴스 > 인스턴스, 인스턴스 시작 에서 템플릿으로 인스턴스 시작 실행
    #  1. 시작 템플릿 선택에서 새로 생성한 템플릿 선택

    #  2. 추가 설정없이 인스턴스 시작

    #  3. Name 을 master node로 구분할 수 있게 변경

    #  4. master node에 EIP 연결

    #  5. master node의 호스트명 변경

sudo hostnamectl set-hostname master1
exit



2. k8s 기본구성과 AMI 생성


(1)  k8s 환경 구성 - containerd 설치
sudo -i  (root shell)
apt-get update && apt-get upgrade -y
sudo modprobe overlay
sudo modprobe br_netfilter

sudo sh -c 'echo "br_netfilter" > /etc/modules-load.d/br_netfilter.conf'
sudo sh -c 'echo "overlay" > /etc/modules-load.d/overlay.conf'

cat << EOF | tee /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system
 
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 
apt install containerd -y


(2)  k8s 환경 구성 - containerd 설정

mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml

    -  config.toml 파일에서 disabled_plugins 앞에 # 추가

(3)  k8s 환경 구성 - kubeadm, kubelet, kubectl 설치

sudo sh -c "echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' >> /etc/apt/sources.list.d/kubernetes.list"
 
sudo sh -c "curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -"

sudo apt-get update 
 
sudo apt-get install -y kubeadm=1.24.1-00 kubelet=1.24.1-00 kubectl=1.24.1-00

(4)  AMI 생성
    -  인스턴스 > 인스턴스에서 master node 선택후, 작업 -> 이미지 및 템플릿 -> 이미지 생성




3. master/worker node 생성


(1)  AMI로 인스턴스 생성
    -  이미지> AMI에서 새로 생성한 AMI 선택 후, AMI로 인스턴스 시작 클릭
    #  1. 이름 및 태그 설정

    #  2. 인스턴스 유형, 키페어 설정 - t3.large, 기존 키페어

    #  3. 네트워크 설정 - 기존 VPC 선택, 퍼블릭 IP 자동할당, 모든 트래픽 허용 보안그룹 선택

    #  4. 요약 - 인스턴스 개수 3개 설정 후, 인스턴스 시작 클릭


(2) master node와 worker node 설정
    #  1. 새로 생성된 3개의 인스턴스의 이름설정 - k8s-masterND2, k8s-masterND3, k8s-workerND1
    #  2. 각 노드의 host명 변경
sudo hostnamectl set-hostname <host명>
exit
   #  3. 모든 노드의 hosts 파일 수정
sudo -i
vi /etc/hosts
    -  master node, worker node의 hosts 파일 마지막줄에 노드의 private ip, 호스트명, alias를 등록한다.
    -  master node1은 private ip와 호스트명 사이에 k8s를 추가로 입력한다.




4. cluster 구성하기


   #  1. cluster 구성 - kubeadm init

kubeadm config images pull
kubeadm init --kubernetes-version=1.24.1 --control-plane-endpoint="k8s:6443" \
--pod-network-cidr=192.168.0.0/16 --upload-certs|tee /tmp/kubeadm.out


   #  2. cluster 구성 - CLI 설정 (calico Manifest 파일 다운로드)

apt install -y wget
wget https://docs.projectcalico.org/manifests/calico.yaml


   #  3. cluster 구성 - kubectl 권한 부여

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config


   #  4. cluster 구성 - calico Manifest 파일 적용

kubectl apply -f calico.yaml
kubectl get po -A

   #  5. cluster 구성 - master node join
    -  cat /tmp/kubeadm.out 에서 join에 필요한 명령어를 찾을 수 있다.

sudo -i
kubeadm join k8s:6443 --token bix91i.tywzwfo5v6f934ds \
        --discovery-token-ca-cert-hash sha256:ba634fda72d4024a904ffde5a0ce536a04a5c225223e2f08a9ce36d1a9a8d886 \
        --control-plane --certificate-key e0cd99fe0b8325e5e8ff03499d61d1ebfd3584bf9434951c70bd52911345fbf1

   #  6. cluster 구성 - worker node join

sudo -i
kubeadm join k8s:6443 --token bix91i.tywzwfo5v6f934ds \
        --discovery-token-ca-cert-hash sha256:ba634fda72d4024a904ffde5a0ce536a04a5c225223e2f08a9ce36d1a9a8d886

   #  7. cluster 구성 - node 구성 확인

kubectl get nodes