쟝이의 세상
AWS EKS 클러스터와 Kubernetes 노드에서 kubelet 설정 본문
📌 eksctl / kubectl / kubeadm / kubelet 다운로드
✔️ eksctl 다운로드 (ec2-user에서 실행)
$ curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
- eksctl 파일 이동
$ sudo mv /tmp/eksctl /usr/local/bin

✔️ kubectl 다운로드 (ec2-user에서 실행)
$ cd /usr/local/bin
$ sudo curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/kubectl
- kubectl 파일에 실행권한 부여
$ sudo chmod +x ./kubectl
- 디렉터리 생성, 파일 복사, 환경변수 추가
$ sudo mkdir -p $HOME/bin && sudo cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin

✔️ kubeadm 바이너리를 다운로드 (jihyang(생성한 username) 또는 root에서 실행)
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubeadm"
- kubeadm 파일에 실행권한 부여
$ chmod +x kubeadm
- root 사용자로 전환하여 kubeadm 파일 이동
$ su -
mv /home/jihyang/kubeadm /usr/local/bin/
✔️ kubelet 바이너리를 다운로드 (jihyang(생성한 username) 또는 root에서 실행)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubelet"
- kubelet 파일에 실행권한 부여
chmod +x kubelet
- kubelet 파일 이동
mv kubelet /usr/local/bin/
✔️ /usr/local/bin/내의 모든 파일 소유권 변경
chown jihyang:jihyang /usr/local/bin/kubeadm
chown jihyang:jihyang /usr/local/bin/kubelet
chown jihyang:jihyang /usr/local/bin/kubectl
chown jihyang:jihyang /usr/local/bin/eksctl

📌 EKS 클러스터에 kubelet 설청 (kubernetes 노드와 API 서버 간의 통신을 가능하도록)
✔️ kubelet 서비스 → 시스템에 등록
- 디렉터리 생성
mkdir -p /etc/systemd/system/kubelet.service.d/
- 서비스 파일 작성
sudo tee /etc/systemd/system/kubelet.service <<EOF
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/
[Service]
ExecStart=/usr/local/bin/kubelet --config /etc/kubernetes/kubelet-config.yaml
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
ExecStart 부분 설명
: kubelet을 /usr/local/bin/kubelet에서 실행, 설정 파일 경로로 /etc/kubernetes/kubelet-config.yaml 지정
- kubelet 서비스 활성화
systemctl daemon-reload
systemctl enable --now kubelet
- AWS EKS 클러스터와 연결
aws eks update-kubeconfig --name k8s_cluster
로컬의 kubeconfig 파일을 업데이트하여 EKS 클러스터와의 연결을 설정
→ 이를 통해 kubectl 명령어 사용하여 EKS 클러스터에 접근 가능
⚠️ 오류 발생
aws eks update-kubeconfig --name k8s_cluster
An error occurred (AccessDeniedException)
when calling the DescribeCluster
operation: User:
arn:aws:sts::522814727447:assumed-role/s3fullaccess/i-008c3ab8786076ce5
is not authorized to perform: eks:DescribeCluster on resource:
arn:aws:eks:ap-northeast-2:522814727447:cluster/k8s_cluster
→ 사용자가 EKS 클러스터에 대한 DescribeCluster 권한이 없음
AWS CLI를 사용하는 IAM 역할(s3fullaccess) 또는 사용자에 eks:DescribeCluster 권한이 포함되어 있는지 확인하기!
<<해결하기>>

eks_DescribeCluster 정책에 들어가 연결된 엔터티 > 연결 버튼 클릭 후 s3fullaccess 연결해주기
✔️ Kubernetes 클러스터에 kubelet 구성하기 위한 단계
- 디렉터리 생성
(Kubernetes 구성 파일을 저장하는 표준 위치)
mkdir -p /etc/kubernetes
- kubelet 구성 파일 생성
cd /etc/kubernetes/
vi kubelet-config.yaml
👇🏻 kubelet-config.yaml 파일 내용
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
authentication:
anonymous:
enabled: false
authorization:
mode: Webhook
cgroupDriver: systemd
- 시스템 서비스 파일 생성
vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
kubelet 서비스 파일을 생성하여 kubelet 프로세스가 kubelet-config.yaml 파일을 사용하도록 설정
👇🏻10-kubeadm.conf 파일 내용
[Service]
ExecStart=
ExecStart=/usr/local/bin/kubelet --config /etc/kubernetes/kubelet-config.yaml --kubeconfig /etc/kubernetes/kubelet.conf
Environment="KUBELET_KUBEADM_ARGS=--cgroup-driver=systemd"
--config: kubelet의 설정 파일로 kubelet-config.yaml 파일을 지정
(이 파일에는 인증 및 권한 부여와 같은 kubelet의 동작 방식을 제어하는 설정이 포함되어 있음)
--kubeconfig: kubelet이 사용할 kubeconfig 파일을 kubelet.conf 파일로 지정
(이는 kubelet이 API 서버와 통신할 때 필요한 인증 정보를 포함하고 있음)
Environment 부분: kubelet이 systemd를 cgroup 드라이버로 사용하도록 지정
- kubelet이 사용할 kubeconfig 파일 생성
vi /etc/kubernetes/kubelet.conf
👇🏻 kubelet.conf 파일 내용
apiVersion: v1
kind: Config
clusters:
- cluster:
server: [클러스터 API 서버의 주소]
certificate-authority-data: [CA 인증서 데이터]
name: eks-cluster
contexts:
- context:
cluster: eks-cluster
user: kubelet
name: kubelet-context
current-context: kubelet-context
users:
- name: kubelet
user:
token: [인증에 사용할 토큰]
👇🏻 아래에서 출력되는 값들은 복사해서 따로 메모해두기
✔️ 클러스터 API 서버의 주소 확인
aws eks describe-cluster --name k8s_cluster --query 'cluster.endpoint' --output text
✔️ CA 인증서 데이터 확인
aws eks describe-cluster --name k8s_cluster --query "cluster.certificateAuthority.data" --output text
✔️ 인증에 사용할 토큰 확인
aws eks get-token --cluster-name k8s_cluster --output json --query 'status.token'
✔️ kubelet 서비스 실행
systemctl daemon-reload
systemctl restart kubelet
systemctl status kubelet

→ Active: active (running) 확인하기
'수업내용' 카테고리의 다른 글
AWS EKS 사용 - 클러스터와 노드 그룹 생성, IAM 정책 설정 (0) | 2024.10.23 |
---|---|
AWS EKS 사용 - Docker 컨테이너 구축, ECR에 이미지 푸시 (0) | 2024.10.21 |
AWS에서 애플리케이션 로드 밸런서를 사용하여 EC2 인스턴스 관리, 배포 (0) | 2024.10.18 |
AWS에서 웹 애플리케이션 배포하기 위한 프로세스 (0) | 2024.10.16 |
Kubernetes(Ingress) (0) | 2024.10.04 |