VM 사전 준비
호스트 네임 변경
sudo -i
sudo hostnamectl set-hostname k8s-master
sudo -i
swap 해제
swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
방화벽 해제
sudo ufw disable
필요 패키지 설치
sudo apt-get update -y
sudo apt-get install -y curl ethtool ebtables socat conntrack
iptables 설정
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
Docker 설치
sudo apt-get -y update
sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
Docker의 공식 GPG키 추가
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 -y update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
cgroup 설정
sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
도커 실행 및 확인
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status docker
Kubernetes 설치
apt패키지 인덱스를 업데이트하고 Kubernetes apt저장소를 사용하는 데 필요한 패키지를 설치
sudo apt-get -y update
sudo apt-get install -y apt-transport-https ca-certificates curl
Google Cloud 공개 서명 키 다운로드
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg \
https://packages.cloud.google.com/apt/doc/apt-key.gpg
K8S 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
apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정
sudo apt-get -y update
sudo apt-get install kubeadm=1.22.11-00 kubelet=1.22.11-00 kubectl=1.22.11-00
sudo apt-mark hold kubelet kubeadm kubectl
systemctl enable --now kubelet
kubeadm 초기화
kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=<Master IP>
<마스터 노드만 설정> 사용자에 대해 kubectl 작동하도록 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
<마스터 노드만 설정> Calico 네트워크 플러그인 설치
kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
kubectl create -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml
***POD network 변경시 wget 명령어로 https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml
custom-resources.yaml 파일을 다운받고 IP 수정을 해준 뒤 로컬의 파일을 kubectl create -f 명령어로 실행 해 줘어야 한다. 디폴트는 192.168.0.0/16
<마스터 노드만 설정> Calico pod 확인
watch kubectl get pods -n calico-system
<마스터 노드만 설정> Kubectl 자동완성 적용
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source /etc/bash_completion
alias k=kubectl
complete -F __start_kubectl k
<마스터 노드만 설정> master node에도 pod 를 생성 할 수 있도록 설정
kubectl taint nodes --all node-role.kubernetes.io/master-
<워커 노드 설정>
sudo kubeadm join 10.20.1.6:6443 --token ixujii.6720hcftvfzfu6iz --discovery-token-ca-cert-hash sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
노드 확인
kubectl get nodes