Amazon EKS가 왔습니다.

14779 단어 도커kuberneteseksAWS
EKS가 GA가 되어 드디어 사용할 수 있게 되었습니다!
현시점에서는 오레곤(us-west-2)과 버지니아(us-east-1)에서 사용할 수 있습니다.

매니지먼트 컨소룰에 EKS 의 문자가!



클릭하면


작성 도중? ?

절차



Getting Started를 보면서 만들어 보았습니다.
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 에 ks / ㅁ st / 우세 r 구이로 / 껄껄 g-s r d. HTML

IAM 역할 만들기



먼저 EKS용 IAM 롤을 만듭니다.

역할 만들기 화면에서 EKS를 선택합니다.


우선 정책은 지정한 채로


적당히 이름 붙여 작성.


CloudFormation에서 VPC 만들기



Getting Started에서는 CFn의 템플리로 VPC 만들 수 있다는 것이므로・・・

템플릿 URL은 여기
https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/amazon-eks-vpc-sample.yaml

CFn 화면에서 템플릿 URL을 지정하고,


CIDR 지정하여,


만들기.


어서 오세요 3 서브넷의 VPC였습니다.

로컬 환경 설정


  • kubectl 설치

  • EKS 용 kubectl이있는 것 같습니다.
    $ curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/bin/darwin/amd64/kubectl
    $ chmod +x ./kubectl
    $ ./kubectl version --short --client
    Client Version: v1.10.3
    
  • Heptio Authenticator AWS 설치

  • 인증에 사용하는 것 같습니다.
    $ curl -o heptio-authenticator-aws https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/bin/darwin/amd64/heptio-authenticator-aws
    $ chmod +x ./heptio-authenticator-aws
    $ ./heptio-authenticator-aws help
    A tool to authenticate to Kubernetes using AWS IAM credentials
    
    Usage:
      heptio-authenticator-aws [command]
    
    Available Commands:
      help        Help about any command
      init        Pre-generate certificate, private key, and kubeconfig files for the server.
      server      Run a webhook validation server suitable that validates tokens using AWS IAM
      token       Authenticate using AWS IAM and get token for Kubernetes
      verify      Verify a token for debugging purpose
    
  • aws-cli 업그레이드

  • 1.15.32 이상 필요
    $ sudo pip install --upgrade awscli 
    

    Cluster 만들기


    aws-cli 로 하는 것이 좋을 것 같습니다.
    이유는 모르겠지만 관리 콘솔에서 만들면 kubectl 연결로 인증에 오류가 발생했습니다.
    $ ./kubectl get all
    error: the server doesn't have a resource type "cronjobs"
    $ ./kubectl get node
    error: You must be logged in to the server (Unauthorized)
    

    작성 명령은 이런 느낌입니다.
    $ aws eks create-cluster --name test --role-arn arn:aws:iam::XXXXXXXXXXX:role/EKS-Role --resources-vpc-config subnetIds=subnet-XXXXXX,subnet-XXXXXXX,securityGroupIds=XXXXXX --region us-east-1
    {
        "cluster": {
            "status": "CREATING",
            "name": "test",
            "certificateAuthority": {},
            "roleArn": "arn:aws:iam::XXXXXXXXX:role/EKS-Role",
            "resourcesVpcConfig": {
                "subnetIds": [
                    "subnet-XXXXXXX",
                    "subnet-XXXXXXX"
                ],
                "vpcId": "vpc-XXXXXXXX",
                "securityGroupIds": [
                    "sg-XXXXXX"
                ]
            },
            "version": "1.10",
            "arn": "arn:aws:eks:us-east-1:XXXXXXXXXXXX:cluster/test",
            "createdAt": 1528253503.404
        }
    }
    

    CFn으로 만든 SubnetID, SG를 지정하고 있습니다.
    버지니아에서는 1b의 서브넷을 포함하면 ↓의 에러가 나왔으므로, 제외하고 있습니다.
    An error occurred (UnsupportedAvailabilityZoneException) when calling the CreateCluster operation: Cannot create cluster 'test' because us-east-1b, the targeted availability zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these availability zones: us-east-1a, us-east-1c, us-east-1d
    

    오레곤에서는 문제 없을 것 같았습니다.

    STATUS가 ACTIVE가 될 때까지 기다립니다. (15~20분 정도・・・)



    kubectl로 연결



    config 파일을 만듭니다.
    서버 엔드포인트, 인증서 정보 및 클러스터 이름을 수정합니다.

    eks-config
    apiVersion: v1
    clusters:
    - cluster:
        server: (サーバーエンドポイント、DESCRIBE_CLUSTER_CONTAINER_LABEL_API_SERVER_ENDPOINTの部分)
        certificate-authority-data: (証明書情報、DESCRIBE_CLUSTER_CONTAINER_LABEL_CERTIFICATE_AUTHORITYの部分)
      name: kubernetes
    contexts:
    - context:
        cluster: kubernetes
        user: aws
      name: aws
    current-context: aws
    kind: Config
    preferences: {}
    users:
    - name: aws
      user:
        exec:
          apiVersion: client.authentication.k8s.io/v1alpha1
          command: ./heptio-authenticator-aws
          args:
            - "token"
            - "-i"
            - "(クラスタ名)"
    

    KUBECONFIG를 설정합니다.
    $ export KUBECONFIG=./eks-config
    

    연결!
    $./kubectl get all                                                 [12:04:13]
    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    service/kubernetes   ClusterIP   10.100.0.1   <none>        443/TCP   6m
    

    할 수 있었습니다.

    Worker 노드 만들기



    CFn의 템플리가 준비되어 있으므로 이것을 사용합니다.
    URL은 이쪽.
    https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/amazon-eks-nodegroup.yaml
    



    AMI는 EKS용 AMI가 있는 것 같습니다.
  • ami-dea4d5a1 (버지니아)
  • ami-73a6e20b (오레곤)



  • 이 설정은 AZ당 하나씩 인스턴스를 만듭니다.


    ConfigMap 에서 Node를 Join시킵니다.
    표본이 있기 때문에,
    $ curl -O https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/aws-auth-cm.yaml
    
    rolearn 의 부분을 CFn으로 작성된 NodeInstanceRole 의 ARN으로 수정합니다.

    aws-auth-cm.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: aws-auth
      namespace: kube-system
    data:
      mapRoles: |
        - rolearn: arn:aws:iam::XXXXXXXX:role/test-worker-nodes-NodeInstanceRole-XXXXXXXXX
          username: system:node:{{EC2PrivateDNSName}}
          groups:
            - system:bootstrappers
            - system:nodes
    

    Apply합니다.
    $ ./kubectl apply -f aws-auth-cm.yaml
    configmap "aws-auth" created
    $ ./kubectl get nodes
    NAME                              STATUS    ROLES     AGE       VERSION
    ip-192-168-121-147.ec2.internal   Ready     <none>    52s       v1.10.3
    ip-192-168-182-144.ec2.internal   Ready     <none>    55s       v1.10.3
    ip-192-168-235-51.ec2.internal    Ready     <none>    53s       v1.10.3
    

    등록되었습니다!

    배포



    그리고는, k8s의 세계이므로 좋아하게.
    우선 샘플 GuestBook을 배포해 보겠습니다.
    $ ./kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-controller.json
    replicationcontroller "redis-master" created
    
    $ ./kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-master-service.json
    service "redis-master" created
    
    $ ./kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-slave-controller.json
    replicationcontroller "redis-slave" created
    
    $ ./kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/redis-slave-service.json
    service "redis-slave" created
    
    $ ./kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-controller.json
    replicationcontroller "guestbook" created
    
    $ ./kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/v1.10.3/examples/guestbook-go/guestbook-service.json
    service "guestbook" created
    
    $ ./kubectl get services -o wide
    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                       PORT(S)          AGE       SELECTOR
    guestbook      LoadBalancer   10.100.133.245   a22b8aa77693811e883521XXXXXXXXX-XXXXXXXXX.us-east-1.elb.amazonaws.com   3000:32551/TCP   5s        app=guestbook
    kubernetes     ClusterIP      10.100.0.1       <none>                       443/TCP          18m       <none>
    redis-master   ClusterIP      10.100.141.60    <none>                       6379/TCP         39s       app=redis,role=master
    redis-slave    ClusterIP      10.100.252.136   <none>                       6379/TCP         20s       app=redis,role=slave
    

    ELB를 보면 CLB가 가능합니다.


    브라우저로 액세스하면 ...



    보였다.

    요약



    마침내 AWS에서 관리되는 k8s 환경을 구축할 수 있습니다.

    그냥・・・
    대단히 귀찮습니다 ...
    아마도 도구 등이 충실해 온다고는 생각합니다만・・・

    좋은 웹페이지 즐겨찾기