sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#모든 노드에 다 해주세요!
systemctl start kubelet
systemctl enable kubelet
!! 마스터에서만 실행!!
kubeadm init <args>
위 명령어 실행전에 아래 명령어를 실행한 후 진행하세요.
그러면
etcd뭐 이런거 다 생성된다!!!
후에 토큰이 나오는데 이건 저장해놔야함!!
cat > token.txt
복사 붙여넣기 해준다!
kubectl get nodes
#kubectl 사용허가
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
저장 해 둔 토큰은 워커로 사용할 노드에 복사 붙여놓기 해주면 마스터에서 노드 확인이 가능하다!
cni?
컨테이너 간의 네트워킹을 제어할 수 있는 플러그인을 만들기위한 표준.
쿠버네티스에서 Pod간의 통신을 위해 CNI사용한다.
CNI는 calico, weavenet등 여러 플러그인이 있으니깐 그중 원하는 걸 사용하면 된다!
Integrating Kubernetes via the Addon
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
kubectl get nodes
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
이걸 해주면 원래 kubectl get nodes하면 not ready였는데 ready상태로 바뀐다!
그럼 마스터 노드 완료!
위엔 weavenet을 사용한거고 calico 사용하고 싶으면 아래 코드 사용하면 된다.
kubectl delete -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
sudo systemctl restart kubelet
그럼 이렇게 노드를 마스터에서 확인했을때 추가된걸 볼 수 있다!!
not ready인게 ready가 될때까지 기다리면 된다
kubectl get pod -all-namespaces
하면 컨테이너가 생성중이라서 아직 not ready인 거임!!
# bash-completion 패키지를 먼저 설치한 후, bash의 자동 완성을 현재 셸에 설정한다 자동 완성을 bash 셸에 영구적으로 추가한다
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
위 커멘드 해주면 리눅스에서 Tab키 누르면 자동완성 해주는것처럼 kubectl 명령어를 자동완성 해줌
kubectl을 kubeadm으로 바꿔서 root랑 사용자 계정 둘다 해줌
🚨 Trouble shooting
workernode가 계속 not ready상태이다
ping <API_SERVER_IP>
worker node에서 master node kubectl get nodes -o wide 했을때 나오는 internal ip주소로 ping하는거
다 했는데 잘되어 있음
그렇다면 kublet 재시작을 해보자
sudo systemctl restart kubelet