Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

AlibabaCloudではじめるKubernetes

100 vues

Publié le

なぜかアップロードができていなかったので、いまさらだけどあげておく。なので情報が少し古いですが、Alibaba CloudではじめるKubernetes.

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

AlibabaCloudではじめるKubernetes

  1. 1. AlibabaCloudではじめるKubernates これからはじめたい人のためのKubernetes入門 on Alibaba Cloud 1 @mosuke5 Sapporo AliEaters 2018/06/29
  2. 2. 2 Who are you? 名前:もーすけ (@mosuke5) 仕事:  Alibaba Cloud Solutin Architect  以前はWebエンジニア、インフラエンジニア。 ネタ:  フリーランサーとして開業しましたが、副業は難しい。  得意な分野は、Webアプリ開発とかサーバ運用の自動化とか
  3. 3. (中国最新情報) Serverless Kubernetes 中国本家のほうで、クラスターを自前で管理する必要のない Serverless Kubernetesを最近出したそうです。 30秒でクラスタ立ち上げ、30秒でアプリをデプロイといっていま す。 中国ですが、動画もあります。このあたりはどこか調べてみて別 の機会にお伝えします。 https://yq.aliyun.com/articles/587195 3
  4. 4. 自分のコンテナ経験 (単体利用) 4 はじめて利用したのは2014 年-2015年あたりで作っていた Vim::Factoryという、vimの設定 をブラウザ上で体感するための サービスをつくったとき。 vimをDockerコンテナで立ち上 げ、ユーザひとりひとりに割り当 てていた。
  5. 5. 自分のコンテナ経験 (docker-compose) 5 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を利用して動作させています。
  6. 6. 今はこんな構成で運用 6 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 ✕ ここのことね
  7. 7. Kubernetesとは Kubernetes(k8s) はコンテナ化されたアプリケーションの展開やスケーリングおよび管 理をおこなうオーケストレーションツールです。 このようなオーケストレーションツールを利用することで、複数台のサーバにまたがるコ ンテナ利用を容易にしていく。 ・システムを構成するコンポーネントが多いときにコンテナ化が有効 ・ブルーグリーンデプロイメントなどシステムを運用する上で今まで試行錯誤してきたこ とが抽象化されていてよい 7
  8. 8. Alibaba Cloud Container Service 8 Alibaba Cloudではコンテナアプリケーション化をサポートする、マネージドなコンテナ オーケストレーションサービス Container Service を提供しています。 このサービスではオーケストレーションエンジンとして、Docker Swarmモードと Kubernetesモードの2つをサポートしています。
  9. 9. 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であればカスタムイメージをサポート) 9
  10. 10. kubernetes cluster 10 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 だが、提供予定あり。
  11. 11. kubernetes cluster 11 クラスタを構成するリソース。 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から外に通信するため)
  12. 12. クラスタ構築が完了すると 12 Container Serviceのコンソールからクラスタの構築を行うと、Alibaba Cloud内で仮想 サーバやロードバランサが購入されてクラスタが作成されます。
  13. 13. kubectl k8sクラスタを操作するコマンドラインツールkubectlはもちろん同様に利用可能です。 Master Nodeに配置されているConfigファイルをダウンロードすることで操作可能にな ります。下記でCLIを使えるようにセットアップしてみよう。 13 $ mkdir $HOME/.kube $ scp root@47.91.168.13:/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
  14. 14. クラスタへのSSHログイン クラスタ作成時に”Enable SSH access for internet” を有効にするとMaster Node用 のSLBにポート22のリスナーが用意される。k8sクラスタに利用するマシンイメージを指 定できるので、独自のユーザなど設定したものを利用すると良さそう。(CentOSに限 る) 14
  15. 15. 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 15
  16. 16. Podの詳細を確認 16 $ 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 …..
  17. 17. port-forwardを使ってPodへアクセス 17 $ 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" "-"
  18. 18. port-forwardがやっていること $ kubectl port-forward <pod> 8080:80 SSHのローカルポートフォワードを勉強すると同じであること理解できる。 ローカルの8080ポートはMaster Nodeからみて<pod>の80ポートに接続する、という ことを意味する。 参考) https://blog.mosuke.tech/entry/2014/12/31/170545/ 18 Master Node Worker Node VPC トンネリング
  19. 19. 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 19 作成したNginxのコンテナを公開してみる。--type LoadBalancerを指定することで、自 動的にAlibaba Cloud内にロードバランサが購入され接続経路ができる。
  20. 20. NginxをExposeすると 20 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を作成できる権限ロールが付与されている。 ③ ロードバランサ作成
  21. 21. どうしてきちんとロードバランスされるのか? ロードバランサのバックエンドサー バは3台。Nginxがあるのはそのう ちの1台。なぜきちんとロードバラ ンスされるのか。 ノードの数以上にNginxはスケー ルアップできないのか? 21 TCP 80 TCP 443
  22. 22. どうしてきちんとロードバランスされるのか? それを行うのがkube-proxy。全Worker node に存在するプロキシコンテナ。 ロードバランサのバックエンドサーバにはすべ てのWorkerNodeが対象となっている。ポート はkube-proxyで利用しているポート。 kube-proxyに先にリクエストが振られ、その後 に対象のコンテナにリクエストが振られる仕組 みとなっている。 22 TCP 80 TCP 443 kube-poxy kube-proxy kube-poxy
  23. 23. ログ管理サービス ”LogService” との連携 Alibaba Cloud独自の特徴として、ログ管理サービスである LogServiceと連携が可能 です。Kubernetesクラスタ内で発生したログをすべて集約することが可能。LogTailと よばれる、LogServiceで利用するログ収集エージェントをDaemonSetとして起動する ことで利用可能。 23 LogTail LogTail LogTrail LogService Object Storage MaxCompute ログを1箇所に保存し、検索可能にします。ま た、アーカイブ用途としてオブジェクトストレージ に転送したり、データ分析プラットフォームと連 携できます。
  24. 24. LogServiceのサンプル画面 24
  25. 25. Terraform Alibaba Cloudは公式にHashiCorpプロダクト(Terraformと Packer)についてサポートすることを発表しています。 仮想サーバやロードバランサなどはもちろん、 今回紹介した、Kubernetesクラスタの作成から、Kubernetes上 のアプリケーション管理までTerraformで行うことができます。 25
  26. 26. kubernetes cluster作成のサンプル 26
  27. 27. まとめ ● Alibaba Cloudでは、本家アリババでDockerを駆使している のもあり、Container Serviceを提供している。 ● Kubernetesという今となってはデファクトスタンダードになっ たオーケストレーションエンジンをサポート。 ● 3万円のクーポンあるので勉強してみてください。 ● まだBetaでバギーな所あるのですが、頑張っていま直してま す。 27
  28. 28. Master Node, Service (おまけ) Container Service Swarmモード 28 Worker Node SwarmモードはMaster NodeはAlibaba Cloud側で管理。ユーザサイドで購入や管理 が不要なためコスト的にも運用的にもお手軽。そのかわり、起動したコンテナへのアク セス経路であるロードバランサなどは自分で用意する必要がある。 コンテナのオーケストレーションにはdocker-composeが利用できる。 VPC Alibaba Cloudとして管理。 管理ノードはフルマネージドで提供

×