쿠버네티스 설치 방법
1. 쿠버네티스란?
쿠버네티스(Kubernetes)는 클라우드 환경에서 여러 개의 컴퓨터를 사용하여 애플리케이션을 효율적으로 관리하는 데 도움을 주는 시스템입니다. 쉽게 말해, 쿠버네티스는 애플리케이션을 여러 서버에 자동으로 배포하고 관리할 수 있도록 해주는 도구입니다.
쿠버네티스는 이러한 기능들을 통해 애플리케이션의 배포와 관리, 스케일링(규모 조정), 복구를 간편하게 해줍니다. 이를 통해 개발자는 애플리케이션의 코드에 집중할 수 있게 되며, 시스템 운영자는 안정적인 환경을 유지할 수 있습니다.
컨테이너(Container): 애플리케이션과 그 애플리케이션이 실행되기 위한 모든 환경을 하나의 패키지로 묶은 것입니다. 예를 들어, 컨테이너 안에는 애플리케이션 코드, 라이브러리, 시스템 도구가 포함되어 있습니다.
클러스터(Cluster): 여러 대의 컴퓨터(노드)로 구성된 그룹입니다. 쿠버네티스는 이 클러스터를 관리하여 애플리케이션이 안정적으로 실행되도록 도와줍니다.
노드(Node): 클러스터를 구성하는 개별 컴퓨터나 서버입니다. 쿠버네티스는 이 노드들에서 애플리케이션의 컨테이너를 실행합니다.
파드(Pod): 쿠버네티스에서 애플리케이션의 컨테이너가 실행되는 기본 단위입니다. 하나의 파드 안에는 하나 이상의 컨테이너가 있을 수 있습니다.
디플로이먼트(Deployment): 애플리케이션의 배포를 자동으로 관리하는 설정입니다. 예를 들어, 새로운 버전을 배포하거나, 문제가 발생했을 때 자동으로 복구하도록 설정할 수 있습니다.
쿠버네티스 설치하기
2. 쿠버네티스 설치
ubuntu 22.04 버전에서 3대로 진행해 보려 합니다.
1) 호스트 이름 설정
[1] master
[2] worker01
[3] worker02
vi /etc/hostname
ubuntu에 들어가서 이름을 수정하여 줍니다.
2) 재시작
[1] master
[2] worker01
[3] worker02
init 6
3) containerd 설치
[1] master
[2] worker01
[3] worker02
apt -y install containerd
4) 가상 네트워크 설정
[1] master
[2] worker01
[3] worker02
cat > /etc/sysctl.d/99-k8s-cri.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
EOF
한번에 입력하면 됩니다.
sysctl --system
modprobe overlay; modprobe br_netfilter
echo -e overlay\\nbr_netfilter > /etc/modules-load.d/k8s.conf
update-alternatives --config iptables
iptables-legacy의 번호를 입력해 줍니다.
5) swap 끄기
[1] master
[2] worker01
[3] worker02
swapoff -a
vi /etc/fstab
/dev/mapper/cl-swap none swap defaults 0 0 이걸 다음처럼 변경, 주석 처리
#/dev/mapper/cl-swap none swap defaults 0 0
6) grub 설정(부팅 설정)
[1] master
[2] worker01
[3] worker02
vi /etc/default/grub
11번째 줄을 다음처럼 변경
GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=0"
7) update-grub
[1] master
[2] worker01
[3] worker02
update-grub
8) kubeadm, kubelet, kubectl 설치
[1] master
[2] worker01
[3] worker02
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo 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:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
apt update
apt -y install kubeadm kubelet kubectl
vi /etc/default/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs"
vi /usr/lib/systemd/system/containerd.service
[Service]
KillMode=mixed
systemctl restart containerd.service
systemctl restart kubelet
9) 클러스터 환경 초기화
[1] master
kubeadm init --control-plane-endpoint=[마스터 IP 주소] --pod-network-cidr=100.100.100.0/24 --cri-socket=unix:///run/containerd/containerd.sock
위 명령어를 실행하면 마지막에 위와 같이 나옵니다.
마지막줄 전체를 잘 복사해 둡니다.
kubeadm join [마스터 IP 주소]:6443 --token 3fpa97.g7bujubqeu7oooto \ --discovery-token-ca-cert-hash sha256:de3bca12c80c96feeae688ec76fb825b338665684f6d9a5ec28e6d769d28cbf6
join 명령어 잘 복사 해둘 것
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
10) K8S 네트워크 애드온 설치
[1] master
wget https://raw.githubusercontent.com/projectcalico/calico/master/manifests/calico.yaml
kubectl apply -f calico.yaml
11) Running 확인
[1] master
kubectl get pods -A
12) 워커 설치
[2] worker01
[3] worker02
kubeadm join [마스터 IP 주소]:6443 --token 3fpa97.g7bujubqeu7oooto \ --discovery-token-ca-cert-hash sha256:de3bca12c80c96feeae688ec76fb825b338665684f6d9a5ec28e6d769d28cbf6
이 명령어는 9번에서 명령어 실행결과로 나온 마스터에서 복사했던 명령어를 써야 합니다. 그대로 복사하면 안됨
13) Ready 확인
[1] master
kubectl get nodes
STATUS가 모두 Ready로 떠야 합니다.
14) 대시보드 설정
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
vi recommended.yaml
파일 수정
45번 라인을 추가
39 spec:
40 ports:
41 - port: 443
42 targetPort: 8443
43 selector:
44 k8s-app: kubernetes-dashboard
45 type: NodePort
45번 type: NodePort 추가
kubectl apply -f recommended.yaml
kubectl get services -n kubernetes-dashboard
포트번호를 확인
15) 계정 밑 토큰 생성
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
EOF
cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
EOF
kubectl -n kube-system create token admin-user
토큰 생성된것 복사
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
16) Kubernetes Dashboard 접속
https://<Master ip>:<14번 에서 확인한 port 번호>
주소창에 입력 후 15번에서 생성된 토큰 입력
쿠버네티스 대시보드 접속