실리콘 맥 환경에서 가상머신 생성하기 포스트에 이어지는 글입니다.
$ hostnamectl set-hostname “k8s-master” && exec bash
$ cat << EOF >> /etc/hosts
192.168.64.30 k8s-master
EOF
# 현재 활성화된 모든 스왑 공간 비활성화
$ swapoff -a
# 재부팅시 스왑 활성화 X
$ sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
$ setenforce 0
$ sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
현재 쿠버네티스를 설치하고 있는 가상머신은 마스터 노드(컨트롤 플레인)이므로 쿠버네티스 문서를 참고해 방화벽을 설정합니다.
# 방화벽에 포트 추가 (--permanent 옵션을 통해 재부팅 시에도 유지)
$ firewall-cmd --permanent --add-port={6443,2379,2380,10250,10259,10257}/tcp
# 방화벽 설정 다시 읽기
$ firewall-cmd --reload
# 방화벽 전체 리스팅
$ firwall-cmd --list-all
방화벽 리스팅을 통해서 포트가 아래처럼 제대로 등록되었다면, 성공입니다 😀
$ tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
$ modprobe overlay
$ modprobe br_netfilter
$ cat <<EOF |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
# 커널 매개변수 적용
$ sysctl --system
아래와 같이 커널 매개변수(net.bridge.bridge-nf-call-iptables, net.bridge.bridge-nf-call-ip6tables, net.ipv4.ip_forward)가 표시된다면, 성공입니다!
# repo 설정
$ yum install -y yum-utils
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# containerd 설치
$ yum install -y containerd.io-1.6.21-3.1.el9.aarch64
$ containerd config default > /etc/containerd/config.toml
$ sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
$ systemctl restart containerd
$ systemctl daemon-reload
$ systemctl enable --now containerd
$ sed -i 's/^disabled_plugins/#disabled_plugins/' /etc/containerd/config.toml
$ systemctl restart containerd
$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
yum install -y kubelet-1.27.2-150500.1.1.aarch64 kubeadm-1.27.2-150500.1.1.aarch64 kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes
systemctl enable --now kubelet
kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address 192.168.64.30
# 홈 디렉터리에 kube 디렉터리 생성(이미 있는 경우 -p 옵션으로 에러 발생하지 않음)
$ mkdir -p $HOME/.kube
# Kubernetes 클러스터의 관리자 구성 파일인 admin.conf을
# 사용자의 홈 디렉터리에 있는 .kube/config로 복사
# 덮어쓰기가 필요한 경우 사용자에게 물어봄[-i(--interactive) 옵션]
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 새로 생성, 복사된 config 파일 소유자를 현재 사용자와 사용자의 그룹으로 변경
$ chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.25.1/calico.yaml
$ kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.25.1/calico-custom.yaml
$ kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane-
# kubectl 명령어에 대한 자동완성 기능 활성화
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
# k 관련 키워드에 kubectl 추가
$ echo 'alias k=kubectl' >>~/.bashrc
# k 누르고 탭치면 kubectl 자동완성 제안!
$ echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
# 변경 사항 현재 세션에 적용
$ source ~/.bashrc
$ kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml
$ kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yaml
'https://192.168.64.30:30000/#/login'을 주소창에 입력하고 접속하면 아래와 같이 나오는데, 좌측 하단에 고급을 누르고 '안전하지 않음으로 이동'을 클릭합니다.
아래 화면에서 생략을 누릅니다.
좌측 상단의 default를 '모든 네임스페이스'로 바꿔줍니다.
대시보드 구경하기!
이렇게 험난한 과정이 끝났습니다 🎉🎉🎉🎉🎉
강의를 수강하며, 이제껏 구성했던 실습 환경중에 가장 복잡했습니다..😂
쿠버네티스 클러스터 통신 설정까지는 할 만하다 생각했는데, 파드 네트워크 설치부터 쿠버네티스 대시보드 설치, 메트릭스 서버 설치 까지는 강사님이 커스텀 yaml 파일을 제공하지 않았으면 한참 헤맸을 것 같다는 생각이 들구용😢
명령어를 단순히 복사해서 붙여넣는 과정에서 끝나는 것이 아니라 이해하려고 하다보니(강조되고 반복되는 복붙은 저를 답답하게 만듭니다) 지난번 포스트에서 이번 포스트를 작성하기까지 시간이 생각보다 오래 흘렀어요...ㅎㅎ
시작이 반이라고 하잖아요? 이제 반 했으니까 나머지 반 하러 가보겠습니다!