쿠버네티스 설치

KIM HYUNMIN·2024년 8월 22일

쿠버네티스

목록 보기
1/16


출처 https://www.pngegg.com/ko/search?q=%EC%BF%A0+%EB%B2%84%EB%84%A4+%ED%8B%B0%EC%8A%A4

#!/bin/bash
set -e

echo '======== [4] Rocky Linux 기본 설정 ========'
echo '======== [4-1] 패키지 업데이트 ========'
# 강의와 동일한 실습 환경을 유지하기 위해 Linux Update 주석 처리
# yum -y update

echo '======== [4-2] 타임존 설정 ========'
timedatectl set-timezone Asia/Seoul
timedatectl set-ntp true
chronyc makestep

echo '======== [4-3] [WARNING FileExisting-tc]: tc not found in system path 로그 관련 업데이트 ========'
yum install -y yum-utils iproute-tc
echo '======== [4-3] [WARNING OpenSSL version mismatch 로그 관련 업데이트 ========'
yum update openssl openssh-server -y

echo '======= [4-4] hosts 설정 =========='
cat << EOF >> /etc/hosts
192.168.56.30 k8s-master
EOF

echo '======== [5] kubeadm 설치 전 사전작업 ========'
echo '======== [5] 방화벽 해제 ========'
systemctl stop firewalld && systemctl disable firewalld

echo '======== [5] Swap 비활성화 ========'
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab

echo '======== [6] 컨테이너 런타임 설치 ========'
echo '======== [6-1] 컨테이너 런타임 설치 전 사전작업 ========'
echo '======== [6-1] iptable 세팅 ========'
cat <<EOF |tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

cat <<EOF |tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sysctl --system

echo '======== [6-2] 컨테이너 런타임 (containerd 설치) ========'
echo '======== [6-2-1] containerd 패키지 설치 (option2) ========'
echo '======== [6-2-1-1] docker engine 설치 ========'
echo '======== [6-2-1-1] repo 설정 ========'
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

echo '======== [6-2-1-1] containerd 설치 ========'
yum install -y containerd.io-1.6.21-3.1.el9.aarch64
systemctl daemon-reload
systemctl enable --now containerd

echo '======== [6-3] 컨테이너 런타임 : cri 활성화 ========'
containerd config default > /etc/containerd/config.toml
sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
systemctl restart containerd

echo '======== [7] kubeadm 설치 ========'
echo '======== [7] repo 설정 ========'
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

echo '======== [7] SELinux 설정 ========'
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

echo '======== [7] kubelet, kubeadm, kubectl 패키지 설치 ========'
yum install -y kubelet-1.27.2-150500.1.1.aarch64 kubeadm-1.27.2-150500.1.1.aarch64 kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes
systemctl enable --now kubelet

echo '======== [8] kubeadm으로 클러스터 생성  ========'
echo '======== [8-1] 클러스터 초기화 (Pod Network 세팅) ========'
kubeadm init --pod-network-cidr=20.96.0.0/16 --apiserver-advertise-address 192.168.56.30

echo '======== [8-2] kubectl 사용 설정 ========'
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

echo '======== [8-3] Pod Network 설치 (calico) ========'
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico-custom.yaml

echo '======== [8-4] Master에 Pod를 생성 할수 있도록 설정 ========'
kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane-

echo '======== [9] 쿠버네티스 편의기능 설치 ========'
echo '======== [9-1] kubectl 자동완성 기능 ========'
yum -y install bash-completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
source ~/.bashrc

echo '======== [9-2] Dashboard 설치 ========'
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml

echo '======== [9-3] Metrics Server 설치 ========'
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yaml

설치 K8s init 파일
#!/bin/bash 로 한번에 설치
set-e로 에러발생시 중단

1. 기본 설정

[4-1] 패키지 업데이트

yum -y update

설명: 이 부분은 Rocky Linux의 패키지를 최신 상태로 업데이트하는 명령어입니다. 주석 처리되어 있어 실제로는 실행되지 않습니다. 강의 환경과 동일한 상태를 유지하기 위해 주석 처리된 것으로 보입니다.

[4-2] 타임존 설정

timedatectl set-timezone Asia/Seoul

설명: 서버의 타임존을 'Asia/Seoul'로 설정합니다. 타임존 설정은 로그 관리나 일정 관리에서 중요할 수 있습니다.

[4-3] tc not found in system path 로그 관련 업데이트

yum install -y yum-utils iproute-tc

설명: tc 명령어가 없을 때 나타나는 경고를 해결하기 위해 iproute-tc 패키지를 설치합니다. tc는 네트워크 트래픽 제어에 사용되는 도구입니다.

[4-4] hosts 설정

cat << EOF >> /etc/hosts
192.168.56.30 k8s-master
EOF

설명: /etc/hosts 파일에 k8s-master라는 호스트 이름을 192.168.56.30 IP 주소와 매핑합니다. 이 설정은 클러스터 내에서 쉽게 노드를 참조하기 위해 사용됩니다.

2. kubeadm 설치 전 사전 작업

[5] 방화벽 해제

systemctl stop firewalld && systemctl disable firewalld

설명: firewalld 서비스를 중지하고 비활성화합니다. 방화벽이 활성화된 상태에서는 쿠버네티스 노드 간의 통신이 차단될 수 있기 때문에 이를 비활성화합니다.

