master node와 Tomcat node를 나눠서 Kubenete로 Tomcat 배포까지 해보겠다.
Ubuntu 22.04 CLI로 3개의 서버를 만들어서 진행하겠다.
Vmware에서 CLI버전을 다루긴 다소 까다롭기 때문에 Superputty를 사용하겠다.
master node | 192.168.2.10 |
work node 1 | 192.168.2.11 |
work node 2 | 192.168.2.12 |
그리고 통신을 하기 위해 /etc/hosts에 아래와 같이 입력해준다.
nano /etc/hosts
Superputty를 사용할 때 주의사항은 putty가
설치된 상태여야되고, 설정 시 아래와 같이 Location을 설정해줘야한다.
그리고 ip는 우분투에서 아래와 같이 각각 설정해주었다.
이제 시작해보겠다.
step 1
모든 노드에 스왑 비활성화 시키기
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
step 2
Using Docker Repository
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
step 3
containerd 설치
https://www.itzgeek.com/how-tos/linux/ubuntu-how-tos/install-containerd-on-ubuntu-22-04.html
How to Install Containerd on Ubuntu 22.04 / Ubuntu 20.04 | ITzGeek
containerd is an industry-standard container runtime that manages the complete container lifecycle of its host system. It handles image
www.itzgeek.com
sudo apt update
sudo apt install -y containerd.io
# sudo systemctl status containerd # Ctrl + C를 눌러서 나간다.
step 4
Containerd configuration for Kubernetes
cat <<EOF | sudo tee -a /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
EOF
sudo sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml
sudo systemctl restart containerd
# 소켓이 있는지 확인한다.
sudo ls /var/run/containerd/containerd.sock
step 5
kubeadm, kubelet 및 kubectl
# 1. apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다.
sudo mkdir /etc/apt/keyrings
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 2. 구글 클라우드의 공개 사이닝 키를 다운로드 한다.
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
# 3. 쿠버네티스 apt 리포지터리를 추가한다.
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 4. apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다.
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
kubeadm 버전을 확인한다. --> kubeadm version
step 6
넷필터 브릿지 설정
modprobe br_netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
step 7
마스터 노드 초기화 --> kubeadm init
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
kubeadm init
#아래는 각자 다름
kubeadm join 192.168.2.10:6443 --token wa3cq4.h5pj5smcjpppbz29 \
--discovery-token-ca-cert-hash sha256:fbf5a864ad763bdbd5437acd10c9e480716fcf2c08187df40f4b9567237a86f2
#오류시
kubeadm restart -> kubeadm init
step 8
work1, work2에서 master의 join 명령어 실시
kubeadm join 192.168.2.10:6443 --token wa3cq4.h5pj5smcjpppbz29 \ --discovery-token-ca-cert-hash sha256:fbf5a864ad763bdbd5437acd10c9e480716fcf2c08187df40f4b9567237a86f2
cilium connectivity test
step 9
cilium 설치 및 설정
curl -LO https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz
cilium install --> 2-3분 걸린다
step 10
Tomcat 배포 및 확인
kubectl create deploy tc --image=consol/tomcat-7.0 --replicas=5
kubectl expose deploy tc --type=NodePort --port=80 --target-port=8080
kubectl get svc
NodePort --> 외부에서 접속하기 위해 사용하는 포트
targetPort -> service객체로 전달된 요청을 pod(deploy)로 전달할때 사용하는 포트
기타 오류
2023.10.25 - [Cloud/Kubenetes] - Kubernetes worker-node join 오류
Kubernetes worker-node join 오류
[preflight] Running pre-flight checks error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists [ERROR FileAvailable--etc-kubernetes-bootstrap-ku
woonglab.com
The connection to the server was refused - did you specify the right host or port? 해결방법
cilium을 설치하려고 했는데 계속해서 연결이 거부되었다고 나왔다. 구글링 하다보니 kubectl 문제라는 것을 알게 되었다. kubectl get node 했을 때도 연결이 안됬다고 Swap을 꺼줍니다. root@master:~# swapoff
woonglab.com