Enter Karpenter, an open-source autoscaling solution that offers many advantages over the standard cluster autoscaler. It is a flexible, high-performance Kubernetes cluster autoscaler built with AWS.
Docker adalah sistem operasi (atau waktu proses) untuk kontainer. Mesin Docker diinstal pada setiap server tempat Anda ingin menjalankan kontainer dan menyediakan sekumpulan perintah sederhana yang dapat digunakan untuk membuat, memulai, atau menghentikan kontainer. AWS menyediakan dukungan untuk kedua solusi open-source dan komersial Docker.
Docker merupakan tool yang sangat berguna bagi developer. Fungsinya untuk mengetes, meluncurkan (deploy), dan mengembangkan aplikasi tanpa masalah menjadi terobosan yang sangat membantu mempercepat alur kerja (workflow).
Docker run -i node-video-converter:1.0 -<~/file_video
dari seluruh ekosistem kerja yang berisi kumpulan container manager. Singkatnya, Docker bisa menjadi bagian dari Kubernetes dan bukan sebaliknya
docker build -t tag_name path-to-Dockerfile
edit entrypoint di Dockerfile ENTRYPOINT ["node", "converter.js", "--arg1", "--arg2"]docker build -t coverterjs:v1.0 .docker run coverterjs ~/video.mp4 ~/output.mp4
docker run -i node-video-converter:1.0
docker build . -t node-video-converter$docker run -p 3000:8000 --name node-video-converter-container node-video-converter
Jalankan perintah untuk membangun Docker image dari Dockerfile:====coding di sql ====docker build -t converter .====coding di sql====
memasang direktori home sebagai volume dan menjalankan converter.js dengan menggunakan Docker container. File output akan disimpan di direktori yang sama dengan file input video.mp4 pada mesin host
kebanyakan containering aplikasi itu menggunakan docker/podman, kenapa tidak menggunakan containerd, apakah ada keunggulan di docker/podman dibanding containerd?
docker run --name node-video-converter -d node-video-converter:1.0 --input $HOME/video.mp4 --output $HOME/output.mp4
kalau di python ada semacam virtual environment, nah apakah sama dengan docker?
kelebihan dan kekurangan dari container serverless dan container yang di manage oleh masing-masing user
perbedaan container orchetrastion dengan container choreography ? dan bagaimana kriteria sistem yang cocok diaplikasikan untuk kedua model tersebut? apakah keduanya bisa kita terapkan diAWS
Prerequisites
- AWS Account
- EC2 Instance/Laptop with installed tools:
a. AWS CLI
b. kubectl - the Kubernetes CLI
c. eksctl - the CLI for AWS EKS
d. helm - the package manager for Kubernetes
Steps
- Set environment variables
export KARPENTER_VERSION=v0.27.0
export CLUSTER_NAME="${USER}-karpenter-demo"
export AWS_DEFAULT_REGION="us-west-2"
export AWS_ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)"
export TEMPOUT=$(mktemp)- Create a cluster
curl -fsSL https://karpenter.sh/"${KARPENTER_VERSION}"/getting-started/getting-started-with-eksctl/cloudformation.yaml > $TEMPOUT \
&& aws cloudformation deploy \
--stack-name "Karpenter-${CLUSTER_NAME}" \
--template-file "${TEMPOUT}" \
--capabilities CAPABILITY_NAMED_IAM \
--parameter-overrides "ClusterName=${CLUSTER_NAME}"
eksctl create cluster -f - <<EOF--- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: ${CLUSTER_NAME} region: ${AWS_DEFAULT_REGION} version: "1.24" tags: karpenter.sh/discovery: ${CLUSTER_NAME}
iam: withOIDC: true serviceAccounts: - metadata: name: karpenter namespace: karpenter roleName: ${CLUSTER_NAME}-karpenter attachPolicyARNs: - arn:aws:iam::${AWS_ACCOUNT_ID}:policy/KarpenterControllerPolicy-${CLUSTER_NAME} roleOnly: true
iamIdentityMappings: - arn: "arn:aws:iam::${AWS_ACCOUNT_ID}:role/KarpenterNodeRole-${CLUSTER_NAME}" username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes
managedNodeGroups: - instanceType: m5.large amiFamily: AmazonLinux2 name: ${CLUSTER_NAME}-ng desiredCapacity: 2 minSize: 1 maxSize: 10
## Optionally run on fargate # fargateProfiles: # - name: karpenter # selectors: # - namespace: karpenter EOF
export CLUSTER_ENDPOINT="$(aws eks describe-cluster --name ${CLUSTER_NAME} --query "cluster.endpoint" --output text)" export KARPENTER_IAM_ROLE_ARN="arn:aws:iam::${AWS_ACCOUNT_ID}:role/${CLUSTER_NAME}-karpenter" echo $CLUSTER_ENDPOINT $KARPENTER_IAM_ROLE_ARN
aws iam create-service-linked-role --aws-service-name spot.amazonaws.com || true # If the role has already been successfully created, you will see: # An error occurred (InvalidInput) when calling the CreateServiceLinkedRole operation: Service role name AWSServiceRoleForEC2Spot has been taken in this account, please try a different suffix.
docker logout public.ecr.aws helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter --version ${KARPENTER_VERSION} --namespace karpenter --create-namespace \ --set serviceAccount.annotations."eks\.amazonaws\.com/role-arn"=${KARPENTER_IAM_ROLE_ARN} \ --set settings.aws.clusterName=${CLUSTER_NAME} \ --set settings.aws.defaultInstanceProfile=KarpenterNodeInstanceProfile-${CLUSTER_NAME} \ --set settings.aws.interruptionQueueName=${CLUSTER_NAME} \ --wait
- Create a provisioner
cat <<EOF | kubectl apply -f -
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
name: default
spec:
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot"]
limits:
resources:
cpu: 1000
providerRef:
name: default
ttlSecondsAfterEmpty: 30---
apiVersion: karpenter.k8s.aws/v1alpha1
kind: AWSNodeTemplate
metadata:
name: default
spec:
subnetSelector:
karpenter.sh/discovery: ${CLUSTER_NAME}
securityGroupSelector:
karpenter.sh/discovery: ${CLUSTER_NAME}
EOFTesting
- Scale up deployment
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: inflate
spec:replicas: 0 selector: matchLabels: app: inflate template: metadata: labels: app: inflate spec: terminationGracePeriodSeconds: 0 containers: - name: inflate image: public.ecr.aws/eks-distro/kubernetes/pause:3.7 resources: requests: cpu: 1
EOF
kubectl scale deployment inflate --replicas 5
kubectl logs -f -n karpenter -l app.kubernetes.io/name=karpenter -c controller- Verify the pods and nodes
kubectl get pods
kubectl get nodes- Scale down deployment
kubectl delete deployment inflate
kubectl logs -f -n karpenter -l app.kubernetes.io/name=karpenter -c controllerCleanup
- Delete nodes
kubectl delete node $NODE_NAME- Delete the cluster
helm uninstall karpenter --namespace karpenter
aws cloudformation delete-stack --stack-name "Karpenter-${CLUSTER_NAME}"
aws ec2 describe-launch-templates \
| jq -r ".LaunchTemplates[].LaunchTemplateName" \
| grep -i "Karpenter-${CLUSTER_NAME}" \
| xargs -I{} aws ec2 delete-launch-template --launch-template-name {}
eksctl delete cluster --name "${CLUSTER_NAME}"




































Komentar
Posting Komentar