sudo apt update
sudo apt install docker.io -y
sudo systemctl enable docker
sudo systemctl status docker
sudo systemctl start docker
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
필요한 도구를 설치한 후 클러스터 배포를 진행합니다. 아래 단계에 따라 필요한 시스템 조정을 하고, 클러스터를 초기화하고, 워커 노드에 가입합니다.
1단계: Kubernetes 배포 준비
이 섹션에서는 Kubernetes 배포를 위해 서버를 준비하는 방법을 보여줍니다. 각 서버 노드에서 아래 단계를 실행합니다.
sudo swapoff -a
그런 다음 아래의 sed 명령을 사용하여 /etc/fstab 파일 에 필요한 조정을 수행합니다 .
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo nano /etc/modules-load.d/containerd.conf
overlay
br_netfilter
containerd 구성을 편집합니다.
파일을 저장하고 종료합니다.
sudo modprobe overlay
sudo modprobe br_netfilter
sudo nano /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
Kubernetes 구성을 편집합니다.
파일을 저장하고 종료합니다.
sudo sysctl --system
시스템 구성을 다시 로드합니다.
2단계: 각 서버 노드에 고유한 호스트 이름 지정
1. 마스터 노드가 될 서버를 결정합니다. 그런 다음 해당 노드에 명령을 입력하여 그에 맞게 이름을 지정합니다.
sudo hostnamectl set-hostname master-node
sudo hostnamectl set-hostname worker01
만약 기존 호스트 명을 변경했다면 아래 디렉토리에서도 같이 변경해줘야한다.
sudo nano /etc/hosts
재부팅하고
sudo reboot
잘 설치됐는지 확인해보자
hostname
2_1. worker01도 컨테이너를 이용해야되기 때문에 도커를 사용해야하는데, 따로 GUI 없이 커널을 이용해서. 실행시 커맨드를 입력못한다. 이를 해결하기위해 자동 실행및 창 가리는 명령어 실행
sudo systemctl start docker
sudo systemctl enable docker
클러스터 노드에서 호스트 이름 설정을 마치면 마스터 노드로 전환하고 다음 단계에 따라 Kubernetes를 초기화합니다.
sudo nano /etc/default/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs"
저장하고 종료합니다.
sudo systemctl daemon-reload && sudo systemctl restart kubelet
sudo nano /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
daemon.json 파일을 편집합니다.
파일을 저장하고 종료합니다.
sudo systemctl daemon-reload && sudo systemctl restart docker
sudo mkdir -p /etc/systemd/system/kubelet.service.d
sudo nano /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# The below configuration sets --fail-swap-on=false as a kubelet argument, which allows kubelet to run even if swap is not turned off.
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_EXTRA_ARGS $KUBELET_NETWORK_ARGS $KUBELET_EXTRA_ARGS
sudo systemctl daemon-reload && sudo systemctl restart kubelet
sudo kubeadm init --control-plane-endpoint=master-node --upload-certs
작업이 완료되면 출력은 kubeadm join 하단에 명령을 표시합니다. 이 명령을 기록해 두십시오. 워커 노드를 클러스터에 가입하는 데 사용하게 됩니다.
kubeadm join master-node:6443 --token 2xqh8x.qbhooq8lvp7yzcrc \
--discovery-token-ca-cert-hash sha256:f7ae04dfc220be3f6f530b823aad393a8a18eeffe581a9ac28340b6c1e96ca5e