$30 off During Our Annual Pro Sale. View Details »

Alibaba CloudではじめるKubernetes

mosuke5
June 30, 2018

Alibaba CloudではじめるKubernetes

コンテナオーケストレーションのデファクトスタンダードになったKubernetesですが、Alibaba CloudでもContainer Serviceというサービスで、マネージドKubernetesを展開しています。

mosuke5

June 30, 2018
Tweet

More Decks by mosuke5

Other Decks in Technology

Transcript

  1. AlibabaCloudではじめるKubernates
    これからはじめたい人のためのKubernetes入門 on Alibaba Cloud
    1
    @mosuke5
    Sapporo AliEaters
    2018/06/29

    View Slide

  2. 2
    Who are you?
    名前:森 真也
       もーすけ (@mosuke5)
    仕事:
     Alibaba Cloud Solutin Architect
     MVPになんか選ばれた。
     以前はソフトウェアエンジニア。
    ネタ:
     フリーランサーとして開業しましたが、副業は難しい。
     得意な分野は、Webアプリ開発とかサーバ運用の自動化とか

    View Slide

  3. 自分のコンテナ経験 (単体利用)
    3
    はじめて利用したのは2014
    年-2015年あたりで作っていた
    Vim::Factoryという、vimの設定
    をブラウザ上で体感するための
    サービスをつくったとき。
    vimをDockerコンテナで立ち上
    げ、ユーザひとりひとりに割り当
    てていた。

    View Slide

  4. 自分のコンテナ経験 (docker-compose)
    4
    Cloud Server
    (Ubuntu16.04)
    Nginx
    Rails-
    gillsearch
    Elastic
    Search
    Kibana
    Docker Compose
    english.mosuke.tech
    gill-search.mosuke.tech
    gill-search-kibana.mosuke.tech
    gill-search-prometheus.mosuke.tech
    Rails-
    beeglobal
    MySQL
    prometheus
    現在、自分が運用しているブログサービスの検索エンジンや英語学習アプリ(Closed
    Beta) は1台のサーバの上でdocker-composeを利用して動作させています。

    View Slide

  5. 今はこんな構成で運用
    5
    Github Pages
    (mosuke5-lab/mosuke5-la
    b.github.io)
    Github
    (mosuke5/hugo-blog.mos
    uke.tech)
    Hugo repository
    CloudFlare
    blog.mosuke.tech
    - SSL accelaration
    - Support HTTP/2
    - Contents cache
    Write &
    Push
    Deploy
    CI integration
    Notify
    Gill Search
    (Search Engine)
    Update articles

    ここのことね

    View Slide

  6. Kubernetesとは
    Kubernetes(k8s) はコンテナ化されたアプリケーションの展開やスケーリングおよび管
    理をおこなうオーケストレーションツールです。
    このようなオーケストレーションツールを利用することで、複数台のサーバにまたがるコ
    ンテナ利用を容易にしていく。
    ・システムを構成するコンポーネントが多いときにコンテナ化が有効
    ・ブルーグリーンデプロイメントなどシステムを運用する上で今まで試行錯誤してきたこ
    とが抽象化されていてよい
    6

    View Slide

  7. Alibaba Cloud Container Service
    7
    Alibaba Cloudではコンテナアプリケーション化をサポートする、マネージドなコンテナ
    オーケストレーションサービス Container Service を提供しています。
    このサービスではオーケストレーションエンジンとして、Docker Swarmモードと
    Kubernetesモードの2つをサポートしています。

    View Slide

  8. Container Service for Kubernetes (beta)
    2017 年に Certified Kubernetes Conformance Program で認定されており、ネイティ
    ブKubernetesで利用しているツールやプラグインともちろん組み合わせて利用するこ
    とが可能です。
    Alibaba CloudのContainer Serviceは下記のような特徴を持っています。
    1. Alibaba Cloudプロダクトとの連携
    a. ロードバランサーとの連携
    b. ログ管理サービス Log Serviceとの連携
    c. マルチゾーンでのクラスタ構築( Beta)
    2. Kubernetes versionは1.9.7をサポート(2018/6/8現在)
    3. クラスターのアップグレード機能をサポート
    4. ノードのカスタムイメージサポート(CentOSであればカスタムイメージをサポート)
    8

    View Slide

  9. kubernetes cluster
    9
    Master Node Worker Node
    TCP 22
    TCP 6443
    TCP 8443
    TCP 6443
    NAT GW
    k8sクラスタを立ち上げると下記のインスタンスが起動する。Worker Nodeの台数は任
    意に指定可能。デフォルトは3台。Master Nodeは現状3台で固定。
    Nodeで利用するイメージはCentOSベースであれば指定することも可能。
    VPC
    マルチゾーンでのクラ
    スタ構築は現状beta
    だが、提供予定あり。

    View Slide

  10. kubernetes cluster
    10
    クラスタを構成するリソース。
    1. VPC, Vswitch
    2. Security Group
    3. Master Node用 ECS 3台
    4. Worker Node用 ECS N台
    5. Master Node用 インターネットロードバランサ
    6. Master Node用 VPCロードバランサ
    7. NAT Gateway(VPCから外に通信するため)

    View Slide

  11. クラスタ構築が完了すると
    11
    Container Serviceのコンソールからクラスタの構築を行うと、Alibaba Cloud内で仮想
    サーバやロードバランサが購入されてクラスタが作成されます。

    View Slide

  12. kubectl
    k8sクラスタを操作するコマンドラインツールkubectlはもちろん同様に利用可能です。
    Master Nodeに配置されているConfigファイルをダウンロードすることで操作可能にな
    ります。下記でCLIを使えるようにセットアップしてみよう。
    12
    $ mkdir $HOME/.kube
    $ scp [email protected]:/etc/kubernetes/kube.conf $HOME/.kube/config
    $ kubectl get nodes
    NAME STATUS ROLES AGE VERSION
    ap-southeast-1.i-t4n3l1wkt552yhkpczau Ready master 16h v1.9.7
    ap-southeast-1.i-t4n5uhgvrupfedei7h0l Ready 15h v1.9.7
    ap-southeast-1.i-t4n5uhgvrupfedei7h0m Ready 15h v1.9.7
    ap-southeast-1.i-t4n5uhgvrupfedei7h0n Ready 15h v1.9.7
    ap-southeast-1.i-t4na7tvx688puhyc9aj6 Ready master 16h v1.9.7
    ap-southeast-1.i-t4ngyymixhyokrt7k6rw Ready master 16h v1.9.7

    View Slide

  13. クラスタへのSSHログイン
    クラスタ作成時に”Enable SSH access for internet” を有効にするとMaster Node用
    のSLBにポート22のリスナーが用意される。k8sクラスタに利用するマシンイメージを指
    定できるので、独自のユーザなど設定したものを利用すると良さそう。(CentOSに限
    る)
    13

    View Slide

  14. Hello World: Nginxをデプロイ(デモンストレーション)
    $ kubectl run nginx --image=nginx:1.13.11
    deployment.apps "nginx" created
    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    nginx-966f97bf8-s4kpl 0/1 ContainerCreating 0 8s
    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    nginx-966f97bf8-s4kpl 1/1 Running 0 16s
    $ kubectl get deployment
    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
    nginx 1 1 1 1 17m
    14

    View Slide

  15. Podの詳細を確認
    15
    $ kubectl describe pods nginx-966f97bf8-s4kpl
    Name: nginx-966f97bf8-s4kpl
    Namespace: default
    Node: ap-northeast-1.i-6we1hzu0wzlkk9lb1iit/192.168.1.107
    Start Time: Tue, 26 Jun 2018 20:23:17 +0900
    Labels: pod-template-hash=522953694
    run=nginx
    Annotations:
    Status: Running
    IP: 172.20.2.131
    Controlled By: ReplicaSet/nginx-966f97bf8
    Containers:
    nginx:
    Container ID:
    docker://7f3cc03974663a3acc71b20b4d902957b718b7d206f1702aff461420e8940115
    Image: nginx:1.13.11
    …..

    View Slide

  16. port-forwardを使ってPodへアクセス
    16
    $ kubectl port-forward nginx-966f97bf8-s4kpl 8080:80
    Forwarding from 127.0.0.1:8080 -> 80
    Forwarding from [::1]:8080 -> 80
    Handling connection for 8080
    Handling connection for 8080
    # ブラウザから localhost:8080にアクセス可能。
    $ kubectl logs nginx-966f97bf8-s4kpl -f
    127.0.0.1 - - [27/Jun/2018:06:30:30 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0
    (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko)
    Chrome/67.0.3396.87 Safari/537.36" "-"
    127.0.0.1 - - [27/Jun/2018:06:30:30 +0000] "GET /favicon.ico HTTP/1.1" 404 572
    "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5)
    AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" "-"
    127.0.0.1 - - [27/Jun/2018:06:30:51 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0
    (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko)
    Chrome/67.0.3396.87 Safari/537.36" "-"

    View Slide

  17. port-forwardがやっていること
    $ kubectl port-forward 8080:80
    SSHのローカルポートフォワードを勉強すると同じであること理解できる。
    ローカルの8080ポートはMaster Nodeからみての80ポートに接続する、という
    ことを意味する。
    参考) https://blog.mosuke.tech/entry/2014/12/31/170545/
    17
    Master Node
    Worker Node
    VPC
    トンネリング

    View Slide

  18. NginxをExpose
    $ kubectl expose deployment nginx --port 80 --type LoadBalancer
    service "nginx" exposed
    $ kubectl get service
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    kubernetes ClusterIP 172.21.0.1 443/TCP 1d
    nginx LoadBalancer 172.21.5.234 80:32259/TCP 4s
    $ kubectl get service
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    kubernetes ClusterIP 172.21.0.1 443/TCP 1d
    nginx LoadBalancer 172.21.5.234 47.89.60.34 80:32259/TCP 24s
    18
    作成したNginxのコンテナを公開してみる。--type LoadBalancerを指定することで、自
    動的にAlibaba Cloud内にロードバランサが購入され接続経路ができる。

    View Slide

  19. NginxをExposeすると
    19
    Master Node
    Worker Node
    TCP 22
    TCP 6443
    TCP 8443
    NAT GW
    TCP 80
    TCP 443
    Nginx接続用の
    ロードバランサ
    が作成される
    $ kubectl get service
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    nginx LoadBalancer 172.21.5.234 47.89.60.34 80:32259/TCP 24s
    Alibaba Cloud API
    ① kubectl expose ...
    ② API経由でロードバランサ作成
    APIの実行
     Master NodeにはSLBを作成できる権限ロールが付与されている。
    ③ ロードバランサ作成

    View Slide

  20. どうしてきちんとロードバランスされるのか?
    ロードバランサのバックエンドサー
    バは3台。Nginxがあるのはそのう
    ちの1台。なぜきちんとロードバラ
    ンスされるのか。
    ノードの数以上にNginxはスケー
    ルアップできないのか?
    20
    TCP 80
    TCP 443

    View Slide

  21. どうしてきちんとロードバランスされるのか?
    それを行うのがkube-proxy。全Worker node
    に存在するプロキシコンテナ。
    ロードバランサのバックエンドサーバにはすべ
    てのWorkerNodeが対象となっている。ポート
    はkube-proxyで利用しているポート。
    kube-proxyに先にリクエストが振られ、その後
    に対象のコンテナにリクエストが振られる仕組
    みとなっている。
    21
    TCP 80
    TCP 443
    kube-poxy
    kube-proxy
    kube-poxy

    View Slide

  22. ログ管理サービス ”LogService” との連携
    Alibaba Cloud独自の特徴として、ログ管理サービスである LogServiceと連携が可能
    です。Kubernetesクラスタ内で発生したログをすべて集約することが可能。LogTailと
    よばれる、LogServiceで利用するログ収集エージェントをDaemonSetとして起動する
    ことで利用可能。
    22
    LogTail
    LogTail
    LogTrail
    LogService
    Object Storage
    MaxCompute
    ログを1箇所に保存し、検索可能にします。ま
    た、アーカイブ用途としてオブジェクトストレージ
    に転送したり、データ分析プラットフォームと連
    携できます。

    View Slide

  23. LogServiceのサンプル画面
    23

    View Slide

  24. Terraform
    Alibaba Cloudは公式にHashiCorpプロダクト(Terraformと
    Packer)についてサポートすることを発表しています。
    仮想サーバやロードバランサなどはもちろん、
    今回紹介した、Kubernetesクラスタの作成から、Kubernetes上
    のアプリケーション管理までTerraformで行うことができます。
    24

    View Slide

  25. kubernetes cluster作成のサンプル
    25

    View Slide

  26. まとめ
    ● Alibaba Cloudでは、本家アリババでDockerを駆使している
    のもあり、Container Serviceを提供している。
    ● Kubernetesという今となってはデファクトスタンダードになっ
    たオーケストレーションエンジンをサポート。
    ● 3万円のクーポンあるので勉強してみてください。
    ● まだBetaでバギーな所あるのですが、頑張っていま直してま
    す。
    26

    View Slide

  27. Master
    Node, Service
    (おまけ) Container Service Swarmモード
    27
    Worker Node
    SwarmモードはMaster NodeはAlibaba Cloud側で管理。ユーザサイドで購入や管理
    が不要なためコスト的にも運用的にもお手軽。そのかわり、起動したコンテナへのアク
    セス経路であるロードバランサなどは自分で用意する必要がある。
    コンテナのオーケストレーションにはdocker-composeが利用できる。
    VPC
    Alibaba Cloudとして管理。
    管理ノードはフルマネージドで提供

    View Slide

  28. (中国最新情報) Serverless Kubernetes
    中国本家のほうで、クラスターを自前で管理する必要のない
    Serverless Kubernetesを最近出したそうです。
    30秒でクラスタ立ち上げ、30秒でアプリをデプロイといっていま
    す。
    中国ですが、動画もあります。このあたりはどこか調べてみて別
    の機会にお伝えします。
    https://yq.aliyun.com/articles/587195
    28

    View Slide