DIY! k8s 1.26 설치하기
May 01, 2023 교육 v1.1쿠버네티스 1.26 버전의 설치방법을 안내합니다. 우분투 20.04 에서 테스트 되었습니다.
환경 정보
Ubuntu 20.04
- 맥 M1, 패러럴즈 환경에서 vagrant 로 구성
- Vagrantfile 참고
OS 정보 확인
## CPU architecture - amd64|arm64
dpkg --print-architecture
arm64
## Ubuntu code name - xenial|focal
lsb_release -cs
focal
Pre-requisite
시스템 설정
bridge 모듈/설정 확인
## br_netfilter 모듈 로드 여부 확인
lsmod | grep br_netfilter
*(없음)*
## net.bridge.bridge-nf-call-iptables = 1 확인
sysctl -a | grep net.bridge.bridge-nf-call-iptables
*(없음)*
IPV4를 포워딩하여 iptables가 bridge된 트래픽 보기 설정
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
확인
# sysctl -a | grep -E "bridge-nf-call-ip|ip_forward "
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
# lsmod | grep br_netfilter
br_netfilter 28672 0
bridge 233472 1 br_netfilter
swapoff 설정
sudo swapoff -a
sudo sed -i.bak '/swap/d' /etc/fstab
-i
, in-place : 파일에서 직접 수정. 뒤에 확장자를 주면 원본파일명.{확장자} 백업파일을 만들어줌 (참고)-i
옵션을 주지 않으면 화면 출력
runC
릴리즈 : https://github.com/opencontainers/runc/releases
ARCH=$(dpkg --print-architecture)
wget https://github.com/opencontainers/runc/releases/download/v1.1.7/runc.$ARCH
sudo install -m 755 runc.$ARCH /usr/local/sbin/runc
## 설치 확인
sudo which runc; sudo runc -v
containerd
릴리즈: https://github.com/containerd/containerd/releases
호환 정보 : https://containerd.io/releases/#kubernetes-support
ARCH=$(dpkg --print-architecture)
CONTAINERD_VERSION="1.6.20"
CONTAINERD_TAR="containerd-${CONTAINERD_VERSION}-linux-${ARCH}.tar.gz"
wget https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/${CONTAINERD_TAR}
sudo tar Cxzvf /usr/local ${CONTAINERD_TAR}
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
sudo mv containerd.service /usr/lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now containerd
sudo systemctl status containerd
sudo mkdir -p /etc/containerd/
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
CNI
릴리즈: https://github.com/containernetworking/plugins/releases
ARCH=$(dpkg --print-architecture)
CNI_VERSION="1.2.0"
CNI_TAR="cni-plugins-linux-${ARCH}-v${CNI_VERSION}.tgz"
sudo mkdir -p /opt/cni/bin/
sudo wget https://github.com/containernetworking/plugins/releases/download/v${CNI_VERSION}/${CNI_TAR}
sudo tar Cxzvf /opt/cni/bin ${CNI_TAR}
kubernetes
https, certificate, curl 설치
## apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
K8s 리포지토리 apt 등록
## 사이닝키 다운로드
sudo curl https://packages.cloud.google.com/apt/doc/apt-key.gpg \
| sudo apt-key --keyring /usr/share/keyrings/kubernetes-archive-keyring.gpg add -
## 리포 추가
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 색인 update
sudo apt-get update
K8s 버전확인
# apt-cache madison kubeadm
kubeadm | 1.27.1-00 | https://apt.kubernetes.io kubernetes-xenial/main arm64 Packages
kubeadm | 1.27.0-00 | https://apt.kubernetes.io kubernetes-xenial/main arm64 Packages
kubeadm | 1.26.4-00 | https://apt.kubernetes.io kubernetes-xenial/main arm64 Packages
..
설치
K8S_VERSION="1.26.4-00"
sudo apt-get -y install kubelet=${K8S_VERSION} \
kubeadm=${K8S_VERSION} \
kubectl=${K8S_VERSION}
sudo apt-mark hold kubelet kubeadm kubectl
kubelet 설정
#### ip of this box for kubelet
IP_ADDR=`ip addr show eth1 | grep /24 | awk '{print $2}'`
#### set node-ip to kubelet
echo "KUBELET_EXTRA_ARGS=--node-ip=\"$IP_ADDR\"" | tee /etc/default/kubelet
systemctl restart kubelet
kubeadm init
sudo kubeadm init \
--apiserver-advertise-address=192.168.100.2 \
--apiserver-cert-extra-sans=192.168.100.2 \
--pod-network-cidr=10.224.0.0/16 \
--service-cidr=10.225.0.0/16 \
--node-name=ubuntu2004
kubectl setup
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
flannel
## flannel YAML 다운로드
wget -O kube-flannel.yml https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
## POD IP 대역 수정
sed -i.bak 's/10.244.0.0/10.224.0.0/g' kube-flannel.yml
## indent 8칸
sed -i.bak '/- --kube-subnet-mgr/a \ \ \ \ \ \ \ \ - --iface=eth1' kube-flannel.yml
## 적용
kubectl create -f kube-flannel.yml
마치며
이상, Ubuntu 20.04 환경에서 쿠버네티스 1.26 설치 핸즈온을 설명드렸습니다.
1.23+ 에서 도커를 사용하지 않게 되면서 runc, containerd, cni 등 직접 설치하는 부분과 추가적인 환경 설정이 더 많아 졌는데요.
매번 필요할 때마다 설치하기 번거로운니 vagrant 로 한방에 설치할 수 있도록 Vagrantfile을 작성해두었습니다.
- m1 (arm), parallels 환경에서 작성되었습니다
- x86, virtualbox 환경의 경우는 약간의 수정이 필요합니다