0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【初心者】kubernetesとは

Posted at

目的

業務で kubernetes の理解が必要になりました。
机上調査結果をまとめます。

手段

  1. 机上調査(概要理解を目的に)
  2. 検証(セットアップ、基本設定理解)

まずは机上調査

公式ドキュメントを読んでいきます。

kubernetes とは

コンテナ化されたアプリケーションの展開、スケーリング、管理の自動化をするためのオープンソースコンテナプラットフォーム。
つまり、多数のコンテナ稼働環境で良い感じに動かしてくれる OSS ですね。

Google は 2014 年に kubernetes プロジェクトをオープンソース化した。

  • 基本を理解する
    • 過去を振り返ると
      • 仮想化ができる前の時代におけるデプロイ
        • 物理サーバ上でアプリのリソースを制限する設定はない→リソース割り当て問題が発生
        • リソース確保のために物理サーバ増加→運用・維持管理の手間
      • 仮想化を使ったデプロイ
        • アプリを NW 毎に隔離可能→アプリ間のセキュリティレベルを提供
        • 物理リソースの使用率向上→ H/W コスト削減、スケーラビリティ向上
      • コンテナを使ったデプロイ
        • VMと同様に、コンテナは各自のファイルシステム、CPUの共有、メモリ、プロセス空間を持っている
        • 基盤インフラストラクチャからの分離→実行環境の移動が容易
    • Kubernetes が必要な理由と提供する機能
      • サービスディスカバリーと負荷分散;k8s は負荷分散してくれる
      • 自動化されたロールアウトとロールバック:マニュフェストで増減を自動化
      • 自動ビンパッキング:リソース活用
      • 自己修復:コンテナ増減
      • 機密情報と構成管理:OAuthトークンなどちゃんと管理してくれる
    • Kubernetes にないもの
      • 構成言語など特に指定はない、と言っている

Kubernetes のコンポーネント

いくつが用語が出てくる。

image.png
出典

  • 用語
    • クラスター
    • ノード:ワーカーマシンの集合
    • マスターノード:クラスター内のワーカーノードとPodを管理
    • ワーカーノード:Pod をホストする
    • Pod:
    • コントロールプレーン:クラスター内のワーカーノードとPodを管理

最初のスライドだとイマイチよくわかりません。

  • コントロールプレーンコンポーネント
    • クラスターに関する全体的な決定(スケジューリング)とイベント検出/応答を行う
    • kube-apiserver : Kubernetest API を外部に提供する Kubernetest コントロールプレーンのコンポーネント。また、Kubernetest API コントロールプレーンのフロントエンドになる
    • etcd : 一貫性、高可用性を持ったキーバリューストア。Kubernetes 全てのクラスター情報の保存場所として利用する。バックアップ要
    • kube-scheduler : コントロールプレーン上で動作するコンポーネント。新規に作成された Pod にノード割り当て有無を監視、ノード無ければ Pod 内で実行するノードを選択する
    • kube-controller-manager : 複数のコントローラープロセスを実行する?(ちょっと何言ってるか...)
    • cloud-controller-manager : クラウド特有の制御ロジックを組み込む Kubernetes の control plane コンポーネント
  • ノードコンポーネント
    • kubelet : クラスター内の各ノードで実行されるエージェント。各コンテナがPodで実行されていることを保証する
    • kube-proxy : クラスター内の各 node で動作しているネットワークプロキシ。Node のネットワークルールをメンテナスする
    • コンテナランタイム : コンテの実行を担当する S/W。Dokcer, containerd,等をサポートする
  • アドオン
    • DNS : クラスター DNS を持つべき
    • Web UI : GUI のこと
    • コンテナリソース監視 : 監視データを閲覧可能
    • クラスターレベルログ : ログ管理

Kubernetes API

control palne は API server。API サーバは、エンドユーザ、クラスター、外部コンポーネントが相互通信できるように HTTP API を公開する。(詳細は必要になれば参照)

Kubernetes オブジェクトを理解する

