K8s

박형준·2024년 5월 7일

*쿠버네티스 ( k8s )

☸ Kubernetes는 컨테이너화된 애플리케이션을 쉽게 관리하기 위한 오픈소스 플랫폼이다.

-쿠버네티스 (Kubernetes, K8s)
-오픈 소스 (Open Source) 시스템
-컨테이너 오케스트레이션 (Container Orchestration) 이라고 불린다.
-과거 구글에 의해 설계되었고 현재 리눅스 재단에 의해 관리.


쿠버네티스 설치

*설치에 필요한 우분투 22.04 LTS
-VMware사용 설치 진행. 3대 필요

  1. 저장소 설정
  2. 도커엔진 설치
  3. 쿠버네티스 설치
  4. kubelet, kubeadm, kubectl 설치 ( master, node1,2 구분지어 설치 진행 )
  5. 컨트롤 패널 구성( master에 만 )
  6. pod network ( 마스터에만 )
  7. worker node 구성( node1, node2 )
  8. 마스터와 워커 노드 연결 시키기.

우분투 설치할 때

  • vm 네트워크 에디터 설정

-시스템 사양 / network : NAT

  • master : CPU-2, RAM-4G, HDD-40G 고정IP(192.168.10.100/24), gateway( 192.168.10.2 ), dns (8.8.8.8)
  • node1, 2 : CPU-2, RAM-2G, HDD-40G 고정IP(192.168.10.10, 20/24), gateway( 192.168.10.2 ), dns (8.8.8.8)

-hostname 설정 master, node1, node2

-hosts 에 모두 등록

  • vi /etc/hosts
    192.168.10.100 master master.example.com
    192.168.10.10 node1 node1.example.com
    192.168.10.20 node2 node2.example.com

-SSH접속 / 스냅샷 꼭

-우분투 설치시 패스워드는 1234로 통일 사용자 생성시 ubuntu/1234

-설치후 apt-get -y update 및 apt-get insall -y openssh-server


*설치 과정 기술문서
https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-using-native-package-management

1) 저장소 설정
-업데이트

-저장소 등록

  • echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

저장소 설정 ( apt 업데이트 )

  • apt-get install -y ca-certificates curl gnupg lsb-release
  • Docker 저장소를 APT (Advanced Package Tool)의 소스 리스트에 추가하는 작업을 수행 ( echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null )

2) 도커엔진 설치

  • #apt-get update
    #apt-get install -y docker-ce docker-ce-cli containerd.io
    #docker version 으로 설치 확인 및 버전 확인

  • 도커 서비스 등록
    systemctl enable docker
    systemctl start docker

도커 엔진 설치

  • apt-get update
  • apt-get install -y docker-ce docker-ce-cli containerd.io
  • docker version으로 확인 ( 26.1.1 )

도커 서비스 등록

  • systemctl start docker
  • systemctl enable docker

3) 쿠버네티스 설치

  • 메모리 스왑설정
    swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
  • iptables 설정

    • cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
      br_netfilter
      EOF
    • cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      EOF
  • 방화벽 끄기
    ufw disable

서로 통신되기 위한 iptable 설정

  • cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
  • cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
  • sysctl --system 으로 확인

방화벽 끄기

  • ufw disable

4) kubelet, kubeadm, kubectl 설치

  • #apt-get update
    #apt-get install -y apt-transport-https ca-certificates curl

  • 구글 퍼블릭 키 다운로드
    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    ⇒ 에러 안뜨고 무소식이면 됨

  • gpg 및 리스트 내용 추가
    echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list

  • #apt-get update
    #apt-get install -y kubelet kubeadm kubectl
    #apt-mark hold kubelet kubeadm kubectl

⇒ 노드 1, 2 도 여기까지 진행.

kubelet, kubeadm, kubectl 설치 ( 업데이트 및 ca 패키지 다운로드 )

  • apt-get update
  • apt-get install -y apt-transport-https ca-certificates curl
  • Kubernetes의 공식 GPG 키를 다운로드하여 APT 패키지 관리자에 등록 ( curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg )
  • Kubernetes 저장소를 APT (Advanced Package Tool)의 소스 리스트에 추가하는 작업을 수행 ( echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list )
  • sudo apt-get update
    sudo apt-get install -y kubectl kubeadm kubelet
    sudo apt-mark hold kubectl kubeadm kubelet

-systemd 와 cgroup 설정 맞추기

  • #mkdir /etc/docker 디렉토리 생성 있으면 삭제 하고 생성해도되고, 그냥 사용 해도됨.

    • 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
  • #systemctl daemon-reload

  • #systemctl restart kubelet

+++여기 까지가 3대 모두 설정 하기 +++

systemd 와 cgroup 설정 맞추기

  • ls /etc/docker/ 아무것도 없는 것 확인 후 들어가서 json파일 생성
  • systemctl daemon-reload
  • systemctl restart kubelet ( node1과 node2는 여기까지 설정 )

