🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

블로그

David

[인프런 워밍업 클럽 4기 - DevOps] 미션 2. Probe 응용과제

응용 과제Application 로그를 통한 probe 동작 분석#사전 작업#kubectl patch -n anotherclass-123 hpa api-tester-1231-default -p '{"spec":{"minReplicas":1}}' Grafana 접속 후 Pod 로그 화면 설정Pod 삭제Application Log 확인마스터 노드에서 실행// 1번 API - 외부 API 실패 curl http://192.168.56.30:31231/hello // 2번 API // 외부 API 실패 curl http://192.168.56.30:31231/hello // 내부 API 성공 kubectl exec -n anotherclass-123 -it api-tester-1231-7459cd7df-2hdhk -- curl localhost:8080/hello kubectl exec -n anotherclass-123 -it <my-pod-name> -- curl localhost:8080/hello // 3번 API - 외부 API 성공 curl http://192.168.56.30:31231/hello // 4번 API // 트래픽 중단 - (App 내부 isAppReady를 False로 바꿈) curl http://192.168.56.30:31231/traffic-off // 외부 API 실패 curl http://192.168.56.30:31231/hello // 트래픽 재개 - (App 내부 isAppReady를 True로 바꿈) kubectl exec -n anotherclass-123 -it api-tester-1231-7459cd7df-2hdhk -- curl localhost:8080/traffic-on // 5번 API - 장애발생 (App 내부 isAppLive를 False로 바꿈) curl http://192.168.56.30:31231/server-error 응용 1. startupProbe가 실패 되도록 설정해서 Pod가 무한 재기동 상태가 되도록 설정해 보세요.[결과]응용 2. 일시적 장애 상황(App 내부 부하 증가)가 시작 된 후, 30초 뒤에 트래픽이 중단되고, 3분 뒤에는 App이 재기동 되도록 설정해 보세요.설정 후 API 요청하면 성공하지만 그 이후에는 차단응용 3. Secret 파일(/usr/src/myapp/datasource/postgresql-info.yaml)이 존재하는지 체크하는 readinessProbe를 만들어 보세요.해당 Pod 내부에 파일이 존재하기 때문에 실패 로그는 확인 불가 

데브옵스 · 인프라DevOpsSRE일프로Probek8smsa

David

[SPG-박상준] 1주차 발자국

