「Kubernetes」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(ページの作成:「Category:仮想化 en:Kubernetes [https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ Kubernetes] はコンテナ化されたアプリケーション...」)
 
(校正(でき・出来))
 
(5人の利用者による、間の10版が非表示)
1行目: 1行目:
 
[[Category:仮想化]]
 
[[Category:仮想化]]
 
[[en:Kubernetes]]
 
[[en:Kubernetes]]
[https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ Kubernetes] はコンテナ化されたアプリケーションのデプロイ・スケーリング・管理を自動化するためのオープンソースシステムです。Kubernetes is は k8s とも呼ばれます。
+
[https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ Kubernetes] はコンテナ化されたアプリケーションのデプロイ・スケーリング・管理を自動化するためのオープンソースシステムです。Kubernetes は k8s とも呼ばれます。
   
 
== Arch Linux の Kubernetes ==
 
== Arch Linux の Kubernetes ==
   
  +
=== Minikube ===
Arch Linux で Kubernetes を使用するための AUR パッケージが複数存在します:
 
   
  +
MiniKubeは[[VirtualBox]]などの仮想マシン上に小さなKubernetesクラスタを構築することができるプラットフォームです。
* {{AUR|kubernetes}}: GitHub から Kubernetes の Go のソースコードをビルドします。
 
  +
Kubernetesを試してみたいという場合、完全なインストールをいきなり用意するよりもMinikubeを利用するのが良いでしょう。
   
* {{AUR|kubernetes-built}}: ビルド済みのバイナリと kubernetes パッケージの設定をインストールします。ビルドは必要ありません
+
Arch LinuxでMinikubeを利用するには、{{Pkg|minikube}} パッケージおよび、{{Pkg|virtualbox}}など仮想化環境をインストールします。
   
  +
