IBM Cloud Container Service에서 Istio를 tokyo 리전에서 사용해 보세요.

IBM Cloud Container Service tokyo 리전의 k8s에서 Istio를 사용해 보세요.
이 항목은 Kubernetes2 Advent Calendar 2017 20 일째 기사입니다.
(8 일 늦었습니다 ...)

처음 Istio



발표되었을 때부터 궁금했던 Istio.
OpenShift나 다른 k8s 제품도 모두 채용하기 시작해 드디어 무시할 수 없는 존재가 되어 왔습니다.
IBM도 Istio의 개발에 협동하고 있는 것 같습니다.
그렇다고는 해도 기다릴 수 없기 때문에 이번은 IBM Cloud의 k8s로 Istio를 사용해 보겠습니다.

IBM Cloud Container Service 사용하기



이번 튜토리얼에서는, Istio를 사용해 외부에 서비스 공개를 실시하기 위해,
k8s 클러스터의 라이트 플랜에서는 사용할 수 없습니다.
이번은 Pay-As-You-Go plan로, 최소의 2CPUs 4GB RAM(u2c.2x4) 19엔/시간의 1노드로 무서워 무서워 시험해 봅니다.
리전은 2017년 12월부터 서비스를 시작한 도쿄 리전을 사용합니다. (이것도 자신은 첫 도전입니다)

목적으로 이번에는 Istio를 넣어보고, 굉장히-라고 외치는 토코까지로 합니다.

