쿠버네티스 초기 환경 구축하기

HD.Y·2024년 2월 14일
0

한화시스템 BEYOND SW

목록 보기
51/58
post-thumbnail

🦁 쿠버네티스 초기 환경 구축하기

  • 사전 준비사항 : VMWare 이용 " CentOs 8 " 가상머신 3대 ( IP 설정 ) 설치

    ➡ 이름 : master, worker01, worker02

    ➡ 메모리 및 CPU 설정 후 시작 ( 메모리 : 4GB, CPU : 2개 )
      ➡ 개인 컴퓨터 사양에 따라 다름
      ➡ 설정법 : " Edit virtual machine settings " 에서 설정 ( 가상머신 시작하기 전 )


  • 가상머신 3대 공통 설정

    1) 각 컴퓨터의 이름 지정 : vi /etc/hostname
      ➡ master / worker01 / worker02 로 각각 설정

    2) 호스트 파일 설정 : vi /etc/hosts

      [master IP 주소]	master
      [worker1 IP 주소]	worker01
      [worker2 IP 주소]	worker02

    3) 재부팅 실시 : init 6

      ➡ 정상적으로 설정이 되었다면, Putty로 접속했을 시 각 컴퓨터의 이름이 바뀌어있을
         것이고, 컴퓨터의 이름으로 ping을 보내보면 정상적으로 보내질 것이다.

    4) 방화벽 2개를 모두 해제
      ➡ systemctl stop firewalld
      ➡ 재부팅 시에도 꺼주는 설정 : systemctl disable firewalld

      ➡ setenforce 0
      ➡ 재부팅 시에도 꺼주는 설정 : sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config


    5) 네트워크 브리지 및 iptables 호출 활성화
      ➡ modprobe br_netfilter
      ➡ echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables


    6) 도커 설치
      ➡ yum install -y yum-utils
      ➡ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      ➡ yum-config-manager --enable docker-ce-nightly
      ➡ yum-config-manager --enable docker-ce-test
      ➡ yum install -y docker-ce docker-ce-cli containerd.io --allowerasing


    7) 도커 스토리지 설정파일 수정

    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


    8) 도커 설치를 끝내고, 실행
      ➡ systemctl daemon-reload
      ➡ systemctl restart docker
      ➡ systemctl enable docker


  • 여기서부터 쿠버네티스 설치 시작

    9) 쿠버네티스 클러스터를 구성할 때 필요한 네트워크 설정
    cat <<EOF > /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF

   ➡ 설정이 추가되었는지 확인 : sysctl --system


  10) 쿠버네티스 레포지토리 설치

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

dnf install -y kubelet-1.22.5 kubeadm-1.22.5 kubectl-1.22.5 --disableexcludes=kubernetes

systemctl enable kubelet