YAML フォーマットでオブジェクトを理解するコーナー!!

  • Kubernetesオブジェクトを理解する
    • アプリ実行、リソース割り当て、ポリシー設定可能(再起動、アップグレード、耐障害性ポリシーなど)
    • クラスターの望ましい状態を宣言し、kubernetest はそれを維持してくれる
    • 基本的に設定変更等は Kubernetes API を実行する。CLIツール(kubectl)を Kubernetes API 命令にコンバートして実行される
  • オブジェクトのspec(仕様)とstatus(状態)
    • 要するに yaml で書いた状態を維持してくれる
  • Kubenetesオブジェクトを記述する
applicaton/deployment.ymall
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 #バージョン指定
kind: Deployment # 種類?
metadata:
  name: nginx-deployment # 名前
spec:
  selector:
    matchLabels:
      app: nginx # アプリ指定
  replicas: 2 # tells deployment to run 2 pods matching the template #Pod数指定
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2 # イメージ指定
        ports:
        - containerPort: 80 # nginx の公開ポート

Pod

Pod は Kubernetes 内で作成・管理可能なコンピューティングの最小デプロイユニット。

Pod は1つまたは複数のコンテナグループであり、ストレージやネットワークの共有リソースを持ち、コンテナの実行方法に関する仕様を持っている。

  • Podとは何か?
    • Dockerの概念を使って説明すると、Pod は共有の名前空間と共有ファイルシステムのボリュームを持つDockerコンテナグループに似ている。(コンテナ群+名前空間と共有ファイルシステム)
  • Podを使用する
    • 単一コンテナを実行するPod と 複数コンテナを実行するPodがある
    • アプリを水平スケールさせる場合は複数Podを使用するべき
  • Podが複数コンテナを管理する方法
    • サイドカーとか使おうね
  • Podを利用する
    • Podはある程度一時的で使い捨てできる存在として設計されている
  • Pod とコンテナコントローラー
    • コントローラーはノード動作停止を検知し、代わりのPod を作成する
  • Pod テンプレート
    • workload リソース向けのコントローラーは、PodをPodテンプレートを元に作成し、代わりにPodを管理する
podtemplate-sample
apiVersion: batch/v1
kind: Job
metadata:
  name: hello
spec:
  template:
    # これがPodテンプレートです
    spec:
      containers: # コンテナ指定
      - name: hello # 名前
        image: busybox # イメージ指定
        command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600'] # コマンド
      restartPolicy: OnFailure # 復旧ポリシー?
    # Podテンプレートはここまでです
  • リソースの共有と通信
    • Pod内のストレージ
      • Pod は共有ストレージであるボリュームの集合を指定可能
    • Pod ネットワーク
      • 各 Pod には、各アドレスファミリーごとにユニークなIPアドレスがアサインされる。ここはdocker に似ている
    • コンテナの特権モード
      • priviledge フラグで特権モードを有効化可能
    • static Pod
      • static Pod は、API サーバーに管理されない、特定ノード上でkubelet デーモンによって直接管理される Pod を指す

Pod の概観

  • Pod について理解する
    • Kubernetes アプリケーションの基本的な実行単位
    • Pod はクラスターで実行されているプロセスを表す
  • ネットワーキング
    • 各Pod は固有のIPアドレスを割り当てられる
  • ストレージ
    • ストレージぼりゅーのセットを指定可能
  • Pod を利用する
    • Kubernetesはコントローラーと呼ばれる高レベルの中小概念を使用し、それは比較的使い捨て可能なPodインスタンスの管理を行う
  • Podとコントローラー
    • 1つまたはそれ以上のPodを含むコントローラーの例は3つ。
      • Deployment
      • StatefulSet
      • DaemonSet
  • Podテンプレート
    • Podテンプレートはクッキーの抜き型のようなもの

ここまでの感想

正直早いタイミングで手を動かし始めた方が良いと思いました。

ざっくり概念は伝わってきますが、登場人物は多すぎて "Pod は最小実行単位" くらいしか記憶に残っていない感じです。

ブラウザで実行可能なチュートリアルがあるようなのでそちらに進みたいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?