-
Kubernetes 설치1 : ~ Kubernetes 설치까지Today_I_Learned/etc 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 disablesudo 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
'Today_I_Learned > etc' 카테고리의 다른 글
Kubernetes 자주 쓰는 명령어 (0) 2021.12.16 VirtualBox로 .vdi -> .qcow2로 변환하기 (0) 2021.10.13 Kubernetes 설치2 : ~ Cluster 구성(Multi Node 구성 : Master / Worker) (0) 2021.09.08 Kubernetes 초보자에게 딱 적절했던 설명 영상 추천 (0) 2021.03.16 IS-IS Protocol 정리 (0) 2021.01.25