이글을 적는 이유는 적어도 현시점(23.09.24) 기준으로 아래의 방식대로 해야 제대로 설치가 된다.
내가 진짜 별의 별 블로그랑 문서를 뒤져보면서 설치하는데, 4일이나 애를 먹었다... 그 이유는 예전 글 + 키 변경 등등 다양한 이유로 인해 설치시 에러가 났다.
아래의 방식은 언제든지 시간이 지나면 바뀌어서 안될 수 있다. 그럴땐 과감히 다른 글을 찾아보는걸 추천한다.
1) apt 업데이트
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
2) 도커 공식 GPG key 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
3) Stable repository 설정
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 > /dev/null
1) 최신버전 Docker Engine 및 containerd 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
2) Version 확인
sudo docker version
3) Docker 서비스 등록 실행
sudo systemctl enable docker
sudo systemctl start docker
1) 메모리 스왑
sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
2) 노드간 통신을 위한 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
3) 방화벽 비활성
sudo ufw disable
1) apt 업데이트 및 ca 관련 패키지 다운로드 및 설정
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) 쿠버네티스 gpg 및 소스 리스트 내용 추가 및 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) kubelet, kubeadm, kubectl 설치를 순차적으로 진행
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
만약
Err:2 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B53DC80D13EDEF05
이런 에러 나면 아래 코드
쿠버네티스 gpg 추가 중 apt-update 시 에러 발생하면
쿠버네티스 GPG key 추가
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg
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
sudo apt-get update -y
systemd 와 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
5) 쿠버네티스 서비스 등록 및 재시작 수행
sudo systemctl daemon-reload
sudo systemctl restart kubelet
1) kubeadm 을 통한 네트워크 설정 잡기
kubeadm init
2) 아래와 같은 토큰 발행시 복사
kubeadm join 192.168.64.7:6443 —token zlocdd.n68oikprsd1rk9uf \
—discovery-token-ca-cert-hash sha256:27c61fd7f4988e805a12c5647434eded2c1fa3da18fd8bcb96fb2157527a8bc0
3) 모든 사용자 kube 명령어 사용
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
+) kubeadm init시
container is not runtime runnig unknown service runtime.v1.RuntimeService error
위와 같은 에러가 발생한다면
Ubuntu 20.04 / containerd.io 1.3.7 이상에서 발생하는 문제로 아래의 코드를 실행하자.
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
sudo kubeadm init
+) 6443 에러시
containerd config default | tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
service containerd restart
service kubelet restart
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
1) 5-2)의 토큰 붙혀넣기
워커 노드 설정시 join시 아래와 같은 에러 나면
워커 노드 조인 시 [ERROR CRI]: container runtime is not running 에러가 발생하는 경우
/etc/containerd/config.toml 파일에서
disabled_plugins 항목에서 CRI 제거한 뒤 혹은 주석처리 한 뒤
sudo systemctl restart containerd
조인 성공
1) 노드 연결 확인
kubectl get nodes -o wide //또는 kubectl get nodes
2) kubectl 명령어를 tab하여 자동완성 설정
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
좋은글 잘 봤습니다. 혹시 제 블로그에 글 내용 퍼가도 될까요?
출처는 확실히 남기도록 하겠습니다~