Ubuntu 22.04 쿠버네티스 설치하기

ran·2023년 9월 24일
1

Kubernetes

목록 보기
1/1
post-thumbnail

이글을 적는 이유는 적어도 현시점(23.09.24) 기준으로 아래의 방식대로 해야 제대로 설치가 된다.
내가 진짜 별의 별 블로그랑 문서를 뒤져보면서 설치하는데, 4일이나 애를 먹었다... 그 이유는 예전 글 + 키 변경 등등 다양한 이유로 인해 설치시 에러가 났다.
아래의 방식은 언제든지 시간이 지나면 바뀌어서 안될 수 있다. 그럴땐 과감히 다른 글을 찾아보는걸 추천한다.

1. 저장소 설정

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

2. 도커 엔진 설치

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

3. Kubernetes 설치

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

4. kubelet, kubeadm, kubectl 설치 (master, node)

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

5. Control-plane 구성(only master)

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

6. pod network 애드온 설치(only master)

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

7. Worker node 구성(only worker)

1) 5-2)의 토큰 붙혀넣기

워커 노드 설정시 join시 아래와 같은 에러 나면
워커 노드 조인 시 [ERROR CRI]: container runtime is not running 에러가 발생하는 경우

/etc/containerd/config.toml 파일에서 
disabled_plugins 항목에서 CRI 제거한 뒤 혹은 주석처리 한 뒤

sudo systemctl restart containerd

조인 성공

8. Master에서 노드 확인

1) 노드 연결 확인

kubectl get nodes -o wide //또는 kubectl get nodes

2) kubectl 명령어를 tab하여 자동완성 설정

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
profile
Backend Developer

2개의 댓글

comment-user-thumbnail
2023년 10월 4일

좋은글 잘 봤습니다. 혹시 제 블로그에 글 내용 퍼가도 될까요?
출처는 확실히 남기도록 하겠습니다~

1개의 답글