「Kubernetes」の版間の差分
細 翻訳ミスの修正 |
同期 |
||
| 11行目: | 11行目: | ||
* {{AUR|kubernetes-bin}}: ビルド済みのバイナリと kubernetes パッケージの設定をインストールします。ビルドは必要ありません。 |
* {{AUR|kubernetes-bin}}: ビルド済みのバイナリと kubernetes パッケージの設定をインストールします。ビルドは必要ありません。 |
||
== Arch Linux |
== Arch Linux の Kubectl プラグイン == |
||
[https://kubernetes.io/docs/reference/kubectl/overview/ Kubectl] プラグインは独立したバイナリであり、サブコマンドを追加して Kubectl の機能を拡張します。 |
|||
[https://github.com/kubernetes/kubeadm/issues/465 こちら] のサンプル設定を参照してください。 |
|||
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}} でホストします。ポッドはそれぞれ CIDR を持っており、ここでは {{ic|192.168.123.0/24}} とします。 |
|||
==== マスター ==== |
|||
まず、kubelet サービスの設定ファイルを設定: |
|||
{{hc|/etc/kubernetes/kubelet| |
|||
KUBELET_ARGS="--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \ |
|||
--kubeconfig=/etc/kubernetes/kubelet.conf \ |
|||
--config=/var/lib/kubelet/config.yaml \ |
|||
--network-plugin=cni \ |
|||
--pod-infra-container-image=k8s.gcr.io/pause:3.1" |
|||
}} |
|||
引数に存在しないファイルを指定していますが心配はいりません。ファイルは {{ic|kubeadm}} の初期化時に作成されます。プロキシ環境あるいは特殊な DNS 設定を使っている場合、以下の引数を追加してコンテナで使用する {{ic|resolv.conf}} を指定してください: |
|||
{{bc|1=--resolv-conf=/the/path/to/the/resolv.conf}} |
|||
それから、以下のコマンドを実行: |
|||
{{bc|# kubeadm init --advertise-address=192.168.122.1 --pod-network-cidr=192.168.123.0/24}} |
|||
初期化の進捗が表示され、それから以下のように出力されます: |
|||
[kubelet-check] It seems like the kubelet isn't running or healthy. |
|||
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused. |
|||
ここで、{{ic|kubelet.service}} を[[起動]]してください。kubelet によって kubernetes のコンポーネントが起動します。{{ic|kubeadm}} で確認できます。問題なく起動が完了したら、以下のようなメッセージが表示されます: |
|||
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}} で指定した値にあわせて設定を修正してください。 |
|||
最後に、マスターの状態を確認: |
|||
$ 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}} ファイルのパーミッションの設定が正しいか確認してください。 |
|||
2019年2月19日 (火) 22:18時点における版
Kubernetes はコンテナ化されたアプリケーションのデプロイ・スケーリング・管理を自動化するためのオープンソースシステムです。Kubernetes は k8s とも呼ばれます。
Arch Linux の Kubernetes
Arch Linux で Kubernetes を使用するための AUR パッケージが複数存在します:
- kubernetesAUR: GitHub から Kubernetes の Go のソースコードをビルドします。
- kubernetes-binAUR: ビルド済みのバイナリと kubernetes パッケージの設定をインストールします。ビルドは必要ありません。
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 でホストします。ポッドはそれぞれ CIDR を持っており、ここでは 192.168.123.0/24 とします。
マスター
まず、kubelet サービスの設定ファイルを設定:
/etc/kubernetes/kubelet
KUBELET_ARGS="--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \
--kubeconfig=/etc/kubernetes/kubelet.conf \
--config=/var/lib/kubelet/config.yaml \
--network-plugin=cni \
--pod-infra-container-image=k8s.gcr.io/pause:3.1"
引数に存在しないファイルを指定していますが心配はいりません。ファイルは kubeadm の初期化時に作成されます。プロキシ環境あるいは特殊な DNS 設定を使っている場合、以下の引数を追加してコンテナで使用する resolv.conf を指定してください:
--resolv-conf=/the/path/to/the/resolv.conf
それから、以下のコマンドを実行:
# kubeadm init --advertise-address=192.168.122.1 --pod-network-cidr=192.168.123.0/24
初期化の進捗が表示され、それから以下のように出力されます:
[kubelet-check] It seems like the kubelet isn't running or healthy. [kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused.
ここで、kubelet.service を起動してください。kubelet によって kubernetes のコンポーネントが起動します。kubeadm で確認できます。問題なく起動が完了したら、以下のようなメッセージが表示されます:
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 で指定した値にあわせて設定を修正してください。
最後に、マスターの状態を確認:
$ 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 ファイルのパーミッションの設定が正しいか確認してください。