[Kubernetes] Kubernetes AWS Linux 2023 설치
in Kubernetes on Kubernetes
- Kubernetes 클러스터
Kubernetes 클러스터
- AMI: Amazon Linux 2023 AMI
- 인스턴스 유형: t3.medium 선택
- 구성: 동일 스팩으로 master 1대 worker 2대
- 스토리지 추가: 기본 8GB를 50GB로 변경
- 보안 그룹 구성: SSH(22), Kubernetes API Server(6443), etcd(2379-2380), kubelet(10250), HTTP(80), HTTPS(443) 포트 열기
EC2 인스턴스 접속
ssh -i "<key-pair>.pem" ec2-user@<ec2-public-ip>
1. 시스템 준비 (마스터/워커)
1.1. 시스템 업데이트
sudo dnf update -y
1.2. 필요한 패키지 설치
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
2. 브리지 네트워크 설정 확인 및 변경 (마스터/워커)
2.1. 모듈 로드
sudo modprobe br_netfilter
2.2. sysctl 설정
sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
2.3. sysctl 적용
sudo sysctl --system
3. IP 포워딩 설정 확인 및 변경 (마스터/워커)
3.1. sysctl 설정
sudo tee -a /etc/sysctl.d/k8s.conf <<EOF
net.ipv4.ip_forward = 1
EOF
3.2. sysctl 적용
sudo sysctl --system
4. Containerd 설치 및 설정 (마스터/워커)
4.1. Docker 설치(마스터/워커)
# 시스템 업데이트 및 Docker 설치
sudo dnf update -y
sudo dnf install docker -y
sudo systemctl start docker
sudo systemctl enable docker
# Docker 그룹에 ec2-user를 추가하여 Docker 명령을 루트 권한 없이 사용할 수 있게 한다.
sudo usermod -aG docker ec2-user
# 사용자 계정을 다시 로드한다.
newgrp docker
4.2. Containerd 설치
sudo dnf install -y containerd
4.3. 기본 설정 파일 생성
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
4.4. Systemd cgroup 사용 설정
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
4.5. Containerd 서비스 재시작
sudo systemctl restart containerd
sudo systemctl enable containerd
5. Kubernetes 설치 (마스터/워커)
5.1. Kubernetes 패키지 저장소 추가
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.26/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.26/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
5.2. kubeadm, kubelet, kubectl 설치
sudo dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
6. Kubernetes 클러스터 초기화 (마스터)
6.1. 클러스터 초기화
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
6.2. kubeconfig 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
7. 네트워크 플러그인 설치 (마스터)
7.1. Flannel 설치
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
8. 워커 노드에서 클러스터 조인 (워커)
8.1. 마스터 노드에서 출력된 kubeadm join 명령어 사용
마스터 노드 초기화서 token과 hash정보를 볼 수 있다.
sudo kubeadm join <master-node-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
9. 워커 노드 상태 확인 (마스터)
9.1. 노드 상태 확인
kubectl get nodes
10. 대시보드 설치 (마스터)
10.1. 쿠버네티스 대시보드 설치
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
10.2. Admin 사용자 생성
대시보드에 접근하기 위한 Admin 사용자와 역할을 생성해야 한다.
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF
10.3. 클러스터 역할 바인딩 생성
admin-user에 클러스터 관리자 권한을 부여하기 위해 클러스터 역할 바인딩을 생성
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
10.4. 토큰 가져오기
kubectl -n kubernetes-dashboard create token admin-user
10.5. 대시보드 접근
# 포트 포워딩 설정
kubectl port-forward -n kubernetes-dashboard svc/kubernetes-dashboard 9090:443
# 또는 백그라운드 실행
nohup kubectl port-forward -n kubernetes-dashboard svc/kubernetes-dashboard 9090:443 > port-forward.log 2>&1 &
# 중지 아래 확인후 (kill -9 <id>)
ps aux | grep 'kubectl port-forward'
# 로컬 컴퓨터에서 SSH 터널링 설정
ssh -i <key>.pem -L 9090:localhost:9090 ec2-user@<퍼블릭ip>
로컬 브라우저에서 대시보드 접근
접속시 NET::ERR_CERT_INVALID 뜰 경우 브라우저 아무곳 클릭후 thisisunsafe 입력(영문 확인)