일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Trino
- Network
- kubectl
- CSV
- zookeeper
- helm
- log
- EC2
- jvm
- Python
- tcp
- kubernetes
- ip
- JavaScript
- kubeadm
- Packet
- airflow
- AWS
- Vision
- OS
- grafana
- PostgreSQL
- java
- aws s3
- MAC address
- Spring
- Kafka
- Operating System
- CVAT
- docker
- Today
- Total
JUST WRITE
AWS EC2 Kubernetes Cluster 설치(1) Kubeadm - containerd 설치 본문
AWS EC2 Kubernetes Cluster 설치(1) Kubeadm - containerd 설치
천재보단범재 2022. 11. 29. 23:58
AWS EC2 Kubernetes Cluster 설치
이번 포스팅에서는 AWS EC2 인스턴스 4개에 Kubernetes Cluster를 구성해보았다.
각 인스턴스는 Ubuntu Sever 22.04에 t3.large로 구성하였다.
1개의 Master와 3개의 Worker로 구성하였다.
Kubernetes Cluster를 구성하는 방법은 여러 가지가 있지만 Kubeadm으로 구성하였다.
Kubernetes Cluster 구성에 첫번째인 containerd 설치에 대해 정리하였다.
준비
containerd 설치 전에 몇가지 설정을 하였다.
- hostname 설정
- swap off
- Kernel Module 추가
hostname 설정
Kubernetes node의 hostname을 설정을 해 주는 것이 좋다.
node별로 monitoring할 때 쉽게 구분할 수 있기 때문이다.
# master 설정
$ sudo hostnamectl set-hostname "k8smaster"
$ hostname
k8smaster
# 각 worker별로 설정
$ sudo hostnamectl set-hostname "k8sworker1"
$ hostname
k8sworker1
그리고 각 host설정을 해준다.
# 각 node별로 설정
$ sudo vi /etc/hosts
${master ip} k8smaster
${worker1 ip} k8sworker1
${worker2 ip} k8sworker2
${worker3 ip} k8sworker3
swap off
Kubernetes Cluster에 쓰이는 node의 swap memory를 쓰지 않도록 off 해준다.
node의 자원(CPU, Memory 등)을 최대한 100% 활용하는 것이 중요하다.
자세한 사항은 아래 Kubernetes Github issue에서 확인할 수 있다.
아래 명령어로 swap off를 할 수 있다.
$ sudo swapoff -a
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Kernel Module 추가
Kubernetes에 필요한 Kernel Module과 Kernel parameter를 추가한다.
# kernel module 추가
$ sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
# kernel module 추가 확인
$ lsmod | grep -E 'br_netfilter|overlay'
br_netfilter 32768 0
bridge 307200 1 br_netfilter
overlay 151552 0
# kernel parameter 추가
$ sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
# 재부팅 없이 kernel parmeter reload
$ sudo sysctl --system
containerd 설치
containerd 설치에 앞서 Kubernetes Cluster node에 필요한 부분을 설정하였다.
이제 containerd를 설치한다.
OS 버전에 맞는 containerd binary 파일을 다운로드한다.
$ wget https://github.com/containerd/containerd/releases/download/v1.6.9/containerd-1.6.9-linux-amd64.tar.gz
$ sudo tar Cxzvf /usr/local containerd-1.6.9-linux-amd64.tar.gz
containerd를 service로 등록한다.
$ sudo mkdir -p /usr/local/lib/systemd/system
$ sudo wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /usr/local/lib/systemd/system/containerd.service
# service 등록
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now containerd
$ systemctl status containerd
● containerd.service - containerd container runtime
Loaded: loaded (/usr/local/lib/systemd/system/containerd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-11-30 14:48:04 UTC; 28s ago
Docs: https://containerd.io
Process: 23185 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 23189 (containerd)
Tasks: 8
Memory: 12.6M
CPU: 243ms
CGroup: /system.slice/containerd.service
└─23189 /usr/local/bin/containerd
Nov 30 14:48:04 k8sworker1 containerd[23189]: time="2022-11-30T14:48:04.675319934Z" level=info msg=serving... address=/run/containerd/>
Nov 30 14:48:04 k8sworker1 containerd[23189]: time="2022-11-30T14:48:04.675401705Z" level=info msg="Start subscribing containerd event"
Nov 30 14:48:04 k8sworker1 containerd[23189]: time="2022-11-30T14:48:04.675473936Z" level=info msg="Start recovering state"
Nov 30 14:48:04 k8sworker1 containerd[23189]: time="2022-11-30T14:48:04.675557757Z" level=info msg="Start event monitor"
Nov 30 14:48:04 k8sworker1 containerd[23189]: time="2022-11-30T14:48:04.675645698Z" level=info msg="Start snapshots syncer"
Nov 30 14:48:04 k8sworker1 containerd[23189]: time="2022-11-30T14:48:04.675664199Z" level=info msg="Start cni network conf syncer for >
Nov 30 14:48:04 k8sworker1 containerd[23189]: time="2022-11-30T14:48:04.675681989Z" level=info msg="Start streaming server"
Nov 30 14:48:04 k8sworker1 containerd[23189]: time="2022-11-30T14:48:04.675989533Z" level=info msg=serving... address=/run/containerd/>
Nov 30 14:48:04 k8sworker1 containerd[23189]: time="2022-11-30T14:48:04.676143995Z" level=info msg="containerd successfully booted in >
Nov 30 14:48:04 k8sworker1 systemd[1]: Started containerd container runtime.
runc와 CNI plugin을 설치한다.
runc와 CNI가 무엇인지는 따로 포스팅하도록 하겠다.
# runc 설치
$ wget https://github.com/opencontainers/runc/releases/download/v1.1.3/runc.amd64
$ sudo install -m 755 runc.amd64 /usr/local/sbin/runc
# CNI plugin 설치
$ wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
$ sudo mkdir -p /opt/cni/bin
$ sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz
마지막으로 containerd를 CRI런타임으로 사용하기 위해 설정을 한다.
config.toml파일을 통해 설정할 수 있다.
아래 SystemdCgroup을 false에서 true로 변경해준다.
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
$ sudo mkdir -p /etc/containerd
$ sudo containerd config default | sudo tee /etc/containerd/config.toml
$ sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
# 설정 변경 후 containerd 재시작
$ sudo systemctl restart containerd
containerd 설치가 완료된다.
이 작업을 Kubernetes Cluster 각 node별로 해준다.
다음 포스팅에서는 Kuberentes Cluster Master와 Worker 세팅을 정리하겠다.
[참고사이트]
'MLOps > Kubernetes' 카테고리의 다른 글
Master Node HA 구성(2) - HAProxy 세팅 (0) | 2023.02.02 |
---|---|
Master Node HA 구성(1) - keepalived 세팅 (0) | 2023.02.01 |
Control Plane Components (0) | 2023.01.21 |
Kubectl auto-completion 세팅 (0) | 2022.12.02 |
AWS EC2 Kubernetes Cluster 설치(2) Kubeadm - Master,Worker 설정 (0) | 2022.12.01 |