Weitere ähnliche Inhalte Ähnlich wie AlibabaCloudではじめるKubernetes (20) Mehr von Shinya Mori (@mosuke5) (20) Kürzlich hochgeladen (10) AlibabaCloudではじめるKubernetes2. 2
Who are you?
名前:もーすけ (@mosuke5)
仕事:
Alibaba Cloud Solutin Architect
以前はWebエンジニア、インフラエンジニア。
ネタ:
フリーランサーとして開業しましたが、副業は難しい。
得意な分野は、Webアプリ開発とかサーバ運用の自動化とか
8. Alibaba Cloud Container Service
8
Alibaba Cloudではコンテナアプリケーション化をサポートする、マネージドなコンテナ
オーケストレーションサービス Container Service を提供しています。
このサービスではオーケストレーションエンジンとして、Docker Swarmモードと
Kubernetesモードの2つをサポートしています。
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. 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
だが、提供予定あり。
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. 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. 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. 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. 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. 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を作成できる権限ロールが付与されている。
③ ロードバランサ作成
23. ログ管理サービス ”LogService” との連携
Alibaba Cloud独自の特徴として、ログ管理サービスである LogServiceと連携が可能
です。Kubernetesクラスタ内で発生したログをすべて集約することが可能。LogTailと
よばれる、LogServiceで利用するログ収集エージェントをDaemonSetとして起動する
ことで利用可能。
23
LogTail
LogTail
LogTrail
LogService
Object Storage
MaxCompute
ログを1箇所に保存し、検索可能にします。ま
た、アーカイブ用途としてオブジェクトストレージ
に転送したり、データ分析プラットフォームと連
携できます。
28. Master
Node, Service
(おまけ) Container Service Swarmモード
28
Worker Node
SwarmモードはMaster NodeはAlibaba Cloud側で管理。ユーザサイドで購入や管理
が不要なためコスト的にも運用的にもお手軽。そのかわり、起動したコンテナへのアク
セス経路であるロードバランサなどは自分で用意する必要がある。
コンテナのオーケストレーションにはdocker-composeが利用できる。
VPC
Alibaba Cloudとして管理。
管理ノードはフルマネージドで提供