Study/Kubernetes

kubernetes 환경 구성하기(feat. cri-o, Utuntu 22.04, calico)

ABCD 2024. 6. 23.

사전 준비

  • Virtual Machine Program
  • Ubuntu 22.04.x server(.iso)

Ubuntu 기본 설정

Ubuntu 설치 후 설치해야 하는 것들

Ubuntu 22.04.x LTS를 설치하면 minimized로 설치하지 않는이상 Ubuntu에서 자동으로 설치해주는 툴들이 있다. 하지만, 설치가 되지 않는 것들도 존재하는데 이것들을 설치해주자.

 

1) vim
* 어떠한 에디터를 사용하던 상관은 없지만, 이미 vim에 노예이기에 vim을 설치하자.
* Ubuntu 22.04에서 기본적으로 vim-tiny가 설치되어 있다. 우리는 vim이랑 똑같이 동작하지만, 하이라이트 적용을 위해 새로운 vim을 설치하자.

sudo apt update

# vim-tiny 삭제
sudo apt remove vim-tiny

#vim 설치
sudo apt install vim

 

2) net-tools
* 기본적으로 설치된 환경에서는 ifconfig조차 사용 할 수 없기에 설치해주자.

sudo apt install net-tools

 

3) openvswitch-switch
* netplan apply를 사용하면 에러가 발생하는데 이를 해결하기 위해 설치하자.

sudo apt install openvswitch-switch

 

4) arping
* 지금 사용하려는 ip가 충돌이 발생하는지를 확인 할 수 있다.

sudo apt install arping

# 사용방법
arping -q -D -I "인터페이스 이름" -c 1 "체크할 IP"; echo $?

기타 설치하면 유용한 것들

꼭 설치할 필요는 없지만, 사용하면 용이한 것들이다. 참고하자.

1) neofetch
* 시스템 정보를 나타내주는 녀석... 이쁘다...

sudo apt install neofetch

 

 

2) bpytop
* 답답한 htop의 UI를 이쁘게 표현해주는 녀석이다.

sudo apt install bpytop

 


네트워크 환경 구성

고정 IP 설정

IP를 고정하려면 게이트웨이의 IP를 미리 확인해 두어야한다.

# sudo route -n

0.0.0.0 ${gateway ip} ...
# sudo vi /etc/netplan/00-installer-config.yaml

# 해당하는 이더넷 설정을 변경하면 된다.
network:
  ethernets:
    # ifconfig로 이더넷포트 이름을 확인 후 알맞은 곳을 수정해야한다.
    enp0:
        addresses:
            - ${gateway ip 앞 세자리}.110/24  # hosts에서 설정한 master의 ip
        routes:
            - to: default
              via: ${gateway ip}
        nameservers:
            addresses: [${gateway ip},8.8.8.8,8.8.4.4]
  version: 2

 

이제 고정 ip가 정상적으로 작동을 하는지 적용 후 테스트를 해보아야 한다.
아래 문구를 입력 후 정상 적동한다면 netplan 설정엔 오류가 없다는 것이다.

sudo netplan apply

 

테스트를 해보자.
가만히 두면 계속 올라오니 control + c로 중간에 멈춰야 한다.
아래와 같이 나온다면 정상적으로 네트워크가 동작한다는 것을 의미한다.

# ping 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=111 time=45.9 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=111 time=46.4 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=111 time=54.7 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=111 time=47.3 ms
64 bytes from 8.8.8.8: icmp_seq=5 ttl=111 time=48.4 ms
64 bytes from 8.8.8.8: icmp_seq=6 ttl=111 time=46.6 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=111 time=47.8 ms
64 bytes from 8.8.8.8: icmp_seq=8 ttl=111 time=47.5 ms
64 bytes from 8.8.8.8: icmp_seq=9 ttl=111 time=47.4 ms
^C
--- 8.8.8.8 ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8019ms
rtt min/avg/max/mdev = 45.949/48.016/54.694/2.465 ms

hostname 설정

각각의 서버에 Domain을 대신할 hostname을 설정하자.

# sudo vi /etc/hostname

# 맨 첫줄에 내용이 있다면 삭제하고 다음을 입력 후 저장하고 빠져나오자.
k8s-master.example.com

hosts 설정

#sudo vi/etc/hosts

127.0.0.1 localhost
127.0.0.1 ${server-name}

#위의 내용을 다음과 같이 변경하자
128.0.0.1 localhost
 ${gateway ip 앞 세자리}.47 k8s-master.example.com k8s-master
 ${gateway ip 앞 세자리}.48 k8s-worker1.example.com k8s-worker1
 ${gateway ip 앞 세자리}.49 k8s-worker2.example.com k8s-worker2

재시작

재시작을 통해 해당 설정이 정상적으로 되었는지 확인해보자.

sudo reboot

 

로그인 화면에서 일부러 비밀번호를 틀리면 hostname이 적힌 화면이 나오게 된다.
아래와 같이 나온다면 성공!!

k8s-master login : 
Password:

Login incorrect
k8s-master.example.com login : 

 

아래 커맨드를 입력후 결과값이 같다면 정상 동작한다는 것을 의미한다.