26일 OT 이후 [미션1] 쿠버네티스 설치 구간별 상태 확인만 진행된 상태이지만 발자국을 남겨본다. 인프런에서 강의 구매 후 절반 정도 진행을 하고 있었고 스터디 팀을 하는 것이 귀찮기도 했지만 전원 완주 팀에 Sprint4 무료 쿠폰이라는 달콤한 보상이 있었기에 신청하게 되었다.우리 SPG(Senior Pod Group) 팀은 대부분 고연차 경력을 가지고 현업에 계신 분들로 구성이 되어 있기 때문에 개인 공부를 위한 실습은 하겠지만 문서화하고 기록에 남기는 일은 정말 쉽지 않은 것을 알고 있다. (나 또한..) 각설하고 [미션1] 과정은 한차례 진행했었기 때문에 신규로 다시 구성을 했었고 쿠버네티스 설치에 필요한 환경설정은 여러 번 재구축 해보기 위해 스크립트로 작성하여 진행했다. 환경설정 또한 이전 단계 설정을 하고 검증 단계를 걸쳐서 완료되지 않으면 넘어가지 않도록 작성해서 설정이 빠지는 것을 방지했다.[환경설정 코드]#!/bin/bash # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 로그 함수 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 검증 실패 시 종료 함수 exit_on_error() { log_error "$1" log_error "스크립트를 종료합니다." exit 1 } # 사용자 확인 함수 confirm_continue() { read -p "다음 단계로 진행하시겠습니까? (y/n): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then log_info "사용자가 중단했습니다." exit 0 fi } echo "========================================" echo "Kubernetes 기본 환경설정 스크립트 시작" echo "========================================" # ============================================ # 1. 시스템 기본 설정 # ============================================ log_info "======== [1단계] 시스템 기본 설정 ========" log_info "타임존을 Asia/Seoul로 설정 중..." timedatectl set-timezone Asia/Seoul timedatectl set-ntp true chronyc makestep log_info "필수 패키지 설치 중..." yum install -y yum-utils iproute-tc yum update openssl openssh-server -y log_info "hosts 파일 설정 중..." if ! grep -q "k8s-master" /etc/hosts; then cat << EOF >> /etc/hosts 192.168.56.30 k8s-master EOF fi log_info "======== [1단계] 검증 시작 ========" # 타임존 검증 current_timezone=$(timedatectl show --property=Timezone --value) if [ "$current_timezone" = "Asia/Seoul" ]; then log_success "타임존 설정 완료: $current_timezone" else exit_on_error "타임존 설정 실패: $current_timezone" fi # NTP 동기화 검증 ntp_status=$(timedatectl show --property=NTPSynchronized --value) if [ "$ntp_status" = "yes" ]; then log_success "NTP 동기화 완료" else log_warning "NTP 동기화 미완료 (시간이 필요할 수 있음)" fi # 필수 패키지 검증 if command -v tc >/dev/null 2>&1; then log_success "tc 패키지 설치 완료" else exit_on_error "tc 패키지 설치 실패" fi # hosts 파일 검증 if grep -q "192.168.56.30 k8s-master" /etc/hosts; then log_success "hosts 파일 설정 완료" else exit_on_error "hosts 파일 설정 실패" fi log_success "======== [1단계] 시스템 기본 설정 완료 ========" confirm_continue # ============================================ # 2. 보안 설정 # ============================================ log_info "======== [2단계] 보안 설정 ========" log_info "방화벽 해제 중..." systemctl stop firewalld systemctl disable firewalld log_info "SELinux 설정 중..." setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config log_info "======== [2단계] 검증 시작 ========" # 방화벽 상태 검증 firewall_status=$(systemctl is-active firewalld) if [ "$firewall_status" = "inactive" ]; then log_success "방화벽 해제 완료" else exit_on_error "방화벽 해제 실패: $firewall_status" fi # 방화벽 부팅 시 비활성화 검증 firewall_enabled=$(systemctl is-enabled firewalld) if [ "$firewall_enabled" = "disabled" ]; then log_success "방화벽 부팅시 비활성화 완료" else exit_on_error "방화벽 부팅시 비활성화 실패: $firewall_enabled" fi # SELinux 현재 상태 검증 selinux_current=$(getenforce) if [ "$selinux_current" = "Permissive" ]; then log_success "SELinux 현재 상태: $selinux_current" else exit_on_error "SELinux 설정 실패: $selinux_current" fi # SELinux 설정 파일 검증 selinux_config=$(grep "^SELINUX=" /etc/selinux/config | cut -d'=' -f2) if [ "$selinux_config" = "permissive" ]; then log_success "SELinux 영구 설정 완료: $selinux_config" else exit_on_error "SELinux 영구 설정 실패: $selinux_config" fi log_success "======== [2단계] 보안 설정 완료 ========" confirm_continue # ============================================ # 3. 시스템 리소스 설정 # ============================================ log_info "======== [3단계] 시스템 리소스 설정 ========" log_info "Swap 비활성화 중..." swapoff -a sed -i '/ swap / s/^/#/' /etc/fstab log_info "======== [3단계] 검증 시작 ========" # Swap 상태 검증 swap_status=$(swapon --show) if [ -z "$swap_status" ]; then log_success "Swap 비활성화 완료" else exit_on_error "Swap 비활성화 실패: $swap_status" fi # fstab에서 swap 주석 처리 검증 swap_in_fstab=$(grep -v "^#" /etc/fstab | grep swap) if [ -z "$swap_in_fstab" ]; then log_success "fstab에서 swap 영구 비활성화 완료" else exit_on_error "fstab에서 swap 영구 비활성화 실패" fi log_success "======== [3단계] 시스템 리소스 설정 완료 ========" confirm_continue # ============================================ # 4. 네트워크 설정 # ============================================ log_info "======== [4단계] 네트워크 설정 ========" log_info "커널 모듈 설정 중..." cat <<EOF |tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter log_info "네트워크 파라미터 설정 중..." 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 log_info "======== [4단계] 검증 시작 ========" # 커널 모듈 검증 if lsmod | grep -q overlay; then log_success "overlay 모듈 로드 완료" else exit_on_error "overlay 모듈 로드 실패" fi if lsmod | grep -q br_netfilter; then log_success "br_netfilter 모듈 로드 완료" else exit_on_error "br_netfilter 모듈 로드 실패" fi # 네트워크 파라미터 검증 iptables_call=$(sysctl net.bridge.bridge-nf-call-iptables | cut -d'=' -f2 | tr -d ' ') if [ "$iptables_call" = "1" ]; then log_success "iptables 설정 완료" else exit_on_error "iptables 설정 실패: $iptables_call" fi ip6tables_call=$(sysctl net.bridge.bridge-nf-call-ip6tables | cut -d'=' -f2 | tr -d ' ') if [ "$ip6tables_call" = "1" ]; then log_success "ip6tables 설정 완료" else exit_on_error "ip6tables 설정 실패: $ip6tables_call" fi ip_forward=$(sysctl net.ipv4.ip_forward | cut -d'=' -f2 | tr -d ' ') if [ "$ip_forward" = "1" ]; then log_success "IP 포워딩 설정 완료" else exit_on_error "IP 포워딩 설정 실패: $ip_forward" fi log_success "======== [4단계] 네트워크 설정 완료 ========" # ============================================ # 최종 검증 및 완료 # ============================================ log_info "======== 최종 기본 환경설정 검증 ========" log_info "기본 환경설정 상태 요약:" echo "----------------------------------------" echo "1. 타임존: $(timedatectl show --property=Timezone --value)" echo "2. 방화벽: $(systemctl is-active firewalld)" echo "3. SELinux: $(getenforce)" echo "4. Swap: $(if [ -z "$(swapon --show)" ]; then echo "비활성화"; else echo "활성화"; fi)" echo "5. IP 포워딩: $(sysctl net.ipv4.ip_forward | cut -d'=' -f2 | tr -d ' ')" echo "6. 커널 모듈 overlay: $(if lsmod | grep -q overlay; then echo "로드됨"; else echo "로드안됨"; fi)" echo "7. 커널 모듈 br_netfilter: $(if lsmod | grep -q br_netfilter; then echo "로드됨"; else echo "로드안됨"; fi)" echo "----------------------------------------" log_success "========================================" log_success "Kubernetes 기본 환경설정이 완료되었습니다!" log_success "이제 컨테이너 런타임과 Kubernetes 패키지를" log_success "설치할 준비가 되었습니다." log_success "========================================" log_info "다음 단계:" log_info "1. 컨테이너 런타임 (containerd) 설치" log_info "2. Kubernetes 패키지 (kubelet, kubeadm, kubectl) 설치" log_info "3. 클러스터 초기화" [설치 코드]#!/bin/bash # 색상 정의 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' NC='\033[0m' # No Color # 로그 함수 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } log_step() { echo -e "${PURPLE}[STEP]${NC} $1" } # 검증 실패 시 종료 함수 exit_on_error() { log_error "$1" log_error "스크립트를 종료합니다." exit 1 } # 사용자 확인 함수 confirm_continue() { read -p "다음 단계로 진행하시겠습니까? (y/n): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then log_info "사용자가 중단했습니다." exit 0 fi } # 대기 시간 함수 wait_for_service() { local service_name=$1 local max_wait=$2 local count=0 log_info "${service_name} 서비스 시작 대기 중..." while [ $count -lt $max_wait ]; do if systemctl is-active --quiet $service_name; then log_success "${service_name} 서비스가 정상적으로 시작되었습니다." return 0 fi sleep 2 count=$((count + 1)) echo -n "." done echo return 1 } echo "================================================" echo "Kubernetes 컨테이너 런타임 및 클러스터 설치 시작" echo "================================================" # ============================================ # 1. 컨테이너 런타임 설치 (containerd) # ============================================ log_step "======== [1단계] 컨테이너 런타임 설치 ========" log_info "Docker 저장소 추가 중..." yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo log_info "containerd 설치 중..." yum install -y containerd.io-1.6.21-3.1.el9.aarch64 log_info "systemd 데몬 재로드 중..." systemctl daemon-reload log_info "containerd 서비스 활성화 및 시작 중..." systemctl enable containerd systemctl start containerd # containerd 서비스 시작 대기 if ! wait_for_service "containerd" 15; then exit_on_error "containerd 서비스 시작 실패" fi log_info "containerd 기본 설정 생성 중..." containerd config default > /etc/containerd/config.toml log_info "SystemdCgroup 활성화 중..." sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml log_info "containerd 서비스 재시작 중..." systemctl restart containerd # containerd 재시작 후 대기 if ! wait_for_service "containerd" 15; then exit_on_error "containerd 서비스 재시작 실패" fi log_info "======== [1단계] 검증 시작 ========" # containerd 서비스 상태 검증 containerd_status=$(systemctl is-active containerd) if [ "$containerd_status" = "active" ]; then log_success "containerd 서비스 실행 중" else exit_on_error "containerd 서비스 실행 실패: $containerd_status" fi # containerd 부팅 시 활성화 검증 containerd_enabled=$(systemctl is-enabled containerd) if [ "$containerd_enabled" = "enabled" ]; then log_success "containerd 부팅시 활성화 완료" else exit_on_error "containerd 부팅시 활성화 실패: $containerd_enabled" fi # SystemdCgroup 설정 검증 if grep -q "SystemdCgroup = true" /etc/containerd/config.toml; then log_success "SystemdCgroup 설정 완료" else exit_on_error "SystemdCgroup 설정 실패" fi # containerd 버전 확인 containerd_version=$(containerd --version 2>/dev/null | cut -d' ' -f3) if [ -n "$containerd_version" ]; then log_success "containerd 버전: $containerd_version" else exit_on_error "containerd 버전 확인 실패" fi # containerd 실행 테스트 if ctr version >/dev/null 2>&1; then log_success "containerd 실행 테스트 성공" else exit_on_error "containerd 실행 테스트 실패" fi log_success "======== [1단계] 컨테이너 런타임 설치 완료 ========" confirm_continue # ============================================ # 2. Kubernetes 패키지 설치 # ============================================ log_step "======== [2단계] Kubernetes 패키지 설치 ========" log_info "Kubernetes 저장소 추가 중..." 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 log_info "Kubernetes 패키지 설치 중..." log_info "- kubelet (노드 에이전트)" log_info "- kubeadm (클러스터 초기화 도구)" log_info "- 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 log_info "kubelet 서비스 활성화 중..." systemctl enable kubelet log_info "======== [2단계] 검증 시작 ========" # kubelet 서비스 활성화 검증 kubelet_enabled=$(systemctl is-enabled kubelet) if [ "$kubelet_enabled" = "enabled" ]; then log_success "kubelet 부팅시 활성화 완료" else exit_on_error "kubelet 부팅시 활성화 실패: $kubelet_enabled" fi # Kubernetes 패키지 설치 검증 및 버전 확인 if command -v kubelet >/dev/null 2>&1; then kubelet_version=$(kubelet --version | cut -d' ' -f2) log_success "kubelet 설치 완료 - 버전: $kubelet_version" else exit_on_error "kubelet 설치 실패" fi if command -v kubeadm >/dev/null 2>&1; then kubeadm_version=$(kubeadm version -o short) log_success "kubeadm 설치 완료 - 버전: $kubeadm_version" else exit_on_error "kubeadm 설치 실패" fi if command -v kubectl >/dev/null 2>&1; then kubectl_version=$(kubectl version --client -o yaml 2>/dev/null | grep gitVersion | cut -d'"' -f4) log_success "kubectl 설치 완료 - 버전: $kubectl_version" else exit_on_error "kubectl 설치 실패" fi # 버전 일관성 검증 if [[ "$kubelet_version" == *"1.27.2"* ]] && [[ "$kubeadm_version" == *"1.27.2"* ]] && [[ "$kubectl_version" == *"1.27.2"* ]]; then log_success "모든 Kubernetes 패키지 버전 일관성 확인 (v1.27.2)" else exit_on_error "Kubernetes 패키지 버전 불일치" fi log_success "======== [2단계] Kubernetes 패키지 설치 완료 ========" confirm_continue # ============================================ # 3. 클러스터 초기화 # ============================================ log_step "======== [3단계] 클러스터 초기화 ========" log_info "클러스터 초기화 설정:" log_info "- Pod 네트워크 CIDR: 20.96.0.0/16" log_info "- API 서버 주소: 192.168.56.30" log_info "- Kubernetes 버전: v1.27.2" log_warning "클러스터 초기화는 시간이 소요될 수 있습니다 (약 2-5분)..." log_info "kubeadm으로 클러스터 초기화 중..." kubeadm init \ --pod-network-cidr=20.96.0.0/16 \ --apiserver-advertise-address=192.168.56.30 \ --kubernetes-version=v1.27.2 if [ $? -ne 0 ]; then exit_on_error "클러스터 초기화 실패" fi log_success "클러스터 초기화 완료!" log_info "kubectl 사용을 위한 설정 중..." mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config log_info "======== [3단계] 검증 시작 ========" # kubectl 설정 파일 검증 if [ -f "$HOME/.kube/config" ]; then log_success "kubectl 설정 파일 생성 완료" else exit_on_error "kubectl 설정 파일 생성 실패" fi # 클러스터 연결 테스트 log_info "클러스터 연결 테스트 중..." if kubectl cluster-info >/dev/null 2>&1; then log_success "클러스터 연결 테스트 성공" else exit_on_error "클러스터 연결 테스트 실패" fi # 노드 상태 확인 log_info "노드 상태 확인 중..." node_status=$(kubectl get nodes --no-headers | awk '{print $2}') if [[ "$node_status" == *"Ready"* ]] || [[ "$node_status" == *"NotReady"* ]]; then log_success "마스터 노드 등록 완료 (상태: $node_status)" if [[ "$node_status" == *"NotReady"* ]]; then log_warning "노드가 NotReady 상태입니다. Pod 네트워크 설치가 필요합니다." fi else exit_on_error "노드 상태 확인 실패" fi log_success "======== [3단계] 클러스터 초기화 완료 ========" confirm_continue # ============================================ # 4. Pod 네트워크 설치 (Calico) # ============================================ log_step "======== [4단계] Pod 네트워크 설치 (Calico) ========" log_info "Calico Pod 네트워크 설치 중..." log_info "- Calico는 Pod 간 네트워크 통신을 가능하게 합니다" log_info "- 설치 후 노드가 Ready 상태가 됩니다" kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml if [ $? -ne 0 ]; then exit_on_error "Calico 기본 설치 실패" fi kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico-custom.yaml if [ $? -ne 0 ]; then exit_on_error "Calico 커스텀 설정 실패" fi log_success "Calico Pod 네트워크 설치 완료" log_info "마스터 노드에서 Pod 실행 허용 설정 중..." kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane- if [ $? -ne 0 ]; then log_warning "마스터 노드 taint 제거 실패 (이미 제거되었을 수 있음)" else log_success "마스터 노드에서 Pod 실행 허용 설정 완료" fi log_info "======== [4단계] 검증 시작 ========" log_info "Pod 네트워크 구성 요소 확인 중..." log_info "Calico Pod들이 Running 상태가 될 때까지 대기합니다 (최대 3분)..." # Calico Pod 상태 확인 (최대 3분 대기) for i in {1..18}; do calico_pods=$(kubectl get pods -n kube-system -l k8s-app=calico-node --no-headers 2>/dev/null | grep -c "Running") if [ "$calico_pods" -gt 0 ]; then log_success "Calico Pod 실행 중 ($calico_pods개)" break fi if [ $i -eq 18 ]; then log_warning "Calico Pod 상태 확인 시간 초과" fi echo -n "." sleep 10 done # 노드 상태 재확인 (Pod 네트워크 설치 후) log_info "노드 Ready 상태 확인 중..." for i in {1..12}; do node_status=$(kubectl get nodes --no-headers | awk '{print $2}') if [[ "$node_status" == *"Ready"* ]] && [[ "$node_status" != *"NotReady"* ]]; then log_success "노드가 Ready 상태입니다!" break fi if [ $i -eq 12 ]; then log_warning "노드가 아직 NotReady 상태입니다. 시간이 더 필요할 수 있습니다." fi echo -n "." sleep 10 done log_success "======== [4단계] Pod 네트워크 설치 완료 ========" # ============================================ # 5. 편의 기능 설치 # ============================================ log_step "======== [5단계] 편의 기능 설치 ========" log_info "kubectl 자동완성 기능 설치 중..." yum -y install bash-completion log_info "kubectl 별칭 및 자동완성 설정 중..." echo "source <(kubectl completion bash)" >> ~/.bashrc echo 'alias k=kubectl' >> ~/.bashrc echo 'complete -o default -F __start_kubectl k' >> ~/.bashrc log_info "Kubernetes Dashboard 설치 중..." kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml log_info "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 log_success "======== [5단계] 편의 기능 설치 완료 ========" # ============================================ # 최종 검증 및 완료 # ============================================ log_step "======== 최종 클러스터 상태 검증 ========" log_info "전체 클러스터 상태 요약:" echo "================================================" # 클러스터 정보 log_info "클러스터 정보:" kubectl cluster-info --request-timeout=10s 2>/dev/null || log_warning "클러스터 정보 조회 실패" echo "----------------------------------------" # 노드 상태 log_info "노드 상태:" kubectl get nodes -o wide 2>/dev/null || log_warning "노드 상태 조회 실패" echo "----------------------------------------" # 시스템 Pod 상태 log_info "시스템 Pod 상태:" kubectl get pods -n kube-system 2>/dev/null || log_warning "시스템 Pod 상태 조회 실패" echo "----------------------------------------" # 서비스 상태 요약 log_info "핵심 서비스 상태:" echo "- containerd: $(systemctl is-active containerd)" echo "- kubelet: $(systemctl is-active kubelet)" echo "================================================" log_success "========================================" log_success "Kubernetes 클러스터 설치가 완료되었습니다!" log_success "========================================" log_info "다음 명령어로 클러스터 상태를 확인할 수 있습니다:" echo " kubectl get nodes" echo " kubectl get pods -A" echo " kubectl cluster-info" log_info "kubectl 자동완성을 사용하려면 새 터미널을 열거나 다음 명령어를 실행하세요:" echo " source ~/.bashrc" log_info "이제 Kubernetes 클러스터를 사용할 준비가 완료되었습니다!" # join 명령어 추출 및 출력 log_info "======== Worker 노드 추가 정보 ========" log_info "Worker 노드를 추가하려면 다음 명령어를 사용하세요:" if [ -f /tmp/kubeadm-join-command ]; then cat /tmp/kubeadm-join-command else log_info "다음 명령어로 join 토큰을 다시 생성할 수 있습니다:" echo " kubeadm token create --print-join-command" fi이제 2개의 스크립트로 언제든 쿠버네티스를 재구축할 수 있게 되었다.

