Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

JINIers

우분투 환경에서 쿠버네티스 클러스터 구성(on-prem) 본문

공부/Docker&K8S

우분투 환경에서 쿠버네티스 클러스터 구성(on-prem)

JINIers 2023. 2. 15. 10:55

※ GCP에서 vm으로 구축하였다.

구축할 거

vm 구성

머신타입 : n2-standard-2

* cpu는 2 이상이어야한다.

부트디스크 : 100gb

이렇게 설정을 세개를 하면
vm 3개가 만들어지지

그럼 이제 설정따리를 해주면 됨

 

강사님은 체크리스트를 만들어서 하나씩 체크를 해주셨다.

 

체크리스트

  • 램: 최소 2GB
  • cpu: 2개 이상
  • 클러스터 내 네트워크 연결
  • 특정포트 개방
  • 스왑 비활성화

대충 이렇게 볼 수 있다.

 

 

vm system 업데이트

# root로 접속
sudo -i

# vm 업데이트
apt update

# root가 아닐경우
sudo apt update

 

스왑 비활성화

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

 

컨테이너 런타임 구성

참고링크

* using docker repository 부분을 참고한다.

쉘 파일로 만들어서 실행시켜줄 거다.

vi install.sh

 

using docker repository 부분을 긁어온다.

# Using Docker Repository
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) 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

# containerd 설치
sudo apt update
sudo apt install -y containerd.io
# sudo systemctl status containerd 

# Containerd configuration for Kubernetes
cat <<EOF | sudo tee -a /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
EOF

sudo sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml
sudo systemctl restart containerd

# 소켓이 있는지 확인
ls /var/run/containerd/containerd.sock

 

쉘 파일 실행

. install.sh

 

kubeadm, kubelet, kubectl 설치

참고링크

에 패키지에 대한 설명이 나와있다.

간략하게 봐보자

  • kubeadm: 클러스터를 부트스트랩 하는 명령어
  • kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트
  • kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티
cat <<EOF > kube_install.sh
# 1. apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# 2. 구글 클라우드의 공개 사이닝 키를 다운로드 한다.
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

# 3. 쿠버네티스 apt 리포지터리를 추가한다.
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

# 4. apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다.
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
EOF

sudo bash kube_install.sh

 

kubeadm, kubectl, kubelet 설치 완료

 

kubeadm 버전 확인

kubeadm version

 

 

넷필터 브릿지(br_netfilter) 설정

* 쿠버네티스 설치 시 br_netfilter 모듈이 필요함

이 모듈을 사용하면 브릿지를 통과하는 패킷이 필터링 및 포트 전달을 위해 iptables에 의해 처리되고 클러스터의 pod끼리 통신이 가능하다.

** docker를 설치하면 할 필요가 X / container d를 설치하면 설치 O

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

 

master node, work node 공동작업 완료


그 뒤에는 마스터노드와 워크노드 각각 작업을 해주는데(kubeadm init)

링크의 후반부와 똑같다.(하지만 한번 더 작성할거야..)

 

master 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

# root 유저라면 아래 명령어를 추가
export KUBECONFIG=/etc/kubernetes/admin.conf

 

노드 확인

kubectl get nodes

일단은 master node만 떠 있음


work node

work-node에서는 토큰으로 인증 및 조인 한다.

 

토큰 실행

kubeadm join 10.138.0.2:6443 --token vmilhk.r430ewucjtx458ic \
        --discovery-token-ca-cert-hash sha256:5dcfc760f61a0bebf1de432f2a4b273d0595ac9e402553266c33c50e5faae8d4


다시 master node

연결된 노드 확인

kubectl get nodes

워커노드가 조인된 것을 확인할 수 있다.

status가 NotReady라고 나오는데 이건 정상이다.

쿠버네티스 안에 노드간 통신을 연결하는 네트워크 패키지를 설치해줘야한다.


pod 네트워크 연결하기

마스터 노드를 init 한 후에 나오는 pod network 연결을 위해 패키지를 실행한다.

링크를 통해서 자세한 설명을 확인할 수 있다.

보통 calico, cilium, weaveNet 이렇게 세가지를 많이 쓴다.

강의에서는 cilium을 사용하였다.

 

 

실리움 구성요소 설치

curl -LO https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz
cilium install

 

노드 상태 확인

kubectl get nodes

status가 NotReady에서 Ready로 변경된 것을 확인할 수 있다.

 

 

실리움 상태 확인

cilium status

cilium이 제대로 설치되었는지 확인할 수 있다.

 

master - work node install 끗!!!!!!!!!!!!!!!!!!!!!!!! 


vm에서 컨테이너 배포 및 실행하기 보러가기

 

 

Comments