Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

自分のコンテナ経験 (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を利用して動作させています。

Slide 5

Slide 5 text

今はこんな構成で運用 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 ✕ ここのことね

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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 だが、提供予定あり。

Slide 10

Slide 10 text

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から外に通信するため)

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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" "-"

Slide 17

Slide 17 text

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 トンネリング

Slide 18

Slide 18 text

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内にロードバランサが購入され接続経路ができる。

Slide 19

Slide 19 text

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を作成できる権限ロールが付与されている。 ③ ロードバランサ作成

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

LogServiceのサンプル画面 23

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

kubernetes cluster作成のサンプル 25

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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