데브옵스 · 인프라SPG일프로k8sDevOpsSRE

David

[인프런 워밍업 클럽 4기 - DevOPs] 미션 1. 쿠버네티스 설치 구간별 상태 확인

설치 환경칩 : Apple M4 Mac mini메모리 : 16GBmacOS : Sequoia 15.5가상플랫폼 : UTM UTM 설치는https://mac.getutm.app/ 에서 최신 버전을 다운로드 했다.워밍업 스터디가 시작되기 전 강의를 먼저 구매 후 공부중이였기 때문에 이미 한차례 설치를 했지만 추가적으로 복습 겸 설치를 진행 했다. [OS 설치]UTM 실행 -> 새 가상머신 만들기 선택 -> Start(Virtualize 선택) -> Linux 선택 -> 부팅 이미지 (Rocky 9.2)-> 메모리 4096 MB, CPU 4 Cores , 용량은 32GB, 공유 폴더는 선택 안함, -> Summary에서 이름은 ks-master [UTM ›네트워크 설정][Rocky Linux 설정]언어 : 한국어 (대한민국)[시스템]파티션 설정은 자동 구성으로 두고 완료를 선택한다.[KDUMP]Default 값은 활성화 되어 있지만 체크를 해지한다.[네트워크 및 호스트 이름]설정을 누른 후 내용 작성을 진행한다.[사용자 설정 - root 비밀번호]모든 설정이 완료되면 설치 시작(B)를 눌러 설치를 시작한다. (약 4분 소요)...(설치 과정 생략) [iterm을 통한 원격 접속]발생한 메시지는 동일한 IP를 가진 k8s-master 정보가 이미 있기 때문에 호스트 키 불일치를 감지해서 발생했다.이런 경우에는 ssh-keygen -R 명령을 통해 특정 호스트 키만 삭제하고 재접속을 하면 된다.[쿠버네티스 설치 전 환경설정]설치 전 미리 설정이 되어 있는 부분만 별도 스크립트로 작성 및 검증을 하고 쿠버네티스 설치로 넘어간다. 스크립트를 작성한 이유는 재사용성을 위해서 작성했다.[쿠버네티스 설치]

데브옵스 · 인프라KubernetesDevOpsMSAk8s인프런SRE일프로

채널톡 아이콘