実際のminikubeの操作法については[https://kubernetes.io/ja/docs/setup/learning-environment/minikube/ 公式のチュートリアル]を参照してください。
== Arch Linux VM を使うための Kubernetes の基本設定 ==
 
   
  +
=== 完全なインストール ===
[https://github.com/kubernetes/kubeadm/issues/465 こちら] のサンプル設定を参照してください。
 
  +
  +
Arch Linux で Kubernetes を使用するためには、{{AUR|kubelet-bin}}, {{AUR|kubeadm-bin}}, {{AUR|kubectl-bin}}をインストールします。
  +
Kubernetesを実際に動作させるには、{{Pkg|docker}}や{{Pkg|cri-o}}などのコンテナランタイムも予めインストールしておく必要が有ります。
  +
  +
また、必要に応じて以下のパッケージをインストールします。
  +
  +
* {{AUR|cni-bin}}: [https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/ CNI(Container Network Interface)プラグイン]を動作させるのに必要なバイナリパッケージ。標準のCNI(flannel等)を利用する場合、これは必須です。
  +
  +
== Arch Linux の Kubectl プラグイン ==
  +
  +
[https://kubernetes.io/docs/reference/kubectl/overview/ Kubectl] プラグインは独立したバイナリであり、サブコマンドを追加して Kubectl の機能を拡張します。
  +
  +
Arch Linux には Kubectl プラグインの AUR パッケージが存在します:
  +
  +
* {{AUR|kubectl-trace-git}}: kubectl を使って kubernetes クラスタの bpftrace プログラムをスケジュールします。
  +
  +
== 基本設定 ==
  +
  +
{{ic|kubeadm}} ヘルパーを使用するか手動で kubernetes クラスタを設定します。
  +
  +
=== kubeadm を使う ===
  +
  +
以下はマスターとスレーブがひとつずつの構成を取っており、両ノードとも {{ic|192.168.122.0/24}} ネットワーク内に存在し、マスターは kubernetes クラスタを {{ic|192.168.122.1}} でホストします。
  +
  +
また、ポッドに割り当てるIPアドレス範囲(CIDR)は利用するCNIプラグインに合わせて決定しますが、ここでは[https://github.com/coreos/flannel flannel]を利用するので、{{ic|10.244.0.0/16}} とします。
  +
  +
==== マスター ====
  +
  +
まず、マシンの[[スワップ]]を無効にします。Kubernetesを稼働させる全てのノードにおいて、これは必須です。
  +
{{bc|# swapoff -a}}
  +
  +
次に、コンテナランタイムを開始させます。{{Pkg|docker}}を利用する場合、{{ic|docker.service}}を開始します。
  +
{{bc|# systemctl start docker.service}}
  +
  +
それから、以下のコマンドを実行:
  +
{{bc|# kubeadm init --apiserver-advertise-address=192.168.122.1 --pod-network-cidr=10.244.0.0/16}}
  +
  +
{{ic|kubeadm}}によってPKI(公開鍵基盤)とクライアント証明書が自動的に作成され、{{ic|kubelet.service}}が開始されます。
  +
  +
問題なく起動が完了したら、以下のようなメッセージが表示されます:
  +
  +
Your Kubernetes master has initialized successfully!
  +
  +
新しく作成した kubernetes クラスタの管理者としてアカウントを設定します:
  +
  +
$ mkdir -p $HOME/.kube
  +
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  +
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
  +
  +
それからポッドネットワークをデプロイします。[https://kubernetes.io/docs/concepts/cluster-administration/addons/ こちら] に様々な方法が載っています。全ての方法にはそれぞれデフォルトのポッドネットワーク CIDR が存在します。{{ic|--pod-network-cidr}} で指定した値にあわせて設定を修正してください。
  +
  +
ここではflannelをデプロイするので、以下のコマンドを実行:
  +
  +
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  +
$ kubectl apply -f kube-flannel.yml
  +
  +
最後に、マスターの状態を確認:
  +
$ kubectl get componentstatus
  +
  +
==== ノード ====
  +
  +
マスターの成功メッセージの最後の行に入力してクラスタに参加:
  +
kubeadm join --token <token> 192.168.122.1:6443 --discovery-token-ca-cert-hash sha256:<hash>
  +
  +
== トラブルシューティング ==
  +
  +
=== settings behind proxy ===
  +
  +
{{ic|kubeadm}} は {{ic|https_proxy}}, {{ic|http_proxy}}, {{ic|no_proxy}} [[環境変数]]を読み込みます。Kubernetes の内部ネットワークは最後の環境変数に記述します。例:
  +
export no_proxy="192.168.122.0/24,10.96.0.0/12,192.168.123.0/24"
  +
2番目の CIDR がデフォルトのサービスネットワーク CIDR です。
  +
  +
また、CNI プラグインが追加で必要です:
  +
$ go get -d github.com/containernetworking/plugins
  +
$ cd ~/go/src/github.com/containernetworking/plugins
  +
$ bash ./build_linux.sh
  +
# cp bin/* /opt/cni/bin/
  +
  +
=== fatal error: runtime: out of memory ===
  +
ソースから kubernetes をビルドしたときに発生します。{{ic|zram}} 領域を設定することで回避できます:
  +
# modprobe zram
  +
# echo lz4 > /sys/block/zram0/comp_algorithm
  +
# echo 16G > /sys/block/zram0/disksize
  +
# mkswap --label zram0 /dev/zram0
  +
# swapon --priority 100 /dev/zram0
  +
  +
=== error when creating "xxx.yaml": No API token found for service account "default" ===
  +
[https://stackoverflow.com/questions/31891734/not-able-to-create-pod-in-kubernetes stackoverflow] を見てください。
  +
  +
=== Error: unable to load server certificate ===
  +
サービスの起動時に発生することがあります。{{ic|*.key}} ファイルのパーミッションの設定が正しいか確認してください。

2024年7月10日 (水) 20:51時点における最新版

Kubernetes はコンテナ化されたアプリケーションのデプロイ・スケーリング・管理を自動化するためのオープンソースシステムです。Kubernetes は k8s とも呼ばれます。

Arch Linux の Kubernetes

Minikube

MiniKubeはVirtualBoxなどの仮想マシン上に小さなKubernetesクラスタを構築することができるプラットフォームです。 Kubernetesを試してみたいという場合、完全なインストールをいきなり用意するよりもMinikubeを利用するのが良いでしょう。

Arch LinuxでMinikubeを利用するには、minikube パッケージおよび、virtualboxなどの仮想化環境をインストールします。

実際のminikubeの操作法については公式のチュートリアルを参照してください。

完全なインストール

Arch Linux で Kubernetes を使用するためには、kubelet-binAUR, kubeadm-binAUR, kubectl-binAURをインストールします。 Kubernetesを実際に動作させるには、dockercri-oなどのコンテナランタイムも予めインストールしておく必要が有ります。

また、必要に応じて以下のパッケージをインストールします。

Arch Linux の Kubectl プラグイン

Kubectl プラグインは独立したバイナリであり、サブコマンドを追加して Kubectl の機能を拡張します。

Arch Linux には Kubectl プラグインの AUR パッケージが存在します:

  • kubectl-trace-gitAUR: kubectl を使って kubernetes クラスタの bpftrace プログラムをスケジュールします。

基本設定

kubeadm ヘルパーを使用するか手動で kubernetes クラスタを設定します。

kubeadm を使う

以下はマスターとスレーブがひとつずつの構成を取っており、両ノードとも 192.168.122.0/24 ネットワーク内に存在し、マスターは kubernetes クラスタを 192.168.122.1 でホストします。

また、ポッドに割り当てるIPアドレス範囲(CIDR)は利用するCNIプラグインに合わせて決定しますが、ここではflannelを利用するので、10.244.0.0/16 とします。

マスター

まず、マシンのスワップを無効にします。Kubernetesを稼働させる全てのノードにおいて、これは必須です。

# swapoff -a

次に、コンテナランタイムを開始させます。dockerを利用する場合、docker.serviceを開始します。

# systemctl start docker.service

それから、以下のコマンドを実行:

# kubeadm init --apiserver-advertise-address=192.168.122.1 --pod-network-cidr=10.244.0.0/16

kubeadmによってPKI(公開鍵基盤)とクライアント証明書が自動的に作成され、kubelet.serviceが開始されます。

問題なく起動が完了したら、以下のようなメッセージが表示されます:

Your Kubernetes master has initialized successfully!

新しく作成した kubernetes クラスタの管理者としてアカウントを設定します:

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

それからポッドネットワークをデプロイします。こちら に様々な方法が載っています。全ての方法にはそれぞれデフォルトのポッドネットワーク CIDR が存在します。--pod-network-cidr で指定した値にあわせて設定を修正してください。

ここではflannelをデプロイするので、以下のコマンドを実行:

$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
$ kubectl apply -f kube-flannel.yml

最後に、マスターの状態を確認:

$ kubectl get componentstatus

ノード

マスターの成功メッセージの最後の行に入力してクラスタに参加:

kubeadm join --token <token> 192.168.122.1:6443 --discovery-token-ca-cert-hash sha256:<hash>

トラブルシューティング

settings behind proxy

kubeadmhttps_proxy, http_proxy, no_proxy 環境変数を読み込みます。Kubernetes の内部ネットワークは最後の環境変数に記述します。例:

export no_proxy="192.168.122.0/24,10.96.0.0/12,192.168.123.0/24"

2番目の CIDR がデフォルトのサービスネットワーク CIDR です。

また、CNI プラグインが追加で必要です:

$ go get -d github.com/containernetworking/plugins
$ cd ~/go/src/github.com/containernetworking/plugins
$ bash ./build_linux.sh 
# cp bin/* /opt/cni/bin/

fatal error: runtime: out of memory

ソースから kubernetes をビルドしたときに発生します。zram 領域を設定することで回避できます:

# modprobe zram
# echo lz4 > /sys/block/zram0/comp_algorithm
# echo 16G > /sys/block/zram0/disksize
# mkswap --label zram0 /dev/zram0
# swapon --priority 100 /dev/zram0

error when creating "xxx.yaml": No API token found for service account "default"

stackoverflow を見てください。

Error: unable to load server certificate

サービスの起動時に発生することがあります。*.key ファイルのパーミッションの設定が正しいか確認してください。