●-기본 구축 마스터노드1, 워커노드1
최소사양 cpu 2 GB RAM
코어 2
Centos 7
-선수조건
● k8s 가 설치 되는 경우 cri (container runtime interfece) 는 contaierd 와 호환 되므로 모든 노드에 container runtime 은 containerd.service 설치
● 마스터 노드에서 워커 노드간의 통신 혹은 vm 환경에서의 콘트롤노드에서 워커노드에 ip 를 통해 명령을 10250 포트를 통해 명령을 지시하기 위해서는 포트포워딩이 필요하다.
# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
# Apply sysctl params without reboot
sudo sysctl --system
Verify that net.ipv4.ip_forward is set to 1 with:
sysctl net.ipv4.ip_forward
모든 노드에 적용해야한다. 마스터노드는 워커노드에 명령을 내리고 워커노드는 그 명령을 수신해야하기 때문이다.
● containerd runtime 설치
tar Cxzvf /usr/local containerd-1.7.16-linux-amd64.tar.gz
●containerd 의 cgroup 을 systemd 로 설정해준다.
리눅싀 systemd 를 통해서 control group 이 containerd를 관리하게 하므로서 리소스충돌을 방지한다. containerd 또한 로컬의 파일시스템이 마운트된다.
https://raw.githubusercontent.com/containerd/containerd/main/containerd.service 여기 있는 내용을 복사한다.
vi containerd.service 에 붙여 넣기
mkdir -p /usr/local/lib/systemd/system
cp containerd.service /usr/local/lib/systemd/system
● runc 설치
runc는 OCI(Open Container Initiative)에서 정의된 컨테이너 실행을 위한 표준 스펙에 따라 컨테이너를 실행하는 도구
wget https://github.com/opencontainers/runc/releases/download/v1.2.0-rc.1/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin/runc
●CNI 플러그인 설치
주로 워커노드에 설치되며, 클러스터 내부에 컨테이너들이 네트워크를 통해 통신을 가능하게 한다.
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.4.1.tgz
● /etc/containerd/config.toml 생성해서 붙여 넣기 하면 된다. 원래 cgroup 를 systemd 에 등록하여 줄려고 하였으나 이제는 알아서 systmed 에 등록 되는 듯,
-sandbox 관련 내용은 pod 를 관리하게 위해 필요하다. 볼륨을 마운트 파드에 네트워크 ip 를 부여한다든지
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.k8s.io/pause:3.2"
붙여넣기만 하면된다. 설치 할 때 보니까 3.8 버전 까지 나온거 같다. 알아서 업로드 해주는 거 같다.
systemctl restart containerd
- 재시작해서 구동 되는지 확인
1. 스왑메모리 비활성화기,
swapoff -a, vi /etc/fstab 에 들어가 swapon 주석처리, sed -i '2s/^/#/' /etc/fstab
2. 모든 vm 에 kubeadm, kubectl, kubelet 설치
MAC 주소와 UUID 는 각 인스턴스마다 고유하여야 한다.
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
Installing kubeadm
This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you have performed this installation process, see the Creating a cluster with kubeadm page. This installation guide is for Kubernetes v1.30. If
kubernetes.io
3. 레드햇 설치 기준을 따랐다. kubeadm 버전은 1.30에 맞춰 줬다. vm 중 하나가 버전 차이가 나면 1버전 이상 같기도하고 분면 그 이하 버전차이였는데 마스터노드에 워커노드가 조인이 안됐다. 그래서 동일 버전으로 모두 통일 후 설치
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
Installing kubeadm
This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you have performed this installation process, see the Creating a cluster with kubeadm page. This installation guide is for Kubernetes v1.30. If
kubernetes.io
4. 클러스터 생성,
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.99.102
파드의 ip 와 마스터 노드의 ip 는 겹쳐서 안된다.
생성 후 ,
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
쿠버네티스 api 에 접근하기 위한 관리자 설정파일을 해당 노드에서 저장한다.
5. 파드의 네트워크 add-on 사용하기 위해 flannel yaml 적용 처음에 pod-cidr 을 지정하지 않았다면 이 add-on 을 설치해도 오류만 난다. 미리 pod cidr 는 지정해야 하며 이걸 설치해야 pod coredns 기능도 활성화된다. flannel, clico 등이 있는 듯
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
6. 워커노드 조인
kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>
7. 결과
nginx-ingress controller 와 베어메탈ip 로 ingress 생성해 보기 (0) | 2024.04.29 |
---|---|
다중 마스터노드 구성 - 로드밸런서를 이용해 구현 하기 (0) | 2024.04.29 |
익스터널 etcd 구성 (0) | 2024.04.29 |