Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 2 Who are you? 名前:森 真也    もーすけ (@mosuke5) 仕事:  Alibaba

    Cloud Solutin Architect  MVPになんか選ばれた。  以前はソフトウェアエンジニア。 ネタ:  フリーランサーとして開業しましたが、副業は難しい。  得意な分野は、Webアプリ開発とかサーバ運用の自動化とか
  2. 自分のコンテナ経験 (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を利用して動作させています。
  3. 今はこんな構成で運用 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 ✕ ここのことね
  4. Alibaba Cloud Container Service 7 Alibaba Cloudではコンテナアプリケーション化をサポートする、マネージドなコンテナ オーケストレーションサービス Container Service

    を提供しています。 このサービスではオーケストレーションエンジンとして、Docker Swarmモードと Kubernetesモードの2つをサポートしています。
  5. 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
  6. 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 だが、提供予定あり。
  7. 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から外に通信するため)
  8. 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 <none> 15h v1.9.7 ap-southeast-1.i-t4n5uhgvrupfedei7h0m Ready <none> 15h v1.9.7 ap-southeast-1.i-t4n5uhgvrupfedei7h0n Ready <none> 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
  9. 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
  10. 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: <none> Status: Running IP: 172.20.2.131 Controlled By: ReplicaSet/nginx-966f97bf8 Containers: nginx: Container ID: docker://7f3cc03974663a3acc71b20b4d902957b718b7d206f1702aff461420e8940115 Image: nginx:1.13.11 …..
  11. 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" "-"
  12. 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 <none> 443/TCP 1d nginx LoadBalancer 172.21.5.234 <pending> 80:32259/TCP 4s $ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 172.21.0.1 <none> 443/TCP 1d nginx LoadBalancer 172.21.5.234 47.89.60.34 80:32259/TCP 24s 18 作成したNginxのコンテナを公開してみる。--type LoadBalancerを指定することで、自 動的にAlibaba Cloud内にロードバランサが購入され接続経路ができる。
  13. 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を作成できる権限ロールが付与されている。 ③ ロードバランサ作成
  14. ログ管理サービス ”LogService” との連携 Alibaba Cloud独自の特徴として、ログ管理サービスである LogServiceと連携が可能 です。Kubernetesクラスタ内で発生したログをすべて集約することが可能。LogTailと よばれる、LogServiceで利用するログ収集エージェントをDaemonSetとして起動する ことで利用可能。 22

    LogTail LogTail LogTrail LogService Object Storage MaxCompute ログを1箇所に保存し、検索可能にします。ま た、アーカイブ用途としてオブジェクトストレージ に転送したり、データ分析プラットフォームと連 携できます。
  15. Master Node, Service (おまけ) Container Service Swarmモード 27 Worker Node

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