참고 블로그: https://www.skyer9.pe.kr/wordpress/?p=8209
k8s Master Node, Worker Node 생성
시스템 업데이트
sudo apt update
sudo sed -i "/#\$nrconf{restart} = 'i';/s/.*/\$nrconf{restart} = 'a';/" /etc/needrestart/needrestart.conf
sudo apt -y upgrade
Swap off <optional>
AWS EC2 인스턴스는 default로 swap을 disable 하여 필요 없다. 선택사항!
sudo swapoff -a && sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
방화벽 off
sudo ufw disable
커널 파라미터 수정
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
보안그룹 설정
allow-kubernetes 라는 이름의 보안그룹을 생성한다.
inbound/outbound 는 설정하지 않는다.
protect-kubernetes 라는 이름의 보안그룹을 생성한다.
inbound 에 아래와 같이 설정한다.
- 유형 : 모든 TCP
- 포트범위 : 0 – 65535
- 소스 : allow-kubernetes
allow-kubernetes, protect-kubernetes 를 모든 master/worker node 에 할당한다.
모든 인스턴스에 도커 설치
sudo apt-get update
sudo apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
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
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo docker version
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl enable containerd
sudo systemctl start containerd
sudo mkdir -p /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 daemon-reload
sudo systemctl restart docker
# cri-docker Install
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 Check
cri-dockerd --version
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
sudo docker info | grep Cgroup
모든 인스턴스에 Kubernetes 설치
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/kubernetes-xenial.gpg
sudo apt-add-repository -y "deb http://apt.kubernetes.io/ kubernetes-xenial main"
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
*여기서 Unable to locate package kubelet, kubeadm, kubectl 에러가 뜬다면 [CI/CD] TroubleShooting 페이지 참조
Control-plane 구성 <MasterNode만 수행>
# sudo kubeadm init
sudo kubeadm init --cri-socket unix:///var/run/cri-dockerd.sock
해당 명령어가 수행되면
토큰이 출력되는데 따로 메모장에 복사해둔다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
위의 명령어들은 sudo 없이 kubectl을 실행할 수 있도록 설정하는 내용이다.
지금은 NotReady 상태이다. 아직 신경쓰지 않아도 된다.
Worker-Node구성 <WorkerNode만 수행>
sudo kubeadm join 10.50.40.116:6443 --token [아까 Master Node에서 옮겨둔 토큰 붙여넣기] \
--discovery-token-ca-cert-hash [아까 Master Node에서 옮겨둔 토큰 붙여넣기] \
--cri-socket unix:///var/run/cri-dockerd.sock
sudo와 --cri-socker을 추가하여 Master Node에 Worker Node #1, #2를 등록한다.
Worker Node에서도 kubectl get nodes로 확인할 수 있다.
*여기서 node 에러가 뜬다면 [CI/CD] TroubleShooting 페이지 참조
Control-plane 구성 <MasterNode만 수행>
Pod network 애드온 설치
# kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
kubectl get nodes
kubectl get pods -n kube-system
'AWS > Project' 카테고리의 다른 글
[CI/CD] TroubleShooting (0) | 2024.06.22 |
---|---|
[CI/CD] 환경 구성 - ECR(Elastic Container Registry) 구성 (0) | 2024.06.22 |
[CI/CD] 환경 구성 - EC2(Jenkins, GitLab) 설치 (0) | 2024.06.22 |
[CI/CD] CI/CD - Jenkins, GitLab 구성 (0) | 2024.06.19 |
Route53 ACM 인증서 요청 (0) | 2024.06.13 |