환경
나중에 다시 볼라고 하기 때문에 그냥 코드만 냅다 올려둘게요
#!/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개에서 만들어볼수 있다.