Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Archives
Today
Total
관리 메뉴

쟝이의 세상

AWS EKS 클러스터와 Kubernetes 노드에서 kubelet 설정 본문

수업내용

AWS EKS 클러스터와 Kubernetes 노드에서 kubelet 설정

zyangee 2024. 10. 24. 10:02

📌 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) 확인하기