# hosthame
k8s-master.example.com

control plane node

Ubuntu 22.04 기준

클러스터 구성요소

  • kubernetes 1.30
  • cri-o
  • calico

다른 운영체제 설치 방법 참고
https://github.com/cri-o/packaging/blob/main/README.md

클러스터 구성요소 설치

sudo apt-get update
sudo apt-get install -y software-properties-common curl apt-transport-https ca-certificates
sudo su root
# run as root
KUBERNETES_VERSION=v1.28 # 사용하려는 버전 작성
PROJECT_PATH=prerelease:/main
curl -fsSL https://pkgs.k8s.io/core:/stable:/$KUBERNETES_VERSION/deb/Release.key |
    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:/$KUBERNETES_VERSION/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list

curl -fsSL https://pkgs.k8s.io/addons:/cri-o:/$PROJECT_PATH/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg

echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://pkgs.k8s.io/addons:/cri-o:/$PROJECT_PATH/deb/ /" |
    tee /etc/apt/sources.list.d/cri-o.list    

apt-get update
apt-get install -y cri-o kubelet kubeadm kubectl
systemctl start crio.service
swapoff -a
sudo sed -i '/\sswap\s/ s/^\(.*\)$/#\1/g' /etc/fstab
modprobe br_netfilter
sysctl -w net.ipv4.ip_forward=1

# 사내 IP를 192.168.0.0으로 사용하지 않을 경우
kubeadm init

# 사내 IP를 192.168.0.0으로 사용할 경우 ex)10.244.0.0/16
kubeadm --pod-network-cidr=${겹치지 않는 IP}/16 init

exit

 

정상 설치되면 아래 문구와 함께 kubeadm ~~커멘드가 등장하는데, 해당 커멘드는 workerNode들을 masterNode에 연결시킬때 필요하므로 어디 저장해두자.

# kubectl 동작 설정
# run as plain user(not root)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

network cni 설치

network cni 설정 참고
https://kubernetes.io/docs/concepts/cluster-administration/addons/

사내IP를 192.168.0.0으로 사용하지 않을 경우

curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml -O
kubectl apply -f calico.yaml
sudo systemctl restart kubelet.service

사내IP를 192.168.0.0으로 사용할 경우

사내망(192.168.0.0/24)에 설치시에는 calico 기본 대역과 충돌로 인해 cni custom 설정을 사용해야 한다
다운 받은 calico.yaml 파일을 open한다.

vi calico.yaml

calico.yaml파일을 열어 'CALICO_IPV4POOL_CIDR'을 검색한다.

            # The default IPv4 pool to create on startup if none exists. Pod IPs will be
            # chosen from this range. Changing this value after installation will have
            # no effect. This should fall within `--cluster-cidr`.
            # - name: CALICO_IPV4POOL_CIDR
            #   value: "192.168.0.0/16"

위의 밑에 두줄의 주석을 해제하고 vluae값에 아까 kubeadm init시 사용한 --pod-network-cidr로 입력해준 값을 입력하고 저장한다.

kubectl apply -f calico.yaml
sudo systemctl restart kubelet.service

 

위 명령어를 실행한다.

기타

# 다른 node를 현재 클러스터에 추가할때 아래 명령어 사용
kubeadm join 10.0.2.15:6443 --token d83x9e.dxlh7055uikryful \
        --discovery-token-ca-cert-hash sha256:de7310b330c83ce09d1f3b928270304fea6a900b771636e86ede63eb9271a47c

 

위 명령어에서 ip는 controlplane을 설치한 node의 ip가 된다


worker node

Ubuntu 22.04 기준

worker node 구성요소

  • kubernetes 1.30
  • cri-o

다른 운영체제 설치 방법 참고
https://github.com/cri-o/packaging/blob/main/README.md

sudo apt-get update
sudo apt-get install -y software-properties-common curl apt-transport-https ca-certificates
sudo su root
# run as root
KUBERNETES_VERSION=v1.30
PROJECT_PATH=prerelease:/main
curl -fsSL https://pkgs.k8s.io/core:/stable:/$KUBERNETES_VERSION/deb/Release.key |
    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:/$KUBERNETES_VERSION/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list

curl -fsSL https://pkgs.k8s.io/addons:/cri-o:/$PROJECT_PATH/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg

echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://pkgs.k8s.io/addons:/cri-o:/$PROJECT_PATH/deb/ /" |
    tee /etc/apt/sources.list.d/cri-o.list    

apt-get update
apt-get install -y cri-o kubelet kubeadm kubectl
systemctl start crio.service
swapoff -a
sudo sed -i '/\sswap\s/ s/^\(.*\)$/#\1/g' /etc/fstab
modprobe br_netfilter
sysctl -w net.ipv4.ip_forward=1
systemctl restart kubelet
kubeadm join 10.0.2.15:6443 --token d83x9e.dxlh7055uikryful \
        --discovery-token-ca-cert-hash sha256:de7310b330c83ce09d1f3b928270304fea6a900b771636e86ede63eb9271a47c
exit

 

위 명령어에서 ip는 controlplane을 설치한 node의 ip가 된다

728x90
반응형

댓글

💲 추천 글