Kubeadmで構築したクラスタの概要

はじめに


ここでは、オンプレミス環境でkubernetesプロジェクト推奨構成のクラスタを構築できる構築支援ツール[kubeadm]が、どのような動作でクラスタ環境を自動で構築しているのか、

構築支援ツールを利用せずに手動で構築したK8sクラスタと比較して、内部を見てみようと思います。
手動でK8sクラスタを構築した作業は以下の記事で公開しています。
Kubernetes(K8s)を仮想環境でHard Wayに構築してみた

Kubernetesのコンポーネント


K8sは以下のコンポーネントで構成されています。

コントロールプレーン

  • etcd
    クラスタの構成を保存するための分散型キーバリューストア
  • kube-apiserver
    kubectlやほかのコンポーネントとやり取りのためのAPIを提供するコンポーネント
  • kube-controller-manager
    K8s内の様々なコントローラ(DeploymentやDaemonsetなど)を管理しているコンポーネント
  • kube-scheduler
    ポッドをどのノードで起動するか割り当てるコンポーネント
    割り当てだけ行い、各ノードのkubeletがそれぞれ割り当てられたポッドを起動する

ワーカノード

  • kubelet ( + Container Runtime)
    スケジュールされたポッドを起動する
  • kube-proxy
    クラスタ内のサービスと、ポッドネットワーク、クラスタネットワークのルーティングを行う
  • cni plugin
    ワーカノードのポッドネットワークを提供する。

手動で構築したクラスタの場合


Kubernetes The Hard Wayの通りに構築したKubernetesクラスタの場合、各コンポーネントは以下のような構成となっています。

コンポーネント自体は/usr/local/binにバイナリでインストールされていて、systemdのサービスとして起動しています。

コントロールプレーン
# 

低レベルランタイム、どう使い分ける?

はじめに

本稿では「コンテナを作る方法は Docker 標準 (containerd + runc) だけじゃないのは分かった、では何を使えば良いのか?」という疑問について、低レベルコンテナランタイムに焦点を絞り、答えを追い求めた結果を書き記します。この記事は以下の内容で構成されています。

<!--...

このアプリ、gVisor 上でも動きますか?

※追記(5月1日)想定していたシステムコールが未実装だった時、別のシステムコールにフォールバックして動作するアプリケーションも存在するとのご指摘をいただき、記事の一部(主に4章本文)を修正しました。ありがとうございます。

<!-- wp:core-embed/twitter...

Kubernetes(K8s)を仮想環境でHard Wayに構築してみた

はじめに


Kubernetesを詳しく理解するために、「Kubernetes The Hard Way」というチュートリアルに挑戦しました。
本家チュートリアルではGoogle Cloud Platform(GCP)の無料クレジット$300以内で、K8sクラスターを手動構築する手順が紹介されていますが、

  • 無料クレジット内で学習が終わるか分からない
  • K8sクラスター構築後に検証したいことがある
  • インプットばかりではなく、読み替える方が学習効率が高い

という点を考慮し、仮想環境に読み替えてチュートリアルを行いました。
本記事では読み替えが必要となる部分を解説しています。本家チュートリアルと横並びにしてご覧ください。
(本家チュートリアルが元々Hard Way(苦労、地道)なので、読み替えを行うとさらにHard Wayになります。)

仮想環境の概要


今回構築するKubernetesクラスタのノードのイメージは以下です。

合計7台の仮想マシンを同じネットワーク上に作成してK8sクラスタを構築します。
検証環境の要件は以下の通りです。
・メモリ:12GB程度
・ディスク容量:70GB程度
なお各ノードが同じネットワーク上にあればよいため、1台のPC上に集約させなくても大丈夫です。

やってみる


目次

  1. 前提条件
  2. クライアントツールのインストール
  3. コンピューティングリソースのプロビジョニング
  4. CAのプロビジョニングとTLS証明書の生成
  5. 認証用のKubernetes構成ファイルの生成
  6. データ暗号化構成とキーの生成
  7. etcdクラスターのブートストラップ
  8. Kubernetesコントロールプレーンのブートストラップ
  9. Kubernetesワーカーノードのブートストラップ
  10. リモートアクセス用のkubectlの構成
  11. ポッドネットワークルートのプロビジョニング