공부하기싫어
article thumbnail
Published 2023. 6. 2. 01:33
kubeadm Kubernetes/vanilla k8s

 

목차

     

    모니터링 툴 실습을 위한 바닐라 쿠버네티스 클러스터 구성

    모든 설치는 root 가 아닌 user(ubuntu) 로서 sudo 를 사용함

     

    구성 : docker engine, containerd, calico, kubeadm, kubectl, kubelet

     

     

    master1, worker1

    config master1, worker1
    os ubuntu 22.04 LTS
    type t3a.large
    storage 16gib
    SG allow all traffic
    etc default

    (sample app 을 빠르게 배포 후 테스트 하기 위해 large 선택, 쿠버네티스 최소 스펙은 2cpu, 2GB ram 이상)

     

    user data

    #!/bin/bash
    apt-get upgrade -y 
    apt-get dist-upgrade -y 
    apt-get update -y
    apt update && apt upgrade -y
    apt-get install vim -y

     

    1. 컨테이너 런타임 설치

    node : master1, worker1

    이전 버전 제거

    sudo apt-get remove docker docker-engine docker.io containerd runc
    sudo swapoff /swap.img
    sudo sed -i -e '/swap.img/d' /etc/fstab

     

    k8s 1.24(2022/05) 이후 k8s 에서 기본적으로 내부 연결을 지원해주던 dockershim 이 제거되어

    cri-docker 를 추가 설치하여 docker를 k8s 에 연결하는 작업이 필요

    1.1 도커 설치

    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    sudo systemctl enable --now docker && sudo systemctl status docker --no-pager
    sudo usermod -aG docker worker
    sudo docker container ls

     

    1.2 cri-docker 설치

    VER=$(curl -s https://api.github.com/repos/Mirantis/cri-dockerd/releases/latest|grep tag_name | cut -d '"' -f 4|sed 's/v//g')
    echo $VER
    wget https://github.com/Mirantis/cri-dockerd/releases/download/v${VER}/cri-dockerd-${VER}.amd64.tgz
    tar xvf cri-dockerd-${VER}.amd64.tgz
    sudo mv cri-dockerd/cri-dockerd /usr/local/bin/
    cri-docker --version

    인스턴스 타입에 따라 url 경로 변경 필요

     

    1.3 cri-docker.service

    wget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
    wget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket
    sudo mv cri-docker.socket cri-docker.service /etc/systemd/system/
    sudo sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
    
    sudo systemctl daemon-reload
    sudo systemctl enable cri-docker.service
    sudo systemctl enable --now cri-docker.socket
    # cri-docker Active Check
    sudo systemctl restart docker && sudo systemctl restart cri-docker
    sudo systemctl status cri-docker.socket --no-pager

     

    1.4 docker cgroup 변경

    systemd 사용

    sudo 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
    
    sudo systemctl restart docker && sudo systemctl restart cri-docker
    sudo docker info | grep Cgroup

     

    1.5 kernel forwarding

    # Kernel Forwarding 
    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

     

    2. k8s 설치

    node : master1, worker1

    2.1 설치 관련 다운로드

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
    
    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
    
    sudo apt-get update

     

    2.2 k8s 설치

    # k8s 설치
    sudo apt-get install -y kubelet kubeadm kubectl
    
    # 버전 확인하기
    kubectl version --short
    
    # 버전 고정하기
    sudo apt-mark hold kubelet kubeadm kubectl

    3. Control-plane 초기화

    node : master1

    3.1 kubeadm init

    # Controller Node
    sudo kubeadm config images pull --cri-socket unix:///run/cri-dockerd.sock
    
    sudo kubeadm init --ignore-preflight-errors=all --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=172.31.2.139 --cri-socket /var/run/cri-dockerd.sock
    ## --apiserver-advertise-address=203.248.23.161 -> Controller 서버 IP.
    
    sudo kubeadm join 172.31.2.139:6443 --token hg6dtl.zby5lq1z3zcn70ah \
            --discovery-token-ca-cert-hash sha256:da0298416cbb5fe069541e4e08673d3cb5240db5037c2c2024164285f19b49ca --cri-socket /var/run/cri-dockerd.sock
    
    # kubeadm 을 root 처럼 사용하기 위한 추가 설정
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

     

    확인

    # Token 기억이 안 날 경우
    kubeadm token create --print-join-command
    
    # 서비스 확인 ( Ready , Running ) 
    kubectl get nodes -o wide
    kubectl get pod -A
    
    # Worker Node에서 kubectl 을 사용하려면 admin.conf 를 복사한다
    sudo scp /etc/kubernetes/admin.conf worker@node02:/home/worker/admin.conf
    sudo scp /etc/kubernetes/admin.conf worker@node03:/home/worker/admin.conf

     

    4. Node Join

    node : worker1

    # Worker Node Join. --cri-docker sorket 수동 지정해서 가입해야 한다. 
    init 시 나온 토큰값을 참고한다. 기억이 안 날 경우 커맨드로 확인한다
    
    sudo kubeadm join --token <token> <controlplane-host>:<controlplane-port> --ignore-preflight-errors=all --cri-socket unix:///var/run/cri-dockerd.sock

    워커노드가 Ready 상태로 바뀔때까지 5분정도 소요된다고 함

    5. CNI 설치

    node : master1

    5.1 calico 설치

    kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml
    
    kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml

    5.2 calicoctl 설치

    cd /usr/local/bin
    sudo curl -L https://github.com/projectcalico/calico/releases/latest/download/calicoctl-linux-amd64 -o calicoctl
    sudo chmod +x ./calicoctl
    ## CNI Type Check 
    calicoctl get ippool -o wide
    
    ## Block Check
    sudo calicoctl ipam show --show-blocks
    
    ## BGP Protocol Check
    sudo calicoctl node status
    
    ## Node Endpoint Check
    calicoctl get workloadendpoint -A

    6. Rejoin or Reset

    node : any

    #cleanup
    sudo systemctl stop kubelet
    sudo kubeadm reset -f --cri-socket /var/run/cri-dockerd.sock
    
    sudo rm -rf ~/.kube
    sudo rm -rf /root/.kube
    sudo rm -rf /var/lib/etcd
    sudo rm -rf /etc/kubernetes

     

    node: master1

    kubectl delete -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml
    kubectl delete -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml
    sudo rm -rf /var/run/calico/
    sudo rm -rf /var/lib/calico/
    sudo rm -rf /etc/cni/net.d/
    sudo rm -rf /var/lib/cni/
    sudo rm -rf /opt/cni
    sudo reboot

     

    참고

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

     

    Install Docker Engine on Ubuntu

     

    docs.docker.com

    https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

     

    Installing kubeadm

    This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you have performed this installation process, see the Creating a cluster with kubeadm page. Before you begin A compatible Linux host. The Kuber

    kubernetes.io

    https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/

     

    Configuring a cgroup driver

    This page explains how to configure the kubelet's cgroup driver to match the container runtime cgroup driver for kubeadm clusters. Before you begin You should be familiar with the Kubernetes container runtime requirements. Configuring the container runtime

    kubernetes.io

    https://kubernetes.io/ko/docs/tasks/administer-cluster/network-policy-provider/weave-network-policy/

     

    네트워크 폴리시로 위브넷(Weave Net) 사용하기

    이 페이지는 네트워크 폴리시(NetworkPolicy)로 위브넷(Weave Net)를 사용하는 방법을 살펴본다. 시작하기 전에 쿠버네티스 클러스터가 필요하다. 맨 땅에서부터 시작하기를 위해서 kubeadm 시작하기 안

    kubernetes.io

    https://tech.hostway.co.kr/2022/08/30/1374/

     

    Kubernetes 1.24 + cri-docker Installation ( kubeadm ) - HOSTWAY Tech Blog

    우분투에서 Kubernetes 최신 버전 설치하는 방법입니다.18.04 에서 시험되었으나 상위버전에서도 차이는 없습니다. Controll Node ( node01 ) , Worker Node ( node02 ,node03 ) 3EA 구성입니다.모든 설치는 root 가 아

    tech.hostway.co.kr

     

    'Kubernetes > vanilla k8s' 카테고리의 다른 글

    [kind] kind 설치 - Multi Node (Window)  (0) 2023.05.21
    [kind] kind 설치 - Single Node (Window)  (0) 2023.05.21