목차
쿠버네티스 설치부터 서비스 배포까지 - 1.도커 설치
쿠버네티스 설치부터 서비스 배포까지 - 2.쿠버네티스 설치
쿠버네티스 설치부터 서비스 배포까지 - 2-1. 쿠버네티스 재설치
쿠버네티스 설치부터 서비스 배포까지 - 3.쿠버네티스 Ingress Nginx 생성
쿠버네티스 설치부터 서비스 배포까지 - 4.NFS 설치
쿠버네티스 설치부터 서비스 배포까지 - 5.데이터베이스 설정
쿠버네티스 설치부터 서비스 배포까지 - 6.프론트엔드 설정
쿠버네티스 설치부터 서비스 배포까지 - 7.백엔드 설정
쿠버네티스 설치부터 서비스 배포까지 - 8.결과화면
2.쿠버네티스 설치
해당 파트 참고 URL
본문
Install kubeadm
쿠버네티스를 설치하기 전에 swap을 종료
swap 해제는 필수이며 Master Server와 Node Server 모두 설정해줘야 합니다.
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
쿠버네티스 설치 전 세팅
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
쿠버네티스 패키지 설치 kubeadm, kubelet, kubectl
- kubeadm : 클러스터를 구축하기 위한 툴
- kubelet : 클러스터의 각 노드에서 실행되는 에이전트이며 파드에서 컨테이너가 정상적으로 동작하도록 관리
- kubectl : 클러스터와 통신하기 위한 명령 util
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl vim
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet=1.23.6-00 kubeadm=1.23.6-00 kubectl=1.23.6-00
sudo apt-mark hold kubelet kubeadm kubectl
도커 systemd를 사용하도록 한다
sudo mkdir /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
도커에 코드 적용되도록 재시작
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
Master Control-plane 구성
kubeadm을 실행하기에 앞서 kubeadm 사용이 가능한 선결 조건을 확인해야 합니다.
https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
마스터가 될 서버에서 실행해야 합니다
kubeadm init --pod-network-cidr=192.168.0.0/16
클러스터 사용을 위한 유저 권한
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
맨 아래에 있는 join 토큰은 Node에서 Master 서버로 Join 하기 위해 사용하면 됩니다!
쿠버네티스 클러스터 Network 통신을 위한 Calico 설치
kubectl create -f https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml
kubectl create -f https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml
칼리코 설치 확인
watch kubectl get pods -n calico-system
포드 예약을 할 수 있도록 마스터에서 taint 제거
# node/<your-hostname> untainted --> 이것을 반환해야 한다
kubectl taint nodes --all node-role.kubernetes.io/master-
bash Completion 활성화
sudo apt-get install -y bash-completion
source /usr/share/bash-completion/bash_completion
echo 'source <(kubectl completion bash)' >>~/.bashrc
kubectl 사용시 명령어 또는 Pod Service 등 명칭이 아주 긴 경우가 있습니다.
이러한 경우 bash Completion을 통해 편리하게 사용이 가능합니다.
사용법은 Tab 버튼 누르면 됩니다.
# 예시
pod의 이름이 backend-djhn2jdy1151.jdjvmnejd
위와 같은 상황에서 다음과 같이 작성하고
kubectl get pod back
Tap을 누를경우
kubectl get pod backend-djhn2jdy1151.jdjvmnejd
자동으로 완성이 됩니다
Worker Node 구성
하나의 서버에서만 만들면서 진짜 딱 경험만 해 볼 것이라면 노드 서버를 구성하지 않아도 되겠지만 노드 서버 구축이 가능할 경우 추후 컨테이너를 생성하게 되면 Kubernetes에 의해 노드 별로 자동으로 Pod, Deployment, ReplicaSet 등등이 어떻게 나눠지게 되는지 오케스트레이션이 무엇인지 눈으로 확인 할 수 있습니다.
실제로 사용하기 위해서는 cloud의 도커 이미지가 저장되는 요소를 추가해야 자신이 만든 도커 이미지를 사용이 가능할 것입니다
거기까지는 시간이 너무 오래 걸리기 때문에 이 과정에서는 하나의 리눅스 시스템에서 먼저 맛보기만 겪어보시기 바랍니다 ^^
그렇기 때문에 워커 노드 구성은 그냥 이런 것이 있구나? 만 아시면 될 것 같습니다
kubeadm join실행
# 위에서 저장해 놓은 토큰을 실행합니다.
kubeadm join 10.100.0.10:6443 --token zo0mli.iads9quw4wu8xij1 \
--discovery-token-ca-cert-hash sha256:8fef81bc6a0f5d7212adfbb37e783554393cdca9f5a35c8a020b33d1e93baffa
- 만약 preflight Running pre-flight checks에서 멈춰있을 경우 방화벽이 실행되고 있지 않은지 확인하시기 바랍니다.
방화벽에 막혀 조인하지 못하고 있는 상태이기 때문에 방화벽을 해제 해줘야 합니다sudo ufw allow 6443 sudo ufw allow 2379 sudo ufw allow 2380 sudo ufw allow 10250 sudo ufw allow 10251 sudo ufw allow 10252 sudo ufw reload
상태 확인
kubectl get nodes
기타 팁
토큰 새로 만들기
토큰은 유효기간이 있습니다
그 유효기간이 지나면 더이상 join 하지 못하는데요 새로운 토큰을 생성해서 join 할 수 있도록 합니다
### kubeadm join token
# 토큰 확인
kubeadm token list
# 토큰 생성
kubeadm token create
# bjniqn.n228af9ywbq9o0cq
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
# 위에서 생성한 값을 아래 명령과 같이 입력
# kubeadm join 000.000.000.000:6443 --token { create 값 } --discovery-token-ca-cert-hash sha256:{ ssl 값 }
예시
kubeadm join 10.100.0.10:6443 --token bjniqn.n228af9ywbq9o0cq --discovery-token-ca-cert-hash sha256:3e6723b089a00a1acc09134e9eac963eeb5c080482041c33b6dd42b8a50c92e1
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
해당 오류가 계속해서 발생할 경우 설정이 꼬여있는 것입니다.
다음 방법을 통해 조치합니다.
unset KUBECONFIG
mv $HOME/.kube $HOME/.kube.bak
mkdir $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config