본문 바로가기
IT/kuberntes

쿠버네티스 설치하기( k8s, feat kubeadm )

by 가능성1g 2024. 5. 17.
반응형

쿠버네티스를 가상환경에 설치해보겠습니다.

 

1. Rocky8.9 환경

2. VirtualBox 7.0 이용

3. 2core 4G 자원으로 고정함

 

1. 리눅스 설치는 생략!

GUI를 제외한 서버로 설치했습니다.

네트워크는 브리지 네트워크

swap 메모리는 설치시부터 설정하지 않았습니다!

 

2. 최신 패키지 업뎃 후, 

dnf update

 

master01 - worker01 설정 예정으로

3. hostname 을 각각 위와같이 지정해 줍니다.

 

hostnamectl set-hostname master01

hostnamectl set-hostname worker01

 

4. 혹시 모르니, 스왑을 모두 꺼줍니다.

sudo swapoff -a
sudo sed -i -e '/swap/d' /etc/fstab

 

5. /etc/hosts 파일에 정보를 추가합니다.

121.147.88.01 master01
121.147.88.02 worker01

 

6. 도커 설치

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
# 아래명령어 실행시 약간의 오류 발생
dnf update
# 충돌되는 패키지는 삭제하면서 설치
dnf install -y docker-ce docker-ce-cli containerd.io --allowerasing
docker --version
systemctl enable docker
systemctl start docker
systemctl status docker

# 도커 설정
mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

systemctl daemon-reload
systemctl restart docker

 

6. containerd 설치

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sysctl --system

 

7. 쿠버네티스 레포 등록 및 설치 ( 공식문서보고 리포 수정했음 )

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl
EOF

dnf -y install kubelet kubeadm kubectl --disableexcludes=kubernetes epel-release
systemctl enable --now kubelet

 

mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

 

옵션수정

vi /etc/containerd/config.toml
---------------------------
......
        [plugins."io.containerd.grpc.v1.cri".containerd.default_runtime.options]
          SystemdCgroup = true
......
---------------------------

 

containerd 실행 

# containerd cri 활성화
sed -i 's/^disabled_plugins/#disabled_plugins/' /etc/containerd/config.toml
systemctl enable containerd
systemctl restart containerd

 

8. 방화벽 해제

## 마스터
firewall-cmd --add-port={80,443,6443,2379,2380,10250,10251,10252,30000-32767}/tcp --permanent
firewall-cmd --reload

## 워커
firewall-cmd --add-port={80,443,10250,30000-32767}/tcp --permanent
firewall-cmd --reload

 

9. 계정생성 ( master, worker )

useradd -d /home/username username
echo "password" | passwd username --stdin

chmod 700 /usr/bin/su

#visudo 로 sudo 권한 추가!!

 

9.1 kubeadm join 오류 방지를 위한 패키지 설치(tc)

dnf install -y iproute-tc

 

10. 마스터 노드 설치

sudo kubeadm init \
    --control-plane-endpoint "master01:6443" \
    --pod-network-cidr=192.168.0.0/16 \
    --upload-certs

 

11. 향후  마스터 추가를 위한 calico 설치

## 주소바뀌어서 수정
## 아래 설정은 주석을 해제해 주면 됨
curl  https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml -O
vi calico.yaml
---------------------------
            - name: CALICO_IPV4POOL_CIDR
              value: "192.168.0.0/16
---------------------------

kubectl apply -f calico.yaml

kubectl get pods -o wide -A

# calico-kube-controllers 가 Pending 상태이면 아래명령을 수행하자.
sudo systemctl restart containerd

 

12. 마스터 노드 정상 확인

kubectl get nodes

 

설치시 나오는 커맨드로 worker node 를 조인 시킨다. (조인시 root 로 해야함)

 

13. 최종 확인!

 

 

향후 , 추가적은 노드는 

sudo kubeadm token create --print-join-command

를 이용하여 추가한다!

 

설정이 먼가 잘못된거 같을때 초기화 하기

# Docker 초기화
docker rm -f `docker ps -aq`
docker volume rm `docker volume ls -q`
sudo umount /var/lib/docker/volumes
sudo rm -rf /var/lib/docker/
sudo systemctl restart docker

#kubernetes 초기화
sudo kubeadm reset
sudo systemctl restart kubelet
sudo reboot

 

반응형