[5] Swap 비활성화

swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab

설명: 쿠버네티스는 안정적인 성능을 위해 스왑 메모리를 비활성화하는 것을 권장합니다. swapoff -a는 현재 활성화된 스왑을 비활성화하고, /etc/fstab 파일에서 스왑 파티션을 주석 처리하여 시스템 재부팅 후에도 스왑이 활성화되지 않도록 설정합니다.

3. 컨테이너 런타임 설치

[6-1] iptables 세팅

cat <<EOF |tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

cat <<EOF |tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sysctl --system

설명: 이 설정은 컨테이너 네트워킹을 위해 필요한 커널 모듈을 로드하고, iptables를 사용하여 브릿지 네트워크 트래픽을 처리할 수 있도록 시스템 파라미터를 조정하는 것입니다. sysctl --system 명령어는 모든 sysctl 설정을 재로드합니다.

[6-2] containerd 설치

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo


yum install -y containerd.io-1.6.21-3.1.el9.aarch64
systemctl daemon-reload
systemctl enable --now containerd

설명: Docker의 공식 리포지토리를 추가하고, containerd라는 컨테이너 런타임을 설치합니다. containerd는 컨테이너를 실행하기 위한 필수적인 런타임입니다. 설치 후 시스템 부팅 시 자동으로 시작되도록 설정합니다.

[6-3] cri 활성화

containerd config default > /etc/containerd/config.toml
sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
systemctl restart containerd

설명: containerd의 기본 설정 파일을 생성한 후, 쿠버네티스와 호환되도록 SystemdCgroup을 활성화(true로 변경)합니다. 설정 후 containerd를 재시작합니다.

4. kubeadm 설치 및 클러스터 초기화

[7] kubeadm 설치 전 사전 작업

[7-1] repo 설정

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

설명: 쿠버네티스 패키지를 설치할 수 있도록 YUM 리포지토리를 설정합니다. 이 설정을 통해 kubeadm, kubelet, kubectl 등을 설치할 수 있습니다.

[7-2] SELinux 설정

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

설명: SELinux를 permissive 모드로 변경합니다. SELinux가 enforcing 모드로 설정되어 있으면 쿠버네티스의 일부 기능이 제대로 동작하지 않을 수 있습니다.

[7-3] kubeadm, kubelet, kubectl 설치

yum install -y kubelet-1.27.2-150500.1.1.aarch64 kubeadm-1.27.2-150500.1.1.aarch64 kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes
systemctl enable --now kubelet

설명: 쿠버네티스의 주요 패키지인 kubelet, kubeadm, kubectl을 설치합니다. kubelet은 노드에서 실행되는 에이전트이며, kubeadm은 클러스터 초기화를 위한 도구, kubectl은 클러스터를 관리하기 위한 CLI 도구입니다. 설치 후 kubelet을 활성화하고 즉시 시작합니다.

[8] kubeadm으로 클러스터 생성

[8-1] 클러스터 초기화 (Pod Network 세팅)

kubeadm init --pod-network-cidr=20.96.0.0/16 --apiserver-advertise-address 192.168.56.30

설명: 쿠버네티스 클러스터를 초기화합니다. --pod-network-cidr 플래그는 Pod 네트워크에 사용할 IP 범위를 지정합니다. --apiserver-advertise-address는 API 서버가 다른 노드에 광고할 IP 주소를 지정합니다.

[8-2] kubectl 사용 설정

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

설명: kubectl을 사용하여 클러스터를 관리할 수 있도록 설정 파일을 복사합니다. 이 설정 파일(admin.conf)은 클러스터에 대한 관리자 권한을 제공합니다.

[8-3] Pod Network 설치 (Calico)

kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico-custom.yaml

설명: Calico라는 네트워크 플러그인을 설치하여 클러스터 내의 Pod 간 네트워크 통신을 가능하게 합니다. Calico는 쿠버네티스에서 많이 사용하는 CNI(컨테이너 네트워킹 인터페이스) 플러그인입니다.

[8-4] Master에 Pod를 생성할 수 있도록 설정

kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane-

설명: 기본적으로 쿠버네티스 마스터 노드에서는 워크로드를 실행하지 않도록 설정되어 있습니다. 이 명령어는 마스터 노드에서 워크로드(Pod)를 실행할 수 있도록 taint를 제거합니다.

5. 쿠버네티스 편의 기능 설치

[9-1] kubectl 자동 완성 기능

yum -y install bash-completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
source ~/.bashrc

설명: kubectl 명령어의 자동 완성 기능을 활성화합니다. 이 기능을 통해 터미널에서 kubectl 명령어를 더 쉽게 사용할 수 있습니다.

[9-2] Dashboard 설치

kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml

설명: 쿠버네티스 대시보드를 설치합니다. 이 대시보드는 클러스터를 시각적으로 관리할 수 있는 웹 기반의 UI를 제공합니다.

[9-3] Metrics Server 설치

kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yaml

설명: Metrics Server를 설치합니다. Metrics Server는 클러스터 내에서 리소스 사용량(CPU, 메모리 등)을 수집하여 HPA(Horizontal Pod Autoscaler)와 같은 기능을 지원합니다.

출처: 큐브옵스 커뮤니티

profile
Linux,Window,Network,docker,kubernets

0개의 댓글