본문 바로가기
CSP (Cloud Service Provider)/AWS

쿠버네티스 EC2 ubuntu에 k8s 구성하기

by BTC_김쿼카 2022. 6. 29.

ABTCEFG♪  안녕하세요, 여러분!

 

BTC_김쿼카입니다.

 

이전 포스팅까지는 인프라 기초에 대해 배우는 시간이었다면 이번 포스팅부터는 저희와 같이 차근차근 쿠버네티스를 해볼 거에요! 그럼 시작해볼까요?

 

 


 

 

먼저 AWS console에 접속해주세요! 저는 기존에 미리 만들어두었던 test-vpc에서 진행하도록 할게요.

 

 

Chapter 1) EC2 생성

 

EC2 - Instances - Launch Instance를 클릭한 후 ec2 3대 만들기

 

[구성]

- Master(Control Plane), Worker node 2대

- AMI : Ubuntu 20.04

- Spec : t3 small 2 Core, 2 RAM

설정 결과

1-1) ami 이미지 선택

1-2) Instance type 설정 및 ssh 접속을 위한 key pair 생성

 

1-3) 보안 그룹 설정


현재 창은 그대로 두시고 검색 창에서 VPC 입력 후 새 탭으로 VPC 창을 띄워주세요.
security - security groups 에서 새 규칙을 만든 후 Inbound 포트 : 22, 2022, 6443 을 허용해줍니다.
참고로 저는 test-sg라고 네이밍을 정했답니다.
보안 그룹인데 0.0.0.0/0 로 모든 걸 허용해주면 보안 사고가 날 수도 있겠죠? source는 My IP로 설정해주세요!

Select existing security group을 클릭하고 새로고침 한 번 누른 후 만들어진 보안그룹을 선택하면 인스턴스 생성을 위한 설정은 끝이 납니다. 

Launch를 눌러 인스턴스를 만들면 끝!

 


Chapter 2) k8s 구성

2-1) SSH 접속 포트 변경


test 환경에서도 보안 상 ssh 22번 포트를 임의의 다른 포트로 변경해서 사용해야 하는데요! 제일 먼저 인스턴스 접속 후 ssh 접속 포트 변경하는 것부터 진행해줄게요.

$ sudo sed -i 's/#Port 22/Port 2022/' /etc/ssh/sshd_config
$ sudo systemctl restart sshd
$ sudo apt install net-tools
$ netstat -tnlp # tcp6 :::2022로 변경된 것 확인

 

변경했다면 sg의 22번 포트를 삭제하고 변경한 포트로 재접속 해주시면 됩니다.

 

 

2-2) Hostname 변경

 

각각의 ec2는 master와 worker 노드 역할을 하게 될 텐데 기존 이름을 그대로 두면 헷갈리니까 접속해서 hostname을 변경해주는 작업을 아래와 같이 진행합니다. 

$ sudo hostnamectl set-hostname master #node1 , node2
$ sudo reboot
$ cat /etc/hostname; hostname

 

 

2-3) Master와 Worker에 동일하게 진행해주시면 됩니다.

# docker 설치 <https://docs.docker.com/engine/install/ubuntu/>
$  sudo apt-get install \\
    ca-certificates \\
    curl \\
    gnupg \\
    lsb-release
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \\
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/ubuntu> \\
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io -y
$ sudo docker version
$ cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
$ sudo systemctl enable --now docker

# k8s 설치
$ sudo apt-get upgrade -y
$ sudo apt-get install -y apt-transport-https ca-certificates curl
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
$ echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] <https://apt.kubernetes.io/> kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet
$ kubeadm version
$ kubelet --version
$ kubectl version

 

2-4) Master에서만 진행

$ sudo kubeadm init
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl apply -f "<https://cloud.weave.works/k8s/net?k8s-version=$>(kubectl version | base64 | tr -d '\\n')"
$ kubectl get nodes # READY 확인
$ source <(kubectl completion bash)
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ kubeadm token list # master token 
$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' # discovery token

 

2-5) Worker에서만 진행

# worker node init 전까지 같음.
$ sudo rm /etc/containerd/config.toml
$ sudo systemctl restart containerd
$ sudo kubeadm join :6443 \\
--token  \\
--discovery-token-ca-cert-hash sha256:

 

*** Troubleshooting

# 만약 컨테이너 런타임 못 찾고 있다면 
$ sudo rm /etc/containerd/config.toml
$ sudo systemctl restart containerd
# cni 제거하려면 
$ kubectl delete -f ~

 

그렇다면 최종 결과는 다음과 같습니다!
다음 시간부터는 오늘 포스팅을 바탕으로 구성된 환경에서 실습을 진행해보도록 할게요. 

'CSP (Cloud Service Provider) > AWS' 카테고리의 다른 글

[AWS] IAM Type Certificate Upload  (0) 2022.07.01
AWS KMS란?  (0) 2022.06.30
[AWS] 도메인 등록  (0) 2022.06.27
Aws site-to-site VPN연결  (0) 2022.06.27
[AWS] EC2  (0) 2022.06.24

댓글