VTRyo Blog

一歩ずつ前に進むブログ

Kubernetesの基本!「明日から使えるKubernetes入門」に参加しました

https://img.supporterzcolab.com/thumbs/fe/77/fe77211b91f576980698c8f669385e54.png

【サポーターズCoLab勉強会】明日から使えるKubernetes入門に行ってきました!

AWSでもk8sをやっていきたいと思っていたので、「これは!」と思い応募しました。 今日はW杯があって渋谷がやべーことになるのはわかってたのですが、頑張って参加しました(笑)

ここからは取ったメモを書いていきます。おそらくご本人から資料がアップされると思いますが、最速ブログということで許してください!

概要

入門編の勉強会です。

コンテナを使って作成したアプリケーションを本番環境で うまく運用するためのツールとして注目を集めているKubernetes。 そんなKubernetesの概要と実際の使い方を、実例を交えてご紹介します。

Kubernetes

全く知らなかった状態からアプリケーション構築できるようになるまで

登壇者さん

登壇された浦野さんはCertified Kubernetes Administratorをお持ちのようです!

【浦野紘一】 株式会社サイバーエージェントのアドテク本部で インターネット広告サービスのチームでインフラエンジニアをしています。 主にGCPを使ったインフラの構築、運用をしています。

今日話さないこと

  • ベストプラクティスな話ではない
  • GCPの基本的な触り方はしない
  • クラスタ自体の話はしない
  • Dockerの細かい話はしない

とりあえずDeploymentとServiceをいじれるようになればOK

前提

  • コンテナを使ったアプリケーションのデプロイ、スケール、管理を自動化するOSS
  • Dockerが公式サポートしている。他クラウドサービスも取り入れはじめデファクトスタンダードに
  • GKEはGCPのKubernetes

なぜGCPか

  • てっとり早く理解するためにはマネージドサービスが近道(ローカルでもできるけど複雑)
  • GKEは無料枠でいろいろできる

Components

Cluster

  • 環境を構築する上で一番大きい単位

Master

  • 管理全般
  • APIはここで受付
  • GKEの場合、ここはマネージドサービスになっている

Node

  • コンテナが配置される物理マシン
  • NodeにPodが割り当てられる
  • GKEでClusterを作成されると自動でGCEインスタンスが作成される

Pod

  • コンテナとリソースをグループ化したもの
  • 構成要素としては最小の単位
  • PodごとにCPU、メモリ、ディスク、ネットワークアドレスなどのリソースを持つので、一台のサーバとしてみることもできる
  • クラスタからするとプロセス

Deployment

  • Podの作成、更新を行う単位の定義
  • Podの数の設定・変更
  • アプリケーションを止めずにアップデート
  • Serviceへのアタッチ

設定ファイルはYamlやJSON。 Yamlで覚えたほうが情報が多い。

Config

こちらに関しては僕が公式から引用

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

動かすところまではできたが、まだ足りない

Nginxを動かすところまではこれでできるが、クラスタ内のプライベートIPしかない

Service

  • Podへのアクセスを抽象化する
  • ルータやLBに相当する機能でクラスタ外からのアクセスが可能になる

Service(type:Load Balancer)

  • L4のLB相当の機能
  • 外部エンドポイントに独自のIPアドレスを使ってアクセスさせることができる

Service(type:NodePort)

  • 特定のポートへのアクセスを特定のPodに転送
  • 外にLBを持ちたいとき

ここまでやると

type:Load Balancerを使うことで独自IPで外部からアクセスできるようになった。

使うと便利なComponents

Config Map

  • Pod内で使う環境変数をConfig Mapとして定義しておくとDeploymentの移植性を高められる
  • NameSpaceで環境ごとにConfig Mapを切り替えたりできる

Secret

  • 同じく移植性を高められる。Deploymentから呼び出せる
  • 内部で暗号化して扱うことができる

Ingress

  • HTTPベースのLB機能
  • HTTPSにも対応
  • 名前のバーチャルホストの設定も可能
  • リバースプロキシ的な使い方もできる

コマンドラインツール

  • gcloudで呼び出す

gcloud container clusters

  • 主にクラスタの作成やログイン先のクラスタの切り替え

kubectl

  • 制御用のコマンドラインツール
  • 各コンポーネントを作る
  • 変更する
  • 削除する

など

中に入りたい場合はDockerライクにexecする。

その他いろいろ

  • kubectx(クラスタ切り替え)
  • stern(ログをtailする)
  • ckube(ワークフローを簡単にしてくれる)

GKEは何で構成されているか

  • Master:マネージドサービス
  • Node:GCEインスタンスが作成される
  • Service(NodePort):フォワーディングルール
  • Ingress:ロードバランサー

質疑応答

  • 監視の単位はService?Pod?
  • Pod単位でプロセスリソースをみると良いかも
  • ロギング
  • Fluentdをいれておく。もしくはスタックドライバーを使うとGKEでは簡単

感想

弊社ではAWSを使っているのですが、Kubernetesはやはり検討に入ってきますね。 概念の勉強として、GCPはやっぱりよさそうです。無料枠が結構たくさん使えるのですぐに試せますし。

ざっくばらんに聞けたので、これを足がかりに使っていこうと思います!

ちなみにDatadogでモニタリングするならIntegrationでKubernetesがありますんで、その辺もよしなにやってくれそうです。Amazon EKSもIntegrationできるようです。

f:id:vtryo:20180716124609p:plain

余談ですが、GCPのページに久々に行ったら無料トライアル終わって何もできなくなってました(笑)

今日のキーワードを意識しつつ、新しくアカウント作ってやっていきたいと思います。

関連リンク