5) 컨트롤 패널 구성( master에 만 )

  • #kubeadm init ⇒ 실행시 에러뜨면
    • root@master:~# rm /etc/containerd/config.toml
      root@master:~# systemctl restart containerd
    • root@master:~# kubeadm init ⇒ 설치 되면서 토큰이 보이면 메모 (토큰을 노드에 등록)
      • kubeadm join 192.168.10.100:6443 --token hqs9oc.mgkdx9yt28lmpmek \
        --discovery-token-ca-cert-hash sha256:8d804bc9714b4b720004f5f50124f0eab9ebcd461292be7566b15a4e392e7c50

-여러 사용자가 쿠버네티스 명령어 사용 할 수 있도록 설정 ⇒ 생략해도됨.

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

컨트롤 패널 구성( master에 만)

  • rm /etc/containerd/config.toml
  • systemctl restart containerd
  • kubeadm init ( 설치되는 것 확인 후 토큰 메모 )
  • 쿠버 토큰 ( kubeadm join 192.168.10.100:6443 --token gelvqt.c8xqmcehj2smr31x \
    --discovery-token-ca-cert-hash sha256:f44a58b6fe322fa1c5a6fb8bf978d423830838e4b2552fb9e2dfd356eccb49c0 , 노드와 연결 역할 )

여러 사용자가 쿠버네티스 명령어 사용 할 수 있도록 설정

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

6) pod network 애드온 ( master에 만 )

pod network 애드온 ( master에 만)

7) worker node 구성( node1, node2 )

  • root@node1:~# kubeadm reset

  • node1 / node2 에서
    /etc/containerd 로 가서 파일 config.toml 파일 삭제
    systemctl restart containerd

    • 토큰 다시 붙여넣기

    • 마스터에서 kubectl get pods

    • root@master:~# service kubelet restart

쿠버 토큰을 이용해서 연결 ( node1, node2 )

  • /etc/containerd 에서 config.toml 삭제 후 systemctl restart containerd
  • 복사한 쿠버 토큰 입력 ( kubeadm join 192.168.10.100:6443 --token gelvqt.c8xqmcehj2smr31x \
    --discovery-token-ca-cert-hash sha256:f44a58b6fe322fa1c5a6fb8bf978d423830838e4b2552fb9e2dfd356eccb49c0 )
  • master에서 kubectl get pods와 kubectl get nodes 확인

centos 설치

-k8sNetwork (포트 포워딩)

-hosts 에 모두 등록

  • vi /etc/hosts
    • 192.168.10.100 master master.example.com
      192.168.10.101 node1 node1.example.com
      192.168.10.102 node2 node2.example.com

CPU-2, RAM-4G, HDD-40G
-CentOS8 설치 / GUI / KDUMP 해제, 네트워크 켜기

  • master만 설치 후에 ssh 접속확인 후에 /etc/hosts 파일에 등록하고 스냅샷

  • #setenforce 0
    #sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #swapoff -a #sed -i '/ swap / s/^\(.*\)/#\1/g' /etc/fstab
    #systemctl disable firewalld
    #systemctl stop firewalld
  • #sysctl --system

  • #systemctl start docker
    #yum -y install docker-ce docker-ce-cli
    #curl -s https://get.docker.com | sudo sh
    #systemctl enable docker
    #systemctl start docker
  • #service docker restart
    #yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    #rm /etc/containerd/config.toml
    #systemctl restart containerd
  • #kubeadm init
  • #mkdir -p $HOME/.kube
    • #cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • #chown (idu):(id -u):(id -g) $HOME/.kube/config
  • #systemctl enable kubelet
    #systemctl start kubelet
    #kubeadm version -o short
  • #kubectl get nodes

=========== 복제 ============
-호스트 이름 변경 / -IP 변경 / -3대 핑 테스트 및 외부 핑 테스트


⇒ 드라이브에 있는 이미지 사용시 복제하고 여기부터 진행 하면됨.
*마스터 토큰을 노드에 등록 ( 토큰의 유효기간 24시간 )
⇒24시간이 지나면 토큰을 새로 발급 받아서 등록

*토큰을 새로 발급 받기

  • [root@master ~]# kubeadm reset
    #kubeadm init --apiserver-advertise-address=192.168.10.100 --pod-network-cidr=172.16.0.0/16
    • ⇒ 토큰 복사 하고

토큰 발급 받아서 등록

  • kubeadm reset ( 마스터와 노드1, 2 )
  • #kubeadm init --apiserver-advertise-address=192.168.10.100 --pod-network-cidr=172.16.0.0/16 ( 마스터에서 토큰 발급 )
    • #mkdir -p $HOME/.kube
    • #cp -i /etc/kubernetes/admin.conf $HOME/.kube/config ⇒ y 엔터
    • #chown (idu):(id -u):(id -g) $HOME/.kube/config
  • #kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
  • #kubectl get nodes ( 마스터에서 )

*노드는

  • #kubeadm reset하고 토큰 붙여넣기

*마스터에서

  • #kubectl get nodes 하면 모두 Ready

마스터와 노드 연결 확인

  • 토큰 복사 후 노드1, 2에 붙여넣기 ( kubeadm join 192.168.10.100:6443 --token ckdqen.cq1mv48he82k2gyc \
    --discovery-token-ca-cert-hash sha256:0ee88af9a32be5a80ef5a2136db6639ad373036ee2b43a8d3a5cf3ac931f3eb6 )
    • #kubectl get nodes ( 마스터에서 )

0개의 댓글