Intro
인프라에 관련된 교육을 들으러 가는데 쿠버네티스에 대해서 좀 알고 가면 좋을 거 같아서 실습을 진행해 보았습니다. 환경은 맥북 m3에서 진행했습니다.
🤔 쿠버네티스를 사용하는 이유
컨테이너 환경에서 많은 컨테이너를 관리할 때 용이하게 사용이 가능하고 고가용성을 얻을 수 있습니다.
쿠버네티스는 인프라를 추상화하여 쉽게 인프라를 관리할 수 있어서 마이크로 서비스 환경에 적합합니다.
ubuntu image 설치 & UTM 설치
UTM : https://mac.getutm.app/
ubuntu 20.04: https://cdimage.ubuntu.com/releases/focal/release/?_ga=2.203389460.469206803.1703810811-155106652.1703810811!
새 가상머신 만들기 누르고 virtualize 선택후 linux를 선택해 줍니다.
메모리는 4096MB, 디스크 용량은 40GB로 설정했습니다.
이제 가상머신을 실행시켜서 Ubuntu 서버를 설치해줍니다.
설정은 https://velog.io/@zihooy/M1-Mac-UTM-Linux-Ubuntu
이 블로그 참고해서 진행했습니다.
잘 실행이 되는 것을 확인합니다.
네트워크 설정을 통해서 인터넷 연결을 해줍니다.
일단 가상머신 전원을 끄고 edit을 눌러줍니다.
그리고 추가를 눌러서 네트워크를 추가해줍니다.
첫 번째 네트워크는 모드를 Bridged (Advanced)를 고르고 두번째는 Shared Network를 고르고 저장을 한다.
Bridged (Advanced)는 Host Only와 NAT를 모두 사용 가능 한것이고, Shared Network는 NAT의 기능을 담당한다.
네트워크를 확인해보면 두개가 잡히는 것을 확인할 수 있습니다.
ssh 통신을 하기 위해서 고정 ip를 할당하겠습니다.
sudo vi /etc/netplan/00-installer-config.yaml
명령어를 입력해서 설정 정보를 작성해줍니다.
테스트 해보니 맥 터미널에서 ifconfig | grep inet으로로 확인했을 때 나오는 Ip를 사용해야 인터넷 연결이 됩니다.
작성했으면 작성한 네트워크를 적용시켜줍니다.
sudo netplan apply
netplan get
ip addr
인터넷에 연결 되었는지 curl 명령어를 통해 확인해봅니다.
아래와 같이 응답이 온다면 인터넷 연결에 성공한 것입니다.
이제 ssh를 이용해서도 가상머신에 원격접속을 할 수 있습니다.
이제 master node를 만들었으니 worker node는 master node를 복제해서 만들어 줍니다.
clone을 해주고 이름을 바꿔준 뒤 mac address를 random을 눌러서 주소를 바꿔줍니다.
이제 sudo vi /etc/netplan/00-installer-config.yaml 파일에서 작성한 네트워크만 수정해줍니다.
)
이제 work1에서 work2로 원격접속 되는것까지 확인할 수 있었습니다.
설치
가상머신에 도커 설치
sudo apt-get update
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
Containerd 설치
sudo apt-get update
sudo apt-get install -y apt-transport-https
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.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 containerd
sudo systemctl status containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
vi /etc/containerd/config.toml
# cgroup driver(runc) 사용하기 설정
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
sudo systemctl restart containerd
kubeadm, kubectl, kubelet 설치전 환경설정
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
sudo swapon -s
//방법1
#방화벽 예외 설정(마스터, 워커)
sudo apt-get install -y firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
#마스터 노드일 경우
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250-10252/tcp
sudo firewall-cmd --permanent --add-port=8285/udp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --reload
#워커 노드일 경우
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --permanent --add-port=8285/udp
sudo firewall-cmd --permanent --add-port=8472/udp
sudo firewall-cmd --permanent --add-port=26443/tcp
sudo firewall-cmd --reload
//방법2
sudo apt-get install -y firewalld
sudo systemctl stop firewalld
sudo systemctl disable firewalld
방화벽 오픈 상태 확인
#열린 포트 확인
sudo firewall-cmd --list-all
#열린 포트 확인
sudo netstat -tlnp
#다른 노드의 포트 점검
telnet [ip] [port]
ex) telnet 192.168.100.128 6443
>>
Trying 192.168.111.128...
telnet: Unable to connect to remote host: Connection refused
#Trying 192.168.111.128... 만 계속 나오면 방화벽 오픈되어 있지 않음
#Connection refuesed가 나오면 방화벽 오픈은 되어 있으나 프로세스가 올라가 있지 않은 상태
#방법2
curl -v telnet://[ip]:[port]
네트워크 옵션 설정
#/etc/modules-load.d/k8s.conf 파일 생성
sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
#/etc/sysctl.d/k8s.conf 파일 생성
sudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#시스템 재시작 없이 stysctl 파라미터 반영
sudo sysctl --system
kubeadm, kubectl, kubelet 설치
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | 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 enable --now kubelet
kubelet --version
kubeadm version
kubectl version
sudo systemctl start kubelet
sudo systemctl enable kubelet
sudo systemctl status kubelet.service
master Node만 진행
//kubeadm을 통해 Control-Plane 설정을 완료하면 Worker Node의 join키가 발급되고 해당 키로 Worker Node를 등록 시 사용하니 저장하기
//오류가 발생해서 해당 오류 처리 밑에 적어뒀습니다.
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 get nodes
kubeadm init 오류 발생
sudo apt-get update
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo vi /etc/containerd/config.toml
//내용 변경
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
sudo systemctl restart containerd
sudo systemctl enable containerd
CNI(Container Network Interface) 설정(얘도 마스터만)
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
이제 워커 노드 클러스터 join
워커 노드도 control plane 설정할 때와 같은 오류 똑같이 처리
//아까 저장한 조인 키 붙여넣기
sudo kubeadm join [ip]:6443 --token [토큰명] --discovery-token-ca-cert-hash [hashkey]
잘 조인 된 것을 확인할 수 있습니다.
'Infra' 카테고리의 다른 글
terraform으로 aws 인프라 구축하기 (1) (0) | 2024.12.04 |
---|---|
EKS 클러스터 구축 (0) | 2024.12.04 |
AWS IAM 계정 공유 와 AWS 서비스에 IAM 역할 적용 (0) | 2024.12.04 |
Docker-compose 다루기 (0) | 2024.12.04 |
컨테이너 관리하기 (0) | 2024.12.04 |