사전 준비


  • IBM Cloud pay-as-you-go 계정 얻기
  • k8s 클러스터 (IBM Cloud Container Service) 배포
    이번에는 클러스터 이름 "tokyo-istio"로 배포했습니다.
    2CPUs 4GB RAM(u2c.2x4) 19엔/시간 노드수 1 k8s버전은 최신의 1.8.4_1502를 이용
  • bx (bluemix) 명령 도입
  • kubectl 소개

  • 실제로 해보자



    도쿄 리전의 k8s에 접속하려면 2017년 12월 현재 한 궁리 필요합니다.
    MahoTakara의 IBM Cloud k8s의 도쿄 지역 전환 방법
    를 참고로 했습니다.

    paid 클러스터를 배포할 때의 주의



    IBM Cloud의 IaaS 부분에서 k8s를 가상 인스턴스에서 실행하려면 globalIP가 필요합니다.
    Portable Public IP의 8IP 주소가 자동으로 지급되며 월 $16이 별도로 소요됩니다.
    이 근처는 월말당이라면 일할수록 되는 것 같습니다.

    로그인


    $ bx login -a api.ng.bluemix.net
    

    k8s 클러스터에 연결


    $ bx cs init --host https://ap-north.containers.bluemix.net
    Using user provided API endpoint: https://ap-north.containers.bluemix.net
    OK
    $ bx cs clusters
    OK
    Name          ID                                 State    Created       Workers   Datacenter   Version   
    tokyo-istio   eba98d2f51834bcaac0*****4862d391   normal   9 hours ago   1         tok02        1.8.4_1502   
    $ bx cs cluster-config tokyo-istio
    $ export KUBECONFIG=/Users/sakaigawa/.bluemix/plugins/container-service/clusters/tokyo-istio/kube-config-tok02-tokyo-istio.yml
    

    istio 설치



    istio 배포는 매우 간단합니다.
    curl에서 실행 쉘은 git clone하므로 적절한 폴더를 만들고 그 안에서 실행합시다.
    $ mkdir istio-ibmcloud
    $ cd istio-ibmcloud/
    $ ls
    $ curl -L https://git.io/getLatestIstio | sh -
    $ export PATH=$PWD/istio-0.3.0/bin:$PATH
    $ cd istio-0.3.0/
    $ ~/kubectl apply -f install/kubernetes/istio.yaml 
    

    완성 된 포드를 확인하십시오.
    $ ~/kubectl get svc -n istio-system
    NAME            CLUSTER-IP       EXTERNAL-IP       PORT(S)                                                            AGE
    istio-ingress   172.21.13.199    161.202.106.115   80:31859/TCP,443:30568/TCP                                         25s
    istio-mixer     172.21.241.240   <none>            9091/TCP,15004/TCP,9093/TCP,9094/TCP,9102/TCP,9125/UDP,42422/TCP   33s
    istio-pilot     172.21.53.126    <none>            15003/TCP,443/TCP                                                  26s
    $ ~/kubectl get pods -n istio-system
    NAME                             READY     STATUS    RESTARTS   AGE
    istio-ca-555bbff478-d5hr4        1/1       Running   0          42s
    istio-ingress-57b544fd9c-tjpgp   1/1       Running   0          43s
    istio-mixer-6c67558b4c-jkph5     3/3       Running   0          51s
    istio-pilot-5655764fbb-7nls2     2/2       Running   0          43s
    

    네. 이것으로 끝납니다.

    BookStore App 샘플 애플리케이션 배포



    Istio 패키지에는 샘플 애플리케이션이 함께 제공됩니다.

    Istio 패키지를 설치하는 데 사용한 방법은 다소 다르지만,
    다음 명령으로 설치해 봅니다.
    $ ~/kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/kube/bookinfo.yaml)
    $ ~/kubectl get svc
    NAME          CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
    details       172.21.60.75     <none>        9080/TCP   11s
    kubernetes    172.21.0.1       <none>        443/TCP    9h
    productpage   172.21.184.247   <none>        9080/TCP   10s
    ratings       172.21.128.12    <none>        9080/TCP   11s
    reviews       172.21.58.62     <none>        9080/TCP   10s
    $ ~/kubectl get pods
    NAME                             READY     STATUS    RESTARTS   AGE
    details-v1-5776b48b4d-q9l2g      2/2       Running   0          1m
    productpage-v1-fd64558b8-tstqx   2/2       Running   0          1m
    ratings-v1-5f8f9f5db4-cz2bm      2/2       Running   0          1m
    reviews-v1-c96f558c6-8l82g       2/2       Running   0          1m
    reviews-v2-b5d8745bd-4mgtw       2/2       Running   0          1m
    reviews-v3-79d8ff97d8-nv6ts      2/2       Running   0          1m
    

    Istio의 서비스 주소 받기



    여기에서는 k8s Ingress의 주소를 얻어 외부 공개하고 있는 IP 주소를 찾습니다.
    $ ~/kubectl get ingress
    NAME      HOSTS     ADDRESS           PORTS     AGE
    gateway   *         161.xxx.106.115   80        2m
    

    BookStore App 실행 결과



    서비스 주소를 확인한 후 http://{gatewayのアドレス}/productpage가 열리면 Istio를 사용하여 응용 프로그램이 게시됩니다. ta


    Service Graph 소개



    istio의 addon-yaml에서 제공하는 Service Graph를 도입해 보겠습니다.
    이 응용 프로그램은 서비스를 호출하는 경로와 응답 시간 통계를 볼 수 있습니다.
    실운용으로 여러가지 부하가 ​​걸리면 더 재미있는 표시가 된다고 생각합니다.

    Generating a Service Graph
    $ ~/kubectl apply -f install/kubernetes/addons/servicegraph.yaml 
    deployment "servicegraph" created
    service "servicegraph" created
    $ ~/kubectl -n istio-system port-forward $(~/kubectl -n istio-system get pod -l app=servicegraph -o jsonpath='{.items[0].metadata.name}') 8088:8088 &   
    Forwarding from 127.0.0.1:8088 -> 8088
    Forwarding from [::1]:8088 -> 8088
    

    servicegraph 실행 결과





    요약



    Istio를 Tokyo Region에 배포해 볼 수 있었습니다.
    Istio의 에코시스템을 앞으로 공부하려고 하기 때문에, 사경적인 느낌이 되어 버렸습니다만,
    blue green 배포나, zipkin, prometheus, grafana 주위를 우선은 사용해 보고 싶으므로, 앞으로도 공부해 가고 싶습니다.

    좋은 웹페이지 즐겨찾기