「Kubernetes」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (校正(でき・出来)) |
|||
(4人の利用者による、間の8版が非表示) | |||
1行目: | 1行目: | ||
[[Category:仮想化]] |
[[Category:仮想化]] |
||
[[en:Kubernetes]] |
[[en:Kubernetes]] |
||
− | [https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ Kubernetes] はコンテナ化されたアプリケーションのデプロイ・スケーリング・管理を自動化するためのオープンソースシステムです。Kubernetes |
+ | [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を利用するのが良いでしょう。 |
||
− | + | 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を実際に動作させるには、dockerやcri-oなどのコンテナランタイムも予めインストールしておく必要が有ります。
また、必要に応じて以下のパッケージをインストールします。
- cni-binAUR: CNI(Container Network Interface)プラグインを動作させるのに必要なバイナリパッケージ。標準のCNI(flannel等)を利用する場合、これは必須です。
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
kubeadm
は https_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
ファイルのパーミッションの設定が正しいか確認してください。