반응형

 

이전에 Ubuntu 20.04 에 Docker/Contained 로 Kubernetes 설치하는 글을 썼으나,

(이전 글 - 2023.08.21 - [Develop/k8s] - Ubuntu 20.04 kubernetes(k8s) 설치)

최근에 Mac M2 Arm 아키텍처에 Ubuntu 22.04에서 그대로 설치를 진행하니 kube-apiserver가 

계속 종료되는 현상이 발생했다. 아마 k8s 와 containerd 간의 cgroup 설정문제로 그런 것 같은데

이참에 cri-o 로 cgroup 설정도 해볼겸 다시 설치를 진행하였다.

 

 

기본적으로 root 계정으로 실행하며, 아래 5번까지는 Master노드와 Worker 노드에 똑같이 설정한다

1. 패키지 업데이트 또는 필요한 항목 설치

apt-get update
apt-get install -y software-properties-common curl

 

 

2. Kubernetes과 cri-o 다운 경로 설정

해당 설정은 직접 버전과 경로를 설정하면 필요 없다.

KUBERNETES_VERSION=v1.29
PROJECT_PATH=prerelease:/main

 

 

3. Kubernetes 와 cri-o Repository 설정

# kubernetes
curl -fsSL https://pkgs.k8s.io/core:/stable:/$KUBERNETES_VERSION/deb/Release.key |
    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:/$KUBERNETES_VERSION/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list
    
# cri-o 
curl -fsSL https://pkgs.k8s.io/addons:/cri-o:/$PROJECT_PATH/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg

echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://pkgs.k8s.io/addons:/cri-o:/$PROJECT_PATH/deb/ /" |
    tee /etc/apt/sources.list.d/cri-o.list

 

 

4. 패키지 설치

apt-get update
apt-get install -y cri-o kubelet kubeadm kubectl

 

설치하게되면 cri-o 가 동작중이 아니므로, 서비스 실행

systemctl start crio.service

 

 

5. 클러스터 동작을 위한 기본 구성

swapoff -a
modprobe br_netfilter
sysctl -w net.ipv4.ip_forward=1

 

 

6. kubernetes init (Master 노드만 진행한다)

kubeadm init

 

진행 후 완료 되면 나오는 메세지대로 config 파일을 생성한다.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

정상적으로 성공할 경우 아래 값 반환 해당값 메모장에 임시 저장

kubeadm join 192.x.x.x:6443 --token c5l89v.9ao1r5texepx06d8 \
	--discovery-token-ca-cert-hash sha256:50cb3eaxe334612e81c2342790130801afd70ddb9967a06bb0b202141748354f

 

 

7. Node 등록 (Worker 노드만 진행한다.)

6번에서 저장한 kubeadm join 입력

kubeadm join 192.x.x.x:6443 --token c5l89v.9ao1r5texepx06d8 \
	--discovery-token-ca-cert-hash sha256:50cb3eaxe334612e81c2342790130801afd70ddb9967a06bb0b202141748354f

 

 

8. Master에서 확인

Master에서 아래 명령어 실행

kubectl get nodes -o wide

 

Ready 로 잘 연결된 것을 확인

 

 

9. cilium 설치 (Master 노드만 진행한다)

# Arm 아키텍처여서 Arm으로 진행 github에 접속해서 알맞은 아키텍처로 설치 필요
curl -LO https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-arm64.tar.gz

 

설치 후 압축 해제 및 cilium install

sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
cilium install

 

cilium 설치 확인(설치되고 pod가 뜨는데 몇분걸림) 및 핵심 pod 정상 확인

 

 

 

v1.29가 아닌 v1.28이하로 설치할 경우 cri-o만 따로 설치 후 이전과 비슷한 방법으로 k8s를 설치해줘야 하는 것 같다.

참고 - https://github.com/cri-o/cri-o/blob/main/install.md#installation-instructions

cri-o v1.29 이상 설치 - https://github.com/cri-o/packaging/blob/main/README.md

cri-o v1.28 이하 설치 - https://github.com/cri-o/cri-o/blob/main/install-legacy.md

cilium - https://kubernetes.io/ko/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy/

반응형
반응형

 

Version

- Ubuntu 20.04

- Docker 24.0.5

- kubernetes 1.28.0

 

※ Master 1대 Woker 2대

 

1. 전부 root 계정으로 시작한다.

sudo -i

 

2. 모든 서버 Hostname 변경

변경 안 할 시 node 등록할 때 에러 발생

# Master server 1
hostnamectl set-hostname Master

# Worker server 1
hostnamectl set-hostname Node1

# Worker server 2
hostnamectl set-hostname Node2

 

3. Docker 설치 (Master, Woker 전부 진행)

apt-get update
apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
 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
apt-get update
# 도커까지 설치
apt-get install docker-ce docker-ce-cli containerd.io

# containerd만 설치할경우
apt-get install containerd.io

모든 서버에 설치 후 Docker Version 확인

 docker version

 

4. Kubernetes (k8s) 설치 (Master, Worker 전부 실행)

swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab

 

iptable 설정

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
sysctl --system

 

kubectl, kubeadm, kubelet 설치

(2024.03.12 기준 https://kubernetes.io/blog/2023/08/15/pkgs-k8s-io-introduction/#how-to-migrate 해당URL을 보고 curl 과 deb 설정한다)

apt-get update
apt-get install -y apt-transport-https ca-certificates curl

 

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg| gpg -o /usr/share/keyrings/kubernetes-archive-keyring.gpg --dearmor
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-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
systemctl daemon-reload
systemctl restart kubelet

 

5. kubeadm init (Master에만 진행)

kubeadm init 실행시 아래 에러 발생

unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService" 

참고 : https://kubernetes.io/docs/setup/production-environment/container-runtimes/

(Configuring the systemd cgroup driver의 Note 부분 참고)

해당 작업만 모든 서버(Master, Worker에서 진행)

# 해당작업만 모든 서버(Master, Worker)에서 진행
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
systemctl restart containerd

작업 후 아래 명령어 진행

kubeadm init

정상적으로 성공할 경우 아래 값 반환 해당값 메모장에 임시 저장

kubeadm join 192.x.x.x:6443 --token c5l89v.9ao1r5texepx06d8 \
	--discovery-token-ca-cert-hash sha256:50cb3eaxe334612e81c2342790130801afd70ddb9967a06bb0b202141748354f

모든 User를 위해 명령어 등록

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

 

6. Pod Network 설치 (Master에서만 진행)

https://cloud.weave.works 서버가 이상하므로 github에서 다운받는다. 현재 작성일 기준 2.8.1이 최신

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

 

7. Node 등록 (Woker에서만 진행)

5번에서 저장한 kubeadm join 입력

kubeadm join 192.x.x.x:6443 --token c5l89v.9ao1r5texepx06d8 \
	--discovery-token-ca-cert-hash sha256:50cb3eaxe334612e81c2342790130801afd70ddb9967a06bb0b202141748354f

 

8. Master에서 확인

Master에서 아래 명령어 실행

kubectl get nodes -o wide

해당 가이드대로 진행하였으면 아래 사진에서 ubuntu -> master로 나와야함

 

 

반응형

+ Recent posts