systemctl start kubelet


  11) 쿠버네티스 swap 비활성화
   ➡ 이유 : 쿠버네티스는 컨테이너를 메모리에서 동작시켜 효율적으로 관리하기 위해
        사용하는 것인데, swap 메모리는 메모리가 부족할 시 디스크를 이용하여
        부족한 메모리를 대체하도록 하는 것이다.

         swap 메모리를 활성화 시켜놓으면, 메모리 부족 시 하드디스크에서
        컨테이너가 동작토록 되는데 그렇게 되면 서비스의 성능이 저하될 것이다.
        즉, 쿠버네티스를 사용하는 이유가 사라진다.

    ➡ swapoff -a

    ➡ 부팅 설정 파일에서 편집 : vi /etc/fstab
     ➡ /dev/mapper/cs-swap none swap defaults 0 0 주석 처리


  12) 컴퓨터 종료 및 1차 스냅샷 찍기 : sudo poweroff
   ➡ 대시보드 설치 후 스냅샷을 찍으니, 대시보드 오류 시 재설치 시 처음부터 다시
     설치해야되기 때문에, 여기서 한번 끊어주면서 스냅샷을 찍어주는게 좋은 것 같다.


  • 여기까지 하면, 컴퓨터 3대의 공통 설정이 끝난다. 다음은 master 컴퓨터 설정이다.

    1) 쿠버네티스에서 사용할 가상의 네트워크 대역 설정(컴퓨터 IP와 다른 임의의 IP)

      ➡ kubeadm init --pod-network-cidr 100.100.100.0/24

      ➡ 제일 마지막 줄에서 나오는 kubeadm join ~~  부분을 복사해 놓는다.


    2) 쿠버네티스 명령어를 편하게 사용하기 위한 설정
      ➡ mkdir -p $HOME/.kube
      ➡ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      ➡ chown $(id -u):$(id -g) $HOME/.kube/config


    3) 설정이 제대로 됬는 지 확인 : kubectl get nodes
     ➡ 아래 사진처럼 출력되면 된 것이다.


  • 이제부터는 worker01 / 02 컴퓨터에 대한 설정이다.

    1) 위에서 복사해둔 kubeadm join ~~ 을 붙여넣는다.

    2) master 컴퓨터에서 설정이 잘 됬는지 확인한다.
     ➡ kubectl get pod -n kube-system : 1, 2번째 빼고 모두 다 "Running" 이어야 함
     ➡ kubectl get nodes : 컴퓨터 3대 모두 "NotReady" 상태


  • 다시 master 컴퓨터에서의 설정이다.

    1) 네트워크 CNI 설정 ( Calico )
      ➡ curl https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml -O


    2) yml 파일 수정 : vi calico.yaml
      ➡ 줄번호 표시 : :set nu
      ➡ 4931번째 줄로 이동 : :4931
      ➡ 아래처럼 주석을 제거하고, 설정할 IP를 지정해준다.
        ( 주석 제거 시 : # 과 띄어쓰기 1칸까지 지워야함 )

    # - name: CALICO_IPV4POOL_CIDR
     #   value: "192.168.0.0/16"
    
    --------------위 부분을 아래 처럼 주석 제거---------------
    - name: CALICO_IPV4POOL_CIDR
      value: "200.200.200.0/24"


3) 설정한 야멜 파일 적용 : kubectl apply -f calico.yaml

4) 제대로 적용 됬는지 확인

  ➡ kubectl get pod -n kube-system : 모든 컨테이너들이 "Running" 상태

  ➡ kubectl get nodes : 컴퓨터 3대 모두 "Ready" 상태


5) 대시보드 설정
  ➡ wget 설치 : yum install -y wget
  ➡ 대시보드 설치 : wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
  ➡ 야멜 파일 편집 : vi recommended.yaml
    ➡ 45번째 줄에 type: NodePort 추가


6) 야멜 파일 적용 : kubectl apply -f recommended.yaml

7) 443번 포트와 연결된 포트번호 확인

  ➡ kubectl get services -n kubernetes-dashboard


8) 웹브라우저로 대시보드 접속 : https://master 컴퓨터 IP:확인한 포트번호

  ➡ 위처럼, 비공개 설정이 뜨면, 아무대나 마우스 클릭 후 키보드로
    thisisunsafe 입력

  ➡ 그러면 아래처럼 로그인 창이 등장할 것이다.


9) 로그인하기 위한 토큰 생성

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


10) 토큰 확인

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')


11) 출력된 토큰을 입력하여 대시보드 로그인 ( 아래는 로그인 성공 화면 )

12) 모든 컨테이너들이 정상 작동 중인지 확인 : kubectl get pods --all-namespaces

13) 가상머신 컴퓨터를 완전히 종료하고 2차 스냅샷을 찍어둔다. ( 컴퓨터 3대 모두 )
   ( 나중에 문제발생 시 현 상태로 돌아가기 위해 )

14) 대시보드 토큰 타임아웃 설정 끄기 ( 선택 사항 )
  ➡ kubectl edit deployment kubernetes-dashboard -n kubernetes-dashboard
  ➡ 42번째 줄 - --token-ttl=0 추가 후 저장


  • 여기까지 하면 쿠버네티스 설치가 완료 된다.

profile
Backend Developer

0개의 댓글