k8s

k8s v1.28 install on AWS EC2(Ubuntu22.04) with calico and crio-o (2023-11-15)

yechan93 2023. 6. 24. 15:27

k8s를 사용하는 가장 간단한 방법은 EKS 를 사용하는 것이다. 하지만 CKA 연습을 위해, 혹은 비용문제로 인해 EKS 를

사용 하지 못하는 경우가 있다. 이때 VM ware 를 사용하는 것도 방법이지만 EC2에서 직접 k8s 를 설치 하여 사용하는 방법도 고려할 수 있다.


참고사항 

 

  • k8s를 기동하기 위해서는 2core, 2mem 가 최소 사양이 되므로, 인스턴스 타입을 고려해서 EC2 생성
  • k8s 가 버전이 올라가면서 docker runtime 을 지원하지 않게 됨에 따라, CRI(container runtime interface) 를 직접 설치 해야 한다 // 1.24 버전부터 지원이 안되는 것으로 알고 있다
  • k8s 는 CNI(container network interface)도 기본 지원을 하지 않는다. 따라서 사용할 CNI 또한 직접설치해야 한다.

스펙 상세

 

EC2 : t3a.medium 

Disk : gp3 15 GiB

OS : Ubuntu22.04

k8s : 1.2.0

CRI : crio-o

CNI : calico

 


설치 상세 내용

 


1. sudo -i 로 root 로 k8s 를 설치 진행 한다

 

2. ubuntu 기본 apt 업데이트 진행

sudo apt-get update
sudo apt-get upgrade -y

3. k8s 설치를 위해 필요한 인증관련 도구 설치

sudo apt-get install -y apt-transport-https ca-certificates curl

4. swap off 설정

sudo swapoff -a

5. cri-o 설치를 위한 변수 지정

export OS_VERSION_ID=xUbuntu_$(cat /etc/os-release | grep VERSION_ID | awk -F"=" '{print $2}' | tr -d '"')
export CRIO_VERSION=1.28

 

 

6. cro-o 설치

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS_VERSION_ID/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS_VERSION_ID/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS_VERSION_ID/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS_VERSION_ID/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -


sudo apt-get update
sudo apt-get install cri-o cri-o-runc cri-tools -y

sudo systemctl daemon-reload
sudo systemctl enable crio --now

※cri-o 를 설치하게 되면 cri-o 기본 설정으로 cni 가 설치가 되는데, 여기서 우리는 calico 를 사용할 예정이므로 아래 경로에 있는 파일 삭제

/etc/cni/net.d 

 

7. k8s 설치및 사용을 위한 kube 관련 도구 설치

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb 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

8. kubeadm init 을위 환경 설정

modprobe br_netfilter

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward

9. k8s cluster 생성

아래 내용을 샘플로 본인에 맞는 cidr 및 version install
sudo kubeadm init --pod-network-cidr=10.85.0.0/16 --kubernetes-version 1.28.0


sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --kubernetes-version 1.28.0 --node-name master-node

생성이 완료되면 아래와 같은 내용이 출력 된다

아래 내용중 kubeadm join 부분을 꼭 저장해 두자

-> 추후 노드 추가할때 해당 부분이 필요

10. kube 명령어 설정 및 kube 설정 확인

  • 아래와 같이 coredns 가 pending 인 상태가 된것을 확인 할 수 있다.
  • 해당 부분은 cni 를 설치하고 나면 정상적으로 running 상태로 변경된다
  • coredns 가 running이 되면 node 가 ready 상태로 변경 된다
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
alias k=kubectl

k get no
k get po -A

11. calico cni 설치

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml


wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml

위 파일을 다운로드 받은 후 vi 로 아래 사진과 같이 13번째줄의 cidr 을 수정 해야함
kubeadm init 시 pod cidr 를 192.168.0.0/16 로 지정 했으면 수정없이 배포하면 됨

k apply -f custom-resources.yaml

12. node 및 pod 확인

  • 시간이 지나면 아래와 같이 pod 와 node 가 running 이 되는 것을 확인 할 수 있다
watch kubectl get po -A -o wide
kubectl get no

 

13. calico 후속작업

kubectl taint nodes --all node-role.kubernetes.io/control-plane-

 

여기까지하면 k8s master cluster 는 설치가 완료 된다.

이제 설치한 k8s cluster 에 node 를 추가하는 방법을 진행해 보겠습니다.



 

클러스터 생성시 진행한 1~8 번 까지의 과정을 반복한다

하나하나 입력하면 귀찮으니 아래 스크립트로 진행

#! /bin/sh

sudo apt-get update
sudo apt-get upgrade -y

sudo apt-get install -y apt-transport-https ca-certificates curl
sleep 1
sudo swapoff -a

sleep 1
export OS_VERSION_ID=xUbuntu_$(cat /etc/os-release | grep VERSION_ID | awk -F"=" '{print $2}' | tr -d '"')
export CRIO_VERSION=1.28

echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS_VERSION_ID/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
sleep 1
echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS_VERSION_ID/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list

sleep 1
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS_VERSION_ID/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -

sleep 1
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS_VERSION_ID/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add -

sudo apt-get update

sleep 1
sudo apt-get install cri-o cri-o-runc cri-tools -y
sleep 1
rm /etc/cni/net.d/*


sleep 1

sudo systemctl daemon-reload
sudo systemctl enable crio --now

sleep 1
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

sleep 1
echo "deb 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
sleep 1
sudo apt-mark hold kubelet kubeadm kubectl

modprobe br_netfilter

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward

 

이제 클러스터 생성시 저장해둔 kubeadm join 명령어를 입력

 

마스터노드에서 아래와 같이 조회해 보면 정상적으로 클러스터 구성이 된 것을 볼 수 있다

주의사항

root 가 아닌 다른 계정에서 k8s 를 사용하기 위해서는 아래 명령어 입력 필요

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