ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes 설치1 : ~ Kubernetes 설치까지
    Today_I_Learned/Kubernetes 2021. 9. 8. 17:35

    1. ubuntu 설치 : VM 이든 뭐든

    1) VM의 경우
    CPU 2, MEM 3G 으로 구성

     

    2. Container Runtime 설치

    Docker 설치 : https://docs.docker.com/engine/install/ubuntu/ (2022.07.20, Kubernetes 1.20부터 Docker 를 지원하지 않으며 v1.24 부터는 dockershim도 기본으로 제공하지 않음. 따라서 Docker를 Container Runtime으로서 필수 설치할 필요는 사라지게 됨.)

    더보기
    # apt list update
    sudo apt-get update
    
    # docker 설치에 필요한 패키지 설치
    sudo apt-get install -y \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
    
    # Docker 공식 GPG Key를 현재 서버에 추가
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    
    # /etc/apt/sources.list에 Docker stable repository 추가
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    sudo apt-get update
    
    # docker 설치
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    
    sudo systemctl enable docker
    sudo systemctl start docker

     

    cgroup 관련 설정법 - 2022.07.13, ubuntu 22.04, docker version 20.10.17, build 100c701 기준, docker info 로 조회 시 docker의 cgroup이 systemd로 확인되므로 생략 가능

    cgroup이라 부르는 프로세스의 리소스를 관리/제한하는 도구가 있는데

    docker와 kubelet의 default cgroup이 서로 다르면 kublet 실행 시 Error가 발생한다.  kubernetes v1.22.1에서 kubelet은 'systemd'를, docker는 cgroupfs를 default cgroup으로 사용한다. - 확인 : sudo docker info

    #!!!!!!!!!!!!!!!!!영상에 안나오는 부분 (ubuntu-cloud-20.04, K8s-v1.22.1 기준)!!!!!!!!!!!!!!!!!!!
    #!!!!!!!!!!!!!!!!!(참고:https://www.whatwant.com/entry/Kubernetes-Install)!!!!!!!!!!!!!!!!!!!!!!
    sudo nano /etc/docker/daemon.json
    {
        "exec-opts": ["native.cgroupdriver=systemd"],
    
        "log-driver": "json-file",
    
        "log-opts": {
            "max-size": "100m"
        },
        "storage-driver": "overlay2"
    }
    
    sudo systemctl enable docker
    sudo systemctl start docker

    따라서 /etc/docker/daemon.json 에 docker의 cgroup을 systemd로 변경하는 내용을 추가해야한다. (통일해줘야 하는 이유는 다음 Link 참고: https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/)

    내 경우 출력되었던 Error message들은 다음과 같다.

    It seems like the kubelet isn't running or healthy.
    [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp 127.0.0.1:10248: connect: connection refused.

    ....

    Unfortunately, an error has occurred:
                    timed out waiting for the condition

            This error is likely caused by:
                    - The kubelet is not running
                    - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

    ....

    실제로 'sudo systemctl status kubelet'으로 확인해보면 status가 activating이나 inactive로 뜬다.

     

    3. Kubernetes 설치 : https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
    1) swap disable

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


    2) config 저장 (의미는 잘 모름..ㅎ) -> 2022.07.19 Kubernetes 공식 문서에서 해당 작업 삭제되었으므로 생략되어도 무방할 것으로 판단함.

    # 자세한 의미는 모르지만 K8s 사용에 요구되는 Network 설정
    
    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
    
    sudo sysctl --system


    3) 방화벽 해제 : 일반적으로 K8s의 control plane에는 방화벽 실행하지 않는다.
    영상에서 firewall이라는 Proccess를 비활성화해야 한다고 하는데 내가 사용한 ubuntu-cloud-20.04 img에는 firewall 설치기 안되어 있어서(영상과 같은 상황) 해당 과정은 skip했다. (ufw도 disable할 필요 없음.)

     

    4) 필요한 Port 열기

    사용할 Network Plugin에 따라 요구되는 Port 번호가 다르다. 사용할 Networl Plugin 의 공식 문서를 참고하여 필요한 Port 는 전부 Open 할 것.

    # Debian
    nc 127.0.0.1 6443
    
    # CentOS
    ?


    5) kubeadm, kubelet, kubectl 설치

    # k8s apt repository를 사용하는데 필요한 패키지 인덱스와 패키지 설치
    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
    # Google Cloud의 공인 singing key 다운 받기. (주의!! : ~apt-key.gpg 까지 전부 한 줄임!!)
    sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
    
    # k8s repository 추가
    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
    # k8s 설치
    sudo apt-get update
    sudo apt-get install -y kubelet kubeadm kubectl (kubernetes-cni)
    
    # 다음 패키지들이 자동으로 upgrade,제거 되지 않도록 고정(hold) - 선택사항
    sudo apt-mark hold kubelet kubeadm kubectl
    
    sudo systemctl daemon-reload
    sudo systemctl enable kubelet
    sudo systemctl restart kubelet

     

    여기까지의 과정을 Control Plane, Worker Node 로 사용할 PC들에 공통적으로 수행 하면 된다.

     

    참고 ) 따배쿠, Docker docs, Kubernetes 공식 문서

    https://www.youtube.com/watch?v=lheclzO-G7k&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=4

     

    https://docs.docker.com/engine/install/ubuntu/

     

    Install Docker Engine on Ubuntu

     

    docs.docker.com

    https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

     

    Install and Set Up kubectl on Linux

    Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.23 client can communicate with v1.22, v1.23, and v1.24 control planes. Using the latest compatible version of kubectl helps avoid

    kubernetes.io

     

    댓글

Designed by Tistory.