사전 준비
- 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가 된다
'Study > Kubernetes' 카테고리의 다른 글
Kubernetes에서 NFS와 PV,PVC,를 이용한 데이터 관리하기 (0) | 2024.06.27 |
---|---|
kubernetes Control-plane(Master Node)도 일을 시켜보자!! (0) | 2024.06.23 |
Kubernetes 구성중 Swap Memory를 Off 해야하는 이유!! (0) | 2024.06.23 |
댓글