Update install-kubeadm.md for v1.17

This commit is contained in:
hikkie3110
2020-07-22 20:32:47 +09:00
parent 0a110e49f0
commit c8495c8b10
@@ -11,6 +11,7 @@ card:
<!-- overview -->
<img src="https://raw.githubusercontent.com/kubernetes/kubeadm/master/logos/stacked/color/kubeadm-stacked-color.png" align="right" width="150px">
このページでは`kubeadm`コマンドをインストールする方法を示します。このインストール処理実行後にkubeadmを使用してクラスターを作成する方法については、[kubeadmを使用したシングルマスタークラスターの作成](/ja/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)を参照してください。
@@ -48,6 +49,22 @@ card:
複数のネットワークアダプターがあり、Kubernetesコンポーネントにデフォルトで到達できない場合、IPルートを追加して、Kubernetesクラスターのアドレスが適切なアダプターを経由するように設定することをお勧めします。
## iptablesがブリッジを通過するトラフィックを処理できるようにする
Linuxノードのiptablesがブリッジを通過するトラフィックを正確に処理する要件として、`net.bridge.bridge-nf-call-iptables``sysctl`の設定ファイルで1に設定してください。例えば以下のようにします。
```bash
cat <<EOF | cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
```
この手順の前に`br_netfilter`モジュールがロードされていることを確認してください。`lsmod | grep br_netfilter`を実行することで確認できます。明示的にロードするには`modprobe br_netfilter`を実行してください。
詳細は[ネットワークプラグインの要件](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/#network-plugin-requirements)を参照してください。
## iptablesがnftablesバックエンドを使用しないようにする
Linuxでは、カーネルのiptablesサブシステムの最新の代替品としてnftablesが利用できます。`iptables`ツールは互換性レイヤーとして機能し、iptablesのように動作しますが、実際にはnftablesを設定します。このnftablesバックエンドは現在のkubeadmパッケージと互換性がありません。(ファイアウォールルールが重複し、`kube-proxy`を破壊するためです。)
@@ -60,6 +77,7 @@ Linuxでは、カーネルのiptablesサブシステムの最新の代替品と
# レガシーバイナリがインストールされていることを確認してください
sudo apt-get install -y iptables arptables ebtables
# レガシーバージョンに切り替えてください。
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --set arptables /usr/sbin/arptables-legacy
@@ -75,24 +93,24 @@ update-alternatives --set iptables /usr/sbin/iptables-legacy
## 必須ポートの確認
### マスターノード
### コントロールプレーンノード
| プロトコル | 通信の向き | ポート範囲 | 目的 | 使用者 |
|-----------|------------|------------|-------------------------|---------------------------|
| TCP | Inbound | 6443* | Kubernetes API server | All |
| TCP | Inbound | 2379-2380 | etcd server client API | kube-apiserver, etcd |
| TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
| TCP | Inbound | 10251 | kube-scheduler | Self |
| TCP | Inbound | 10252 | kube-controller-manager | Self |
| TCP | Inbound | 6443* | Kubernetes API server | 全て |
| TCP | Inbound | 2379-2380 | etcd server client API | kube-apiserveretcd |
| TCP | Inbound | 10250 | Kubelet API | 自身、コントロールプレーン |
| TCP | Inbound | 10251 | kube-scheduler | 自身 |
| TCP | Inbound | 10252 | kube-controller-manager | 自身 |
### ワーカーノード
| プロトコル | 通信の向き | ポート範囲 | 目的 | 使用者 |
|-----------|------------|-------------|-------------------------|-------------------------|
| TCP | Inbound | 10250 | Kubelet API | Self, Control plane |
| TCP | Inbound | 30000-32767 | NodePort Services** | All |
| プロトコル | 通信の向き | ポート範囲 | 目的 | 使用者 |
|-----------|------------|-------------|-------------------------|---------------------------|
| TCP | Inbound | 10250 | Kubelet API | 自身、コントロールプレーン |
| TCP | Inbound | 30000-32767 | NodePort Service | 全て |
** [NodePort Services](/ja/docs/concepts/services-networking/service/)のデフォルトのポートの範囲
[NodePort Service](/ja/docs/concepts/services-networking/service/)のデフォルトのポートの範囲
\*の項目は書き換え可能です。そのため、あなたが指定したカスタムポートも開いていることを確認する必要があります。
@@ -102,29 +120,39 @@ etcdポートはコントロールプレーンノードに含まれています
## ランタイムのインストール {#installing-runtime}
v1.6.0以降、KubernetesはデフォルトでCRI(Container Runtime Interface)の使用を有効にしています。
Podのコンテナを実行するために、Kubernetesは{{< glossary_tooltip term_id="container-runtime" text="container runtime" >}}をコンテナランタイムとして使用します。
また、v1.14.0以降、kubeadmは既知のドメインソケットのリストをスキャンして、Linuxノード上のコンテナランタイムを自動的に検出しようとします。検出可能なランタイムとソケットパスは、以下の表に記載されています。
{{< tabs name="container_runtime" >}}
{{% tab name="Linux nodes" %}}
| ランタイム | ドメインソケット |
|------------|----------------------------------|
| Docker | /var/run/docker.sock |
| containerd | /run/containerd/containerd.sock |
| CRI-O | /var/run/crio/crio.sock |
デフォルトでは、Kubernetesは選択されたコンテナランタイムと通信するために{{< glossary_tooltip term_id="cri" text="Container Runtime Interface">}} (CRI)を使用します。
ランタイムを指定しない場合、kubeadmはよく知られたドメインソケットのリストをスキャンすることで、インストールされたコンテナランタイムの検出を試みます。
次の表がコンテナランタイムと関連するソケットのパスリストです。
{{< table caption = "コンテナランタイムとソケットパス" >}}
| ランタイム | ドメインソケットのパス |
|------------|-----------------------------------|
| Docker | `/var/run/docker.sock` |
| containerd | `/run/containerd/containerd.sock` |
| CRI-O | `/var/run/crio/crio.sock` |
{{< /table >}}
<br />
Dockerとcontainerdの両方が同時に検出された場合、Dockerが優先されます。Docker 18.09にはcontainerdが同梱されており、両方が検出可能であるため、この仕様が必要です。他の2つ以上のランタイムが検出された場合、kubeadmは適切なエラーメッセージで終了します。
Linux以外のノードでは、デフォルトで使用されるコンテナランタイムはDockerす。
kubeletは、組み込まれた`dockershim`CRIを通してDockerと連携します。
もしコンテナランタイムとしてDockerを選択した場合、`kebelet`内に組み込まれた`dockershim` CRIが使用されます
詳細は、[コンテナランタイム](/ja/docs/setup/production-environment/container-runtimes/)を参照してください
{{% /tab %}}
{{% tab name="other operating systems" %}}
デフォルトでは、kubeadmは{{< glossary_tooltip term_id="docker" >}}をコンテナランタイムとして使用します。
kubeletは、組み込まれた`dockershim`CRIを通してDockerと連携します。
その他のCRIに基づくランタイムでは以下を使用します
詳細は、[コンテナランタイム](/ja/docs/setup/production-environment/container-runtimes/)を参照してください。
{{% /tab %}}
{{< /tabs >}}
- [containerd](https://github.com/containerd/cri) (CRI plugin built into containerd)
- [cri-o](https://cri-o.io/)
- [frakti](https://github.com/kubernetes/frakti)
詳細は[CRIのインストール](/ja/docs/setup/production-environment/container-runtimes/)を参照してください。
## kubeadm、kubelet、kubectlのインストール
@@ -142,7 +170,7 @@ kubeadmは`kubelet`や`kubectl`をインストールまたは管理**しない**
`kubectl`のインストールに関する詳細情報は、[kubectlのインストールおよびセットアップ](/ja/docs/tasks/tools/install-kubectl/)を参照してください。
{{< warning >}}
これらの手順はシステムアップグレードによるすべてのKubernetesパッケージの更新を除きます。これはkubeadmとKubernetesが[アップグレードにおける特別な注意](docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)を必要とするからです。
これらの手順はシステムアップグレードによるすべてのKubernetesパッケージの更新を除きます。これはkubeadmとKubernetesが[アップグレードにおける特別な注意](/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/)を必要とするからです。
{{</ warning >}}
バージョン差異(version skew)に関しては下記を参照してください。
@@ -175,7 +203,7 @@ repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
# Set SELinux in permissive mode (effectively disabling it)
# SELinuxpermissiveモードに設定する(効果的に無効化する)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
@@ -186,23 +214,15 @@ systemctl enable --now kubelet
**Note:**
- Setting SELinux in permissive mode by running `setenforce 0` and `sed ...` effectively disables it.
This is required to allow containers to access the host filesystem, which is needed by pod networks for example.
You have to do this until SELinux support is improved in the kubelet.
- Some users on RHEL/CentOS 7 have reported issues with traffic being routed incorrectly due to iptables being bypassed. You should ensure
`net.bridge.bridge-nf-call-iptables` is set to 1 in your `sysctl` config, e.g.
- `setenforce 0`および`sed ...`を実行することによりSELinuxをpermissiveモードに設定し、効果的に無効化できます。
これはコンテナがホストのファイルシステムにアクセスするために必要です。例えば、Podのネットワークに必要とされます。
kubeletにおけるSELinuxのサポートが改善されるまでは、これを実行しなければなりません。
- もし、設定する方法を知っていればSELinuxを有効にしたままにもできますが、kubeadmがサポートされない設定が必要になるかもしれません。
```bash
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
```
- Make sure that the `br_netfilter` module is loaded before this step. This can be done by running `lsmod | grep br_netfilter`. To load it explicitly call `modprobe br_netfilter`.
{{% /tab %}}
{{% tab name="Container Linux" %}}
Install CNI plugins (required for most pod network):
CNIプラグインをインストーする(ほとんどのPodのネットワークに必要です):
```bash
CNI_VERSION="v0.8.2"
@@ -210,7 +230,7 @@ mkdir -p /opt/cni/bin
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz" | tar -C /opt/cni/bin -xz
```
Install crictl (required for kubeadm / Kubelet Container Runtime Interface (CRI))
crictlをインストールする (kubeadm / Kubelet Container Runtime Interface (CRI)に必要です)
```bash
CRICTL_VERSION="v1.16.0"
@@ -218,7 +238,7 @@ mkdir -p /opt/bin
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz" | tar -C /opt/bin -xz
```
Install `kubeadm`, `kubelet`, `kubectl` and add a `kubelet` systemd service:
`kubeadm``kubelet``kubectl`をインストールし`kubelet`systemd serviceに登録します:
```bash
RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
@@ -233,7 +253,7 @@ mkdir -p /etc/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/10-kubeadm.conf" | sed "s:/usr/bin:/opt/bin:g" > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
```
Enable and start `kubelet`:
`kubelet`を有効化し起動します:
```bash
systemctl enable --now kubelet
@@ -243,20 +263,24 @@ systemctl enable --now kubelet
kubeadmが何をすべきか指示するまで、kubeletはクラッシュループで数秒ごとに再起動します。
## マスターノードのkubeletによって使用されるcgroupドライバーの設定
## コントロールプレーンノードのkubeletによって使用されるcgroupドライバーの設定
Dockerを使用した場合、kubeadmは自動的にkubelet向けのcgroupドライバーを検出し、それを実行時に`/var/lib/kubelet/kubeadm-flags.env`ファイルに設定します。
もしあなたが異なるCRIを使用している場合、`/etc/default/kubelet`(CentOS、RHEL、Fedoraでは`/etc/sysconfig/kubelet`)ファイル内の`cgroup-driver`の値を以下のように変更する必要があります
もしあなたが異なるCRIを使用している場合、ファイル内の`cgroupDriver`の値を以下のように変更する必要があります:
```bash
KUBELET_EXTRA_ARGS=--cgroup-driver=<value>
```yaml
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: <value>
```
このファイルは、kubeletの追加のユーザー定義引数を取得するために、`kubeadm init`および`kubeadm join`によって使用されます。
CRIのcgroupドライバーが`cgroupfs`でない場合に**のみ**それを行う必要があることに注意してください。なぜなら、これは既にkubeletのデフォルト値であるためです。
{{< note >}}
`--cgroup-driver`フラグがkubeletの非推奨になったため、フラグが`/var/lib/kubelet/kubeadm-flags.env`もしくは`/etc/default/kubelet`(RPMの場合は`/etc/sysconfig/kubelet`)にある場合は削除し、代わりにKubeletConfiguration(デフォルトでは`/var/lib/kubelet/config.yaml`に保管されています)を使用してください。
{{< /note >}}
kubeletをリスタートする方法:
```bash