Langsung ke konten utama

Rangkuman Dicoding Aws Container 101

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).

Disini kita akan menggunakan docker sebagai dasar container dan untuk konfigurasi karpenter dan autoclaster 
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 exec node bash node convert.js ~/video.mp4 ~/output.mp4
docker build . -t <image-name> docker run -p 49160:8080 -d <image-name>
docker run -it --name node-exporter-video exposed_port:container_port image_name
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
podman run --name video-converter node-video-converter:1.0
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
set ttlSecondsUntilExpired, namun node yang "NotReady" masih ada. Bagaimana cara karpenter agar auto deprovisioning nodes yg error seperti ImagePullBackOff & pod yg stuck di unscheduled?
 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

  1. AWS Account
  2. 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

  1. 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)
  1. 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
  1. 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}
EOF

Testing

  1. 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
  1. Verify the pods and nodes
kubectl get pods
kubectl get nodes
  1. Scale down deployment
kubectl delete deployment inflate
kubectl logs -f -n karpenter -l app.kubernetes.io/name=karpenter -c controller

Cleanup

  1. Delete nodes
kubectl delete node $NODE_NAME
  1. 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

Postingan populer dari blog ini

Cara Konfigurasi Router Juniper di GNS3

 Ini merupakan kelanjutan dari ini  dan langsung aja kita konfigurasi pertama buat topologi seperti dibawah ini  dan buka konsol dari router juniper masukan perintah dan ikutiarahan dan jalankan secara perlahan jangan terbalik saat menjalan perintah satu per satu itu benar akan melihat hasil konfigurasi kita coba ping dns ping domain saya ping google ping blogger ping facebook dan youtube sekian dari saya dan sampai jumpa lagi  website radnet  instagram radnet

Cara Menambahkan Qemu Juniper di GNS3

 Kita akan membahas router juniper kali ini dan pastikan sudah menginstall gns3  langkah awal adalah mendownload router di sini  setelah itu baru tambahkan ke qemu buka edit prefrences dan pilih qemu buat new  dan tambahkan sesuai contoh dan ikuti langkah langkah dan tambahkan qemu yang di link atas maka berhasil ditambahkan sekian  dan terimakasih  sekian dari saya