우분투 22.04 환경에서 쿠버네티스- master node,worker node 구축

KIM HYUNMIN·2024년 9월 10일

쿠버네티스

목록 보기
7/16

환경

  • 우분투 22.04 (master_node)
  • 우분투 22.04 (worker_node)
  • containerd 1.7.21 (설치)
  • 쿠버네티스 1.24 (설치)

나중에 다시 볼라고 하기 때문에 그냥 코드만 냅다 올려둘게요

마스터 노드 구축

#!/bin/bash

echo '======== [4] Ubuntu 기본 설정 ========'

echo '======== [4-1] 패키지 업데이트 ========'
sudo apt-get update

echo '======== [4-2] 타임존 설정 ========'
sudo timedatectl set-timezone Asia/Seoul

echo '======== [4-3] [WARNING FileExisting-tc]: tc not found in system path 로그 관련 업데이트 ========'
sudo apt-get install -y iproute2

echo '======== [4-4] hosts 설정 =========='
cat << EOF | sudo tee -a /etc/hosts
192.168.56.30 k8s-master
EOF

echo '======== [5] kubeadm 설치 전 사전작업 ========'

echo '======== [5-1] 방화벽 해제 (우분투는 기본적으로 방화벽 비활성화되어 있음) ========'
sudo ufw disable

echo '======== [5-2] Swap 비활성화 ========'
sudo swapoff -a && sudo sed -i '/ swap / s/^/#/' /etc/fstab

echo '======== [6] 컨테이너 런타임 설치 ========'

echo '======== [6-1] iptable 세팅 ========'
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

echo '======== [6-2] 컨테이너 런타임 (containerd 설치) ========'
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 sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

echo '======== [7] kubeadm 설치 ========'

echo '======== [7-1] repo 설정 ========'
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.24/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.24/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update

echo '======== [7-2] kubelet, kubeadm, kubectl 패키지 설치 ========'
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

echo '======== [8] kubeadm으로 클러스터 생성 ========'

echo '======== [8-1] 클러스터 초기화 (Pod Network 세팅) ========'
sudo kubeadm init --pod-network-cidr=20.96.0.0/16 --apiserver-advertise-address=192.168.1.15

echo '======== [8-2] kubectl 사용 설정 ========'
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

echo '======== [8-2] kubectl 사용 설정2 ========'
sudo chown $(id -u):$(id -g) /etc/kubernetes/admin.conf
sudo chmod 644 /etc/kubernetes/admin.conf
export KUBECONFIG=/etc/kubernetes/admin.conf


echo '======== [8-3] Pod Network 설치 (calico) ========'
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico-custom.yaml

#위에꺼 안되면 이걸로
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml


echo '======== [8-4] Master에 Pod를 생성할 수 있도록 설정 ========'
kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane-

echo '======== [9] 쿠버네티스 편의 기능 설치 ========'

echo '======== [9-1] kubectl 자동 완성 기능 ========'
sudo apt-get install -y bash-completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
source ~/.bashrc

echo '======== [9-2] Dashboard 설치 ========'
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml

echo '======== [9-3] Metrics Server 설치 ========'
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yaml

워커 노드

echo '======== Ubuntu 기본 설정 ========'
sudo apt-get update
sudo timedatectl set-timezone Asia/Seoul
sudo ufw disable
sudo swapoff -a && sudo sed -i '/ swap / s/^/#/' /etc/fstab

echo '======== 컨테이너 런타임 설치 (containerd) ========'
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system
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 sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd


curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.27/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.27/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl


#클러스터 노드에 워커노드 추가
kubeadm join 마스터 노드 서버 ip:6443 --token <TOKEN> \
    --discovery-token-ca-cert-hash sha256:<HASH>
#kubeadm join 명령 생성
kubeadm token create --print-join-command 

토근 및 해시값 확인

# 기존 토큰 확인
kubeadm token list 

#해시값 확인
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
sha256sum | awk '{print $1}'

연결 확인 마스터 노드에서 확인

kubectl get nodes

설치 및 구축 확인 커맨드

노드 상태 확인

kubectl get nodes

파드 상태 확인

kubectl get pods -A

네트워크 플러그인 상태 확인

kubectl get pods -n kube-system

쿠버네티스 대쉬보드 확인

kubectl get svc -n kubernetes-dashboard

이렇게하면 마스터노드 한개 워커노드 한개 각서버 2개에서 만들어볼수 있다.

profile
Linux,Window,Network,docker,kubernets

0개의 댓글