[Kubernetes] Ubuntu 쿠버네티스 설치 방법

 

 

 

쿠버네티스 설치 방법

 

 

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번에서 생성된 토큰 입력

 

 

쿠버네티스 대시보드 접속