Kubernetes 설치하기

노재원·2020년 12월 23일
0

Kubernetes

목록 보기
1/8
post-thumbnail

single node cluster 구성

  1. kubeadm, kubectl, kubelet 설치
    - br_netfilter 설정

    sudo modprobe br_netfilter ##br_netfilter 활성화
    lsmod | grep br_netfilter ##br_netfilter 확인

    - iptable 설정

    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

    - swap 모드 끄기

    sudo swapoff -a

    - countainer runtime 설치(docker)

    sudo apt install docker.io

    - kubeadm, kubelet, kubectl 설치

    sudo apt-get update && sudo apt-get install -y apt-transport-https curl
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
    deb https://apt.kubernetes.io/ kubernetes-xenial main
    EOF
    sudo apt-get update
    sudo apt-get install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl
  2. Single Cluster 설정
    - Initialize control plane

    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    ### kubeadm init이 끝난 후
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    - Flannel(Pod network add-on) 설치

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    - 만약 network add-on이 제대로 설치가 안됐을 경우

    kubelet에서 default cgroup driver로 systemd를 사용하고 있지만 docker에서는 cgroupfs인 경우가 있다. 이는 kubelet과 docker 버전에 따라 상이하다. 어떤 cgroup driver를 써도 크게 상관없지만, 저 둘의 cgroup driver를 일치시켜줘야 한다. 아래는 docker를 systemd로 변경하고 있다.

    sudo docker info | grep -i cgroup ## docker cgroup driver 확인
    sudo vi /usr/lib/systemd/system/docker.service
    ## "ExecStart"로 시작하는 라인을 찾은 후에 아래 문구로 변경
    ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd
    ###
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    sudo docker info | grep -i cgroup ## systemd로 바뀌어 있을 것
    ### 다시 kubeadm init부터 진행하면 성공될 것이다.

    - Control plane node isolation

    kubectl taint nodes --all node-role.kubernetes.io/master-

    이제 control plane에서도 pod를 스케쥴링할 수 있게 된다.

재접속 후 k8s가 동작하지 않을 때

  • 현상

    kubectl get nodes
    => The connection to the server :6443 was refused - did you specify thi right host or port?

  • 해결방법
    sudo swapoff -a
    strace -eopenat kubectl version

0개의 댓글