DevOps/Kubernetes

Kubernetes PC에 설치해보기

yscho03 2021. 11. 14. 15:15
728x90
반응형

설치 환경 구성

HOST IP Address arch CPU Memory OS
master.example.com 10.100.0.104 X86_64 2core 4GiB Ubuntu 20.04.3 LTS
node1.example.com 10.100.0.101 X86_64 2core 4GiB Ubuntu 20.04.3 LTS
node2.example.com 10.100.0.102 X86_64 2core 4GiB Ubuntu 20.04.3 LTS

 

1. Docker 설치하기

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

저장소 설정

  1. 설치 가능한 패키지 리스트 업데이트
    root@master:~# apt-get update
    ...
    내려받기 5,956 k바이트, 소요시간 22초 (276 k바이트/초)                                                                                                                                                                            
    패키지 목록을 읽는 중입니다... 완료​
  2. 필요 패키지 curl, gnupg, lsb-release 설치하기
    guru@master:~$ sudo apt-get install -y \
    > ca-certificates \
    > curl \
    > gnupg \
    > lsb-release
    패키지 목록을 읽는 중입니다... 완료
    의존성 트리를 만드는 중입니다
    ...
    Updating certificates in /etc/ssl/certs...
    0 added, 0 removed; done.
    Running hooks in /etc/ca-certificates/update.d...
    done.​
  3. Docker의 공식 GPG 키 추가
    guru@master:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg​
  4. Docker Repository 설정
    guru@master:~$ 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​

Docker Engine 설치

  1. 최신 버전 의 Docker Engine 및 containerd 설치하기
    guru@master:~$ sudo apt-get install -y docker-ce docker-ce-cli containerd.io
    패키지 목록을 읽는 중입니다... 완료
    의존성 트리를 만드는 중입니다       
    상태 정보를 읽는 중입니다... 완료​
  2. Docker cgroup systemd 로 맞추어주기
    guru@master:~$ cat > /etc/docker/daemon.json <<EOF
    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    EOF
    guru@master:~$ systemctl restart docker
    설정이유 : docker 의 기본 cgroup-driver 는 cgroupfs 이고, kubelet 의 기본 cgroup-driver 는 systemd 라서 두 개의 다른 cgroup 관리자가 존재하게 되어, Initial timeout of 40s passed. 같은 오류가 발생하게 된다. 
  3. Docker 설치 확인하기
    guru@master:~$ sudo docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES​

 

2. kubernetes 설치하기

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

설치 전 환경설정

  1. Swap Off 시키기
    guru@master:~$ free -h
                  total        used        free      shared  buff/cache   available
    Mem:          3.8Gi       238Mi       3.0Gi       1.0Mi       603Mi       3.4Gi
    스왑:       1.5Gi          0B       1.5Gi
    guru@master:~$ sudo swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
    root@master:~# free -h
                  total        used        free      shared  buff/cache   available
    Mem:          3.8Gi       227Mi       3.0Gi       1.0Mi       604Mi       3.4Gi
    스왑:          0B          0B          0B​
  2. iptables가 브릿지 설정된 트래픽을 보도록 허용 (Letting iptables see bridged traffic)
    root@master:~# cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    > br_netfilter
    > EOF
    br_netfilter
    root@master:~# cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    > net.bridge.bridge-nf-call-ip6tables = 1
    > net.bridge.bridge-nf-call-iptables = 1
    > EOF
    root@master:~# sudo sysctl --system​
  3. 방화벽 비활성화 시키기 (firewall off)
    root@master:~# ufw disable
    방화벽이 비활성 되었으며 시스템이 시작할 때 사용되지 않습니다​

kubeadm, kubelet and kubectl 설치

  1. 필요 패키지 apt-transport-https ca-certificates curl 설치하기
    root@master:~# apt-get update
    ...
    내려받기 5,956 k바이트, 소요시간 22초 (276 k바이트/초)                                                                                                                                                                            
    패키지 목록을 읽는 중입니다... 완료
    
    root@master:~# apt-get install -y apt-transport-https ca-certificates curl
    패키지 목록을 읽는 중입니다... 완료
    의존성 트리를 만드는 중입니다       
    상태 정보를 읽는 중입니다... 완료
    ...
    kubeadm (1.22.3-00) 설정하는 중입니다 ...
    Processing triggers for man-db (2.9.1-1) ...​
  2. Google Cloud 공개 서명 키를 다운로드 (Download the Google Cloud public signing key)
    root@master:~# sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg​
  3. Kubernetes Repository 추가하기
    root@master:~# 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​
  4. apt패키지 인덱스를 업데이트 하고 kubelet, kubeadm 및 kubectl을 설치
    root@master:~# apt-get update
    ...
    내려받기 60.3 k바이트, 소요시간 2초 (39.7 k바이트/초)
    패키지 목록을 읽는 중입니다... 완료
    
    root@master:~# apt-get install -y kubelet kubeadm kubectl
    패키지 목록을 읽는 중입니다... 완료
    의존성 트리를 만드는 중입니다       
    상태 정보를 읽는 중입니다... 완료
    다음의 추가 패키지가 설치될 것입니다 :
    ...
    kubeadm (1.22.3-00) 설정하는 중입니다 ...
    Processing triggers for man-db (2.9.1-1) ...​
  5. kubelet kubeadm kubectl 패키지 버전 홀드하기
    root@master:~# apt-mark hold kubelet kubeadm kubectl
    kubelet 패키지 고정으로 설정.
    kubeadm 패키지 고정으로 설정.
    kubectl 패키지 고정으로 설정.​
  6. bash shell (TAB 키 이용해서 사용) - 링크: https://kubernetes.io/docs/reference/kubectl/cheatsheet/
    source <(kubectl completion bash)
    echo "source <(kubectl completion bash)" >> ~/.bashrc​

클러스터 구성

  1. 마스터 노드에서 초기화 실행
    root@master:~# kubeadm init
    root@master:~# mkdir -p $HOME/.kube
    root@master:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    root@master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    # 해당 토큰 결과 저장해두기
    root@master:~# cat > token.tx
    kubeadm join 10.100.0.104:6443 --token kmi1b1.a623... \
    	--discovery-token-ca-cert-hash sha256:ac5...
    <Ctrl>+<d>​
  2. 마스터 노드에서 weave넷 설치
    root@master:~# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
    serviceaccount/weave-net created
    clusterrole.rbac.authorization.k8s.io/weave-net created
    clusterrolebinding.rbac.authorization.k8s.io/weave-net created
    role.rbac.authorization.k8s.io/weave-net created
    rolebinding.rbac.authorization.k8s.io/weave-net created
    daemonset.apps/weave-net created​
  3. 각 워커 노드에서 master 노드 join 실행
    root@node1:~# kubeadm join 10.100.0.104:6443 --token kmi1b1.a623... --discovery-token-ca-cert-hash sha256:ac5...
    [preflight] Running pre-flight checks
    [preflight] Reading configuration from the cluster...
    [preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
    [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
    [kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
    [kubelet-start] Starting the kubelet
    [kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
  4. 마스터 노드에서 잘 연결되었는지 노드 확인하기
    root@master:~# kubectl get nodes
    NAME                 STATUS   ROLES                  AGE     VERSION
    master.example.com   Ready    control-plane,master   2d16h   v1.22.3
    node1.example.com    Ready    <none>                 2d16h   v1.22.3
    node2.example.com    Ready    <none>                 2d16h   v1.22.3
    root@master:~# su guru
728x90
반응형