-
Mac M2 UTM k8s 로컬 환경 구성k8s 2023. 11. 23. 18:25
UTM에 Ubuntu 설치하는 내용은 없습니다. 구글링하시면 많이 나와요
UTM의 Ubuntu 20.04로 로컬 환경을 구축하였다.
마스터 노드 이외의 세팅은 모든 노드에 적용되어야 한다.
총 세개의 노드로 구성하였다.
Master
worker1
worker2- swap memory off
https://askubuntu.com/questions/214805/how-do-i-disable-swap
모든 노드에서 진행한다
sudo swapoff -a # 현재 시스템에 적용(리부팅하면 재설정 필요) sudo sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab # 리부팅 필수
위와 같이 swap 메모리를 off 해주고 kubernetes 설치를 진행한다.
컨테이너 런타임 구성
# Using Docker Repository sudo apt update sudo apt install -y 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 # containerd 설치 sudo apt update sudo apt install -y containerd.io # sudo systemctl status containerd # Ctrl + C를 눌러서 나간다. # Containerd configuration for Kubernetes cat <<EOF | sudo tee -a /etc/containerd/config.toml [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true EOF sudo sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml sudo systemctl restart containerd # 소켓이 있는지 확인한다. ls /var/run/containerd/containerd.sock
kubeadm, kubelet 및 kubectl 설치
모든 머신에 다음 패키지들을 설치한다.
- kubeadm: 클러스터를 부트스트랩하는 명령이다. 클러스터를 초기화하고 관리하는 기능을 갖는다.
- kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트이다. 데몬으로 동작하며 컨테이너를 관리한다.
- kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티이다. 클라이언트 전용 프로그램이다.
모든 노드에서 다음 명령을 실행한다.
sudo mkdir /etc/apt/keyrings cat < kube_install.sh # 1. apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다. sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl # 2. 구글 클라우드의 공개 사이닝 키를 다운로드 한다. curl -fsSL <https://packages.cloud.google.com/apt/doc/apt-key.gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg # 3. 쿠버네티스 apt 리포지터리를 추가한다. echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] <https://apt.kubernetes.io/> kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list # 4. apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다. sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl EOF sudo bash kube_install.sh
kubeadm 버전을 확인한다.
kubeadm version
넷필터 브릿지 설정
모든 노드에 다음 명령으로 넷필터 브릿지 설정
sudo -i modprobe br_netfilter echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables exit
클러스터 구성
지금까지는 모든 노드에 실행되는 작업이 동일했다. 하지만 여기부터는 각 노드에서 작업하는 내용이 다르기 때문에 주의가 필요하다.
마스터 노드 초기화
마스터 노드에서 init 작업을 시작한다.
sudo kubeadm init
본인은 sudo kubeadm init 명령시 해당 에러가 발생하였다.
[preflight] Running pre-flight checks error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR IsPrivilegedUser]: user is not running as root [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` To see the stack trace of this error execute with --v=5 or higher
해결
sudo rm /etc/containerd/config.toml sudo systemctl restart containerd sudo rm /etc/containerd/config.toml sudo apt update (이 명령어는 빠져도 될 것 같다. 기억이 안남) sudo apt install -y containerd.io
sudo kubeadm init 명령어 입력 후 성공
Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: <https://kubernetes.io/docs/concepts/cluster-administration/addons/> Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.64.10:6443 --token rh9fia.l2nm5bv9ar37vmlk \\ --discovery-token-ca-cert-hash sha256:1fbf915d51e2702001ec197b5927ed6ce9776dd90462c4068451083109b6ed80
유저 설정
다음 명령을 실행하면 .kube/config 파일이 설정되면서 사용이 가능해진다. 이 실습은 마스터 노드에서만 진행한다.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
인증 정보를 사용해 노드 목록을 확인한다.
$ kubectl get nodes NAME STATUS ROLES AGE VERSION master-1 NotReady control-plane 5m v1.26.0
워커 노드 조인하기
본인의 콘솔에 출력된 토큰과 hash 값을 사용해 조인을 수행해야 한다. 다음 명령은 워커 노드에서 실습을 진행한다.
kubeadm join 192.168.64.10:6443 --token rh9fia.l2nm5bv9ar37vmlk \\ --discovery-token-ca-cert-hash sha256:1fbf915d51e2702001ec197b5927ed6ce9776dd90462c4068451083109b6ed80
마스터 노드에서 노드 목록을 조회한다.
$ kubectl get nodes NAME STATUS ROLES AGE VERSION master-1 NotReady control-plane 7m55s v1.26.0 worker-1 NotReady <none> 14s v1.26.0 worker-2 NotReady <none> 23s v1.26.0
💡 init이나 join을 잘못 수행한 경우 sudo kubeadm reset을 사용해 초기 설정으로 돌아갈 수 있다.
💡 token 재발급 받는 방법 (마스터 노드에서 실습)
- 토큰 리스트 확인하기: sudo kubeadm token list
- 토큰 재발급하기: sudo kubeadm token create --print-join-command
파드 네트워크 배포
마스터 노드에서 다음 명령을 실행하면 앞서 구성한 유저 설정을 통해 클러스터에 cilium을 설치한다.
https://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy/
!!!!!이거아님!!!!! curl -LO <https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz> sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin rm cilium-linux-amd64.tar.gz cilium install
해당 명령어를 입력하니
ubuntu@master-1:~$ cilium install bash: /usr/local/bin/cilium: cannot execute binary file: Exec format error
실행 중인 바이너리 파일이 시스템과 호환되지 않는 경우 발생하는 일반적인 에러 메시지가 발생했다.
해결
uname -m (시스템 아키텍처를 터미널에 출력) lsb_release -a(시스템 운영 체제 정보를 출력)
내 아키텍처는 aarch64 였다..
sudo curl -LO <https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-arm64.tar.gz> sudo tar xzvfC cilium-linux-arm64.tar.gz /usr/local/bin sudo rm cilium-linux-arm64.tar.gz cilium install
해당 명령어로 수정해서 install 하니 성공
VM Restart 이후 필수 실행 명령어
sudo -i # swapoff sudo swapoff -a sudo sed -i '/ swap / s/^\\(.*\\)$/#\\1/g' /etc/fstab # netfilter bridge configure modprobe br_netfilter echo 1 > /proc/sys/net/ipv4/ip_forward echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables exit
'k8s' 카테고리의 다른 글
tfcloud 를 통한 EKS Terraform 설정 (0) 2023.12.20 로컬 서버에 Longhorn구축 (1) 2023.12.07 쿠버네티스 기초용어 (1) 2023.12.06 Kubernetes 대시보드 설치 및 연결 (2) 2023.12.05 mac m2 Vagrant 와 Parallels Pro를 이용해 로컬구성하기 (2) 2023.11.24 - swap memory off