
MAC OS에서 UTM을 통해 Rocky Linux OS 위에 VM을 만들고 내부 IP를 할당하여 원격 접속을 진행한다.
[root@k8s-master ~]# cat /etc/*-release

[root@k8s-master ~]# hostname

[root@k8s-master ~]# ip addr

[root@k8s-master ~]# lscpu
[root@k8s-master ~]# free -h


[root@k8s-master ~]# timedatectl

[root@k8s-master ~]# systemctl status firewalld

[root@k8s-master ~]# free
[root@k8s-master ~]# cat /etc/fstab | grep swap

# 설정 세팅 확인
[root@k8s-master ~]# cat /etc/modules-load.d/k8s.conf
[root@k8s-master ~]# cat /etc/sysctl.d/k8s.conf
# 모듈 적제 확인
[root@k8s-master ~]# lsmod | grep overlay
[root@k8s-master ~]# lsmod | grep br_netfilter

[Kubernetes Docs] : https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/#containerd
[Containerd Release] : https://github.com/containerd/containerd/blob/main/RELEASES.md#kubernetes-support
[root@k8s-master ~]# yum repolist enabled

[root@k8s-master ~]# systemctl status containerd

[Docker Docs] : https://docs.docker.com/engine/install/centos/#install-using-the-repository
설치 가능한 버전의 containerd.io 리스트 확인
[root@k8s-master ~]# yum list containerd.io --showduplicates | sort -r

Kublet의 Cgroup의 default가 cgroupfs 입니다. 하지만 레드헷 계열 리눅스(Rocky linux)의 경우 systemd를 메인으로 프로세스를 실행시키는 시스템이기 때문에, 쿠버네티스 설치 시 default로 systemd가 세팅됩니다. 따라서 컨테이너 런타임의 cgroup 드라이버와 동일해야 하기때문에 containerd도 systemd로 변경하여 쓰는 게 Core 사용에 부담이 없다.
[root@k8s-master ~]# cat /etc/containerd/config.toml

SystemdCgroup을 true로 설정해주어야 한다. false일 경우 cgroupfs를 쓴다.
[root@k8s-master ~]# cat /etc/containerd/config.toml

[root@k8s-master ~]# cat /var/lib/kubelet/config.yaml

[root@k8s-master ~]# yum repolist enabled

[root@k8s-master ~]# cat /etc/selinux/config
[root@k8s-master ~]# sestatus


#버전 보기
[root@k8s-master ~]# kubeadm version
[root@k8s-master ~]# kubectl version
#상태 보기
[root@k8s-master ~]# systemctl status kubelet
#설정 파일 위치
[root@k8s-master ~]# cat /var/lib/kubelet/config.yaml
#로그 조회
journalctl -u kubelet | tail -10

kubeadm init --pod-network-cidr=20.96.0.0/16 --apiserver-advertise-address 192.168.56.30
# master node 상태확인
[root@k8s-master ~]# kubectl get node
# pod network cidr 설정 확인
[root@k8s-master ~]# kubectl cluster-info dump | grep -m 1 cluster-cidr
# apiserver advertise address 적용 확인
[root@k8s-master ~]# kubectl cluster-info
# kubernetes component pod 확인
[root@k8s-master ~]# kubectl get pods -n kube-system

- 마스터 노드 1개만 있고, 정상적으로 클러스터 구성이 완료 상태인 걸 알 수 있어요. 만약 Pod 네트워크가 없는 상태라면 노드의 상태는 NotReady 상태일 거예요. 'control-plane'은 마스터 노드 역할을 의미해요. 그리고 노드가 클러스터에 포함된 시간은 161분이네요. v1.27.2는 쿠버네티스의 버전입니다.
- 'cluster-cidr'은 Pod 네트워크에 할당된 IP 주소의 범위예요. 이 CIDR 블록은 각 pod에게 IP를 분배하는 풀(pool)이고 20.96.0.0/16은 약 6만 개 이상의 Pod IP를 할당할 수 있는 대역이에요. CNI 플러그인이 이 범위를 기반으로 네트워크를 구성하고 Pod에 IP를 자동으로 부여합니다.
- 'kubenetes control plane is running at https://192.168.56.30:6443' 이 주소는 클러스터의 API 주소예요. 모든 kubectl 명령어는 이 API 서버에 REST API를 날려서 작동해요. 즉 쿠버네티스의 두뇌가 여기서 작동 중이라는 뜻!
- 'CoreDNS is running at https://.../services/kube-dns:dns/proxy' CoreDNS는 쿠버네티스 내부의 DNS 역할을 해요.
- 추가로... 6443 포트를 쓰는 이유는 쿠버네티스 API 서버의 기본 HTTPS 포트(보안 통신), Pod IP는 클러스터를 초기화할 때 설정한 'cluster-cidr'에 따라 CNI 플러그인이 Pod 생성 시 자동으로 설정, CoreDNS가 있어야 Pod 간에 서비스 이름 기반 통신이 가능해요!
[root@k8s-master ~]# cat ~/.kube/config

# Calico Pod 상태 확인
[root@k8s-master ~]# kubectl get -n calico-system pod
[root@k8s-master ~]# kubectl get -n calico-apiserver pod
# Calico에 pod network cidr 적용 확인
[root@k8s-master ~]# kubectl get installations.operator.tigera.io default -o yaml | grep cidr


kubectl get pod -n kubernetes-dashboard


Mac에서 대시보드에 접속하기 위해서 대시보드용 관리자 계정을 만들고 Bearer token(Kubernetes 클러스터에서 대시보드에 로그인할 수 있는 사용자 권한을 가진 인증 토큰)을 발급받아 로그인 했다.
토큰 확인: kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
https://192.168.56.30:30000/#/login
- chrome 접속 시 거부 화면에서 아무데나 클릭하고 thisisunsafe로 인증하면 우회된다.