amd64
arm64
% kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
<node1> Ready <none> 46d v1.32.3-eks-473151a <internal ip> <external ip> Amazon Linux 2 5.10.236-227.928.amzn2.aarch64 containerd://1.7.27
<node2> Ready <none> 46d v1.32.3-eks-473151a <internal ip> <external ip> Amazon Linux 2 5.10.236-227.928.amzn2.x86_64 containerd://1.7.27
Docker 이미지는 amd64
만 지원하도록 빌드되는 상황
arm64
node 에서 실행 시 Exec format error
발생exec /usr/local/bin/uvicorn: exec format error
deployment 에서 별다른 설정이 없을 경우 kubectl apply
로 배포시 어떤 노드로 배포될지 제어 불가
nodeAffinity
사용Deployment.spec.template.spec.affinity
에 어떤 arch 를 기준으로 배포할지 명시affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- amd64
nodeSelector:
kubernetes.io/arch: amd64
기존 Deployment
예시에서 affinity
추가:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- amd64
containers:
- name: my-app
image: <user_id>.<ecr_domain>/<ecr_repository>:REPLACED_BY_CI
ports:
- containerPort: 7000
kustomize edit set image
로 이미지 태그 대체