JINIers
우분투 환경에서 쿠버네티스 클러스터 구성(on-prem) 본문
※ GCP에서 vm으로 구축하였다.
vm 구성
머신타입 : n2-standard-2
* cpu는 2 이상이어야한다.
부트디스크 : 100gb
그럼 이제 설정따리를 해주면 됨
강사님은 체크리스트를 만들어서 하나씩 체크를 해주셨다.
체크리스트
- 램: 최소 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
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
master - work node install 끗!!!!!!!!!!!!!!!!!!!!!!!!
vm에서 컨테이너 배포 및 실행하기 보러가기
'공부 > Docker&K8S' 카테고리의 다른 글
pod scale (0) | 2023.02.16 |
---|---|
VM에서 쿠버네티스 이용 컨테이너 배포 및 실행(on-prem) (0) | 2023.02.15 |
GKE에서 컨테이너 배포 및 실행 (0) | 2023.02.14 |
docker 이용 워드프레스 만들기 (0) | 2023.02.13 |
private registry 구현 및 사용 (0) | 2023.02.13 |