UbuntuにKubernetesをインストールする方法

複数のサーバーへのDockerコンテナの手動デプロイは、非常に時間がかかり、その作業を担当するシステム管理者のスケジュールを圧迫してしまうことがあります。現代のIT業界では、クラウド、マイクロサービス、コンテナの人気が高まり続けており、こうした背景から、Kubernetesのようなソリューションが開発されました。

Kubernetesは、オープンソースのコンテナ管理およびオーケストレーションソリューションであり、分散環境でのコンテナデプロイを容易にし、コンテナ化されたアプリケーションに高可用性を提供するためのクラスターを構築することができます。このブログ記事では、Dockerコンテナでアプリケーションを実行するために、UbuntuにKubernetesをインストールする方法について解説します。

NAKIVO for VMware vSphere バックアップ

NAKIVO for VMware vSphere バックアップ

VMware vSphere 仮想マシン(VM)向けの包括的なデータ保護と即時復旧オプション。オンサイト、オフサイト、およびクラウド上の安全なバックアップ先。ランサムウェア対策機能。

Ubuntu に Kubernetes をインストールするための要件とシステム構成

Kubernetesクラスタは、マスターノードとワーカーノードで構成されています。ハードウェア構成は、ユーザーのニーズや、Dockerコンテナで実行する予定のアプリケーションによって異なります。UbuntuにKubernetesをインストールするための最小ハードウェア要件は以下の通りです:

  • 少なくとも2コアのx86/x64 CPU(中央処理装置)
  • 2 GB以上のRAM(ランダムアクセスメモリ)
  • インターネット接続

UbuntuにKubernetesをインストールするために開く必要があるポート:

プロトコルとポート範囲 出典 目的 方向
TCP 443 ワーカーノード、エンドユーザー、APIリクエスト Kubernetes API サーバー マスターノードへの着信
TCP 10250 マスターノード ワーカーノードのKubeletヘルスチェックポート ワーカーノードへの着信
TCP 30000~32767 外部アプリケーションクライアント 外部サービスを提供するためのデフォルトのポート範囲
UDP 8285 ワーカーノード FlannelオーバーレイネットワークのUDPバックエンド
UDP 8472 ワーカーノード FlannelオーバーレイネットワークのVXLANバックエンド
TCP 179 ワーカーノード Calico BGP ネットワークを使用する場合にのみ必要
TCP 2379~2380 マスターノード etcd サーバーのクライアント API etcd ノードへの着信
TCP 2379~2380 ワーカーノード CalicoのFlannelを使用する場合に必要なetcdサーバーのクライアントAPI

Ubuntu にはデフォルトで iptables ファイアウォールがインストールされていますが、”初期状態”ではブロックルールは設定されていません。したがって、Kubernetes を試すために Ubuntu をインストールする場合、ファイアウォールルールを編集する必要はありません。 Kube-proxy はまず自身の iptables チェーンを配置し、その後 2 つの iptables ルールを挿入します。これらのルールは KUBE-EXTERNAL-SERVICES および KUBE-FIREWALL であり、INPUT チェーンの先頭に挿入されます。

Ubuntu への Kubernetes のインストールは、物理マシンと仮想マシンの両方で実行可能です。一般的な推奨事項として、最新バージョンの 64 ビット Ubuntu Linux を使用することが挙げられます。 本日のブログ記事では、VMware VM上で動作するUbuntu 18.04 LTSへのKubernetesのインストール方法について解説します。最初に説明するKubernetesのデプロイメントタイプは、マスターノード1台とワーカーノード2台を使用したKubernetesクラスターです。この例で使用されるマシンのノード数、ノードの役割、ホスト名、IPアドレスの条件については、以下の表をご覧ください。

ノードの役割 IPアドレス ホスト名
1 マスター 192.168.101.21 docker-nakivo21
2 労働者 192.168.101.31 docker-nakivo31
3 労働者 192.168.101.32 docker-nakivo32

VMware vSphere を使用する場合は、ESXi ホスト上で動作する仮想マシンを利用できます。また、Linux または Windows がインストールされた個人用コンピュータ上の VMware Workstation で仮想マシンを実行することも可能です。本日の例では、VMware Workstation 上で動作する仮想マシンを使用しています。仮想マシンでは NAT が使用されます ネットワーク インターネット接続が可能で、ご希望であれば VirtualBox VMware であれば、これを利用できます。

ホストマシンの IP アドレス: 10.10.10.53

NAT ネットワーク(VMNet8)の仮想ゲートウェイの IP アドレス: 192.168.101.2

すべてのUbuntuマシンに、同じLinuxユーザーが存在します: kubernetes-user

VMの設定: 2CPU、4GB RAM、20GBの仮想ディスク

以下の場所に移動することで、VMnet8のIPアドレスを変更できます。 Edit > Virtual Network Editor VMware Workstation にて。

理解を深めていただくため、本日の例では、Ansible などの自動化ツールを使用せず、すべてのコンポーネントを Linux 上に手動でインストールします。

Ubuntu VMの展開

“is”という名前の新しいVMを作成します docker-nakivo21.

最初のマシンにUbuntu 64ビットをインストールし、ホスト名とユーザー名を設定します。

VM名: docker-nakivo21

ユーザー名: kubernetes-user

Configuring host name and user name while setting up Ubuntu before installing Kubernetes on Ubuntu.

インストールしたオペレーティングシステムに初めてログインした後、VMware Tools をインストールしてください。物理マシンを使用している場合は、VMware Tools を使用する必要がないため、この手順をスキップできます。

注記: その $ 先頭の文字は、そのコマンドが一般ユーザーとして実行されることを意味します(kubernetes-user (この場合は)。文字列が # 文字の場合、コマンドは次のように実行する必要があります。 ルート. その sudo (“substitute user do”または”superuser do”) コマンドを使用すると、root を含む別のユーザーとしてコマンドを実行できます。次のように入力できます。 sudo -i コンソールでroot権限を取得します。rootモードを終了するには、Ctrl+Dを押してください。

VMware Toolsは、VMwareハイパーバイザーに付属のISOイメージから、またはLinuxのリポジトリからインストールできます(詳細は後述)。

$ sudo apt-get install open-vm-tools

クリップボードの共有やファイルのドラッグ&ドロップなど、高度なデスクトップ機能が必要な場合は、次のコマンドを実行してください:

$ sudo apt-get install open-vm-tools-desktop

VMを再起動してください。

$ init 6

Kubernetes をインストールする前に Ubuntu マシンを設定する

UbuntuマシンにKubernetesをインストールする前に、いくつかの準備を行う必要があります。まず、通常のサーバーと同様に、静的IPアドレスとホスト名を設定する必要があります。

静的IPアドレスを設定する

他の種類のクラスタについても、ノードで静的IPアドレスを使用することを強く推奨します。

IPアドレスを設定する前に、Linuxのネットワークツールをインストールしてください。

$ sudo apt-get install net-tools

種類 ifconfig Ubuntu VMの現在のIPアドレスを確認するには。

Checking network configuration on the node before installing Kubernetes on Ubuntu.

IPアドレスがDHCPを介して自動的に割り当てられていることがわかります。ネットワークインターフェースの名前を覚えておいてください。この例では、その名前は ens33. 最初のイーサネットネットワークインターフェースの名前は通常、 eth0 物理マシン用。

設定ファイルを編集するにはテキストエディタが必要です。インストールしてください。 vim テキストエディタとして。

$ sudo apt-get install vim

最新のUbuntuバージョンでは、ネットワーク設定はYAMLファイルで指定されます。vimでネットワーク設定のYAMLファイルを開きます。

$ sudo vim /etc/netplan/01-network-manager-all.yaml

設定ファイルのデフォルトの表示は次のとおりです:

Editing network settings on the node before installing Kubernetes on Ubuntu.

以下の例のように、このネットワーク設定ファイルを編集してください:

network:

version: 2

renderer: networkd

ethernets:

ens33:

dhcp4: no

addresses: [192.168.101.21/24]

gateway4: 192.168.101.2

nameservers:

addresses: [192.168.101.2,8.8.8.8]

変更を保存して終了します。

:wq

Network settings on the first node used for installing Kubernetes on Ubuntu

$ sudo netplan try

新しい設定を適用するには、Enter キーを押してください。

ネットワーク設定が変更されたかどうかを確認し、たとえば、ping を実行してみてください。 nakivo.com.

$ ifconfig

$ ping nakivo.com

Checking network configuration on the Kubernetes node after editing.

ホスト名の設定

現在のホスト名を確認してください。

$ hostnamectl

ご記憶の通り、最初のVMのホスト名は docker-nakivo21 インストール時にすでに設定済みです。ホスト名を変更するには、以下の手順を実行してください(これは、クローン作成後に2台目および3台目のVMを設定する際に必要になります。これら2台のVMは、ワーカーノードとして設定されることを想定しています):

たとえば、ホスト名を docker-nakivo21 最初のVMで、次のコマンドを実行します:

$ sudo hostnamectl set-hostname docker-nakivo21

新しいホスト名が適用されていることを確認してください。

$ less /etc/hostname

を編集する ホスト ファイル。

$ sudo vim /etc/hosts

hosts ファイルの内容は、次のように記述してください。

127.0.0.1 localhost

127.0.1.1 docker-nakivo21

マシンを再起動してください。

$ init 6

スワップファイルを無効にする

Kubernetes ではスワップファイル(スワップパーティション)の使用はサポートされておらず、Ubuntu に Kubernetes を正常にインストールするには、スワップニスを無効にする必要があります。

kubelet の CPU 使用率が高くなるのを防ぐため、スワップファイルを無効にしてください。

$ sudo swapoff -a

編集 /etc/fstab そして、次の方法を使ってその文字列をコメントアウトします。 # 文字。

$ sudo vim /etc/fstab

#/swapfile none swap sw 0 0

Disabling the swap partition before installing Kubernetes on Ubuntu

以下でも同じことができます。 sed たった1つのコマンドで:

$ sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab

スワップを無効にする sysctl.conf

$ sudo echo "vm.swappiness=0" | sudo tee --append /etc/sysctl.conf

ここで、0はスワップ使用率(パーセント)を表します。この設定の場合、RAMが不足しているときのみスワップが使用されます(デフォルトでは、RAMの60%以上が使用されている場合にスワップが使用されます)。

再起動せずに設定変更を適用します。

$ sudo sysctl -p

注記: スワップパーティションが無効化されていない場合、 kswapd0 Kubernetes を実行している Ubuntu Linux のプロセスは、マシン上の CPU リソースを大量に消費し、アプリケーションが応答しなくなったり、システムがフリーズしたりする原因となることがあります。これは、オペレーティングシステムのメモリが不足し、Linux カーネルのシステムプロセスによって古いメモリページがスワップ領域に移動されたときに発生します。奇妙なことに、時折問題が発生し、すべての CPU リソースを消費し続ける無限ループに陥ることがあります。以下のスクリーンショットでは、 kswapd0 UbuntuにKubernetesをインストールした際の処理。負荷平均値が異常に高くなっています。

For preventing CPU overloading by kswapd0 process disable the swap partition before installing Kubernetes on Ubuntu.

もし kswapd0 それでもCPUに過大な負荷がかかる場合は、以下のコマンドを実行してすべてのメモリキャッシュを無効化し、停止させてください kswapd0 (root 権限で実行)。

# echo 1 > /proc/sys/vm/drop_caches

VMをシャットダウンします。

$ init 0

この部分的に構成済みの仮想マシン(docker-nakivo21) をマスターノードとして使用します。ワーカーノードとして使用するマシンを2台作成します。物理マシンを使用する場合は、前述の手順を手動で繰り返してください(または、Ansible などの自動化ツールを使用して、SSH 経由で複数の Linux マシンを同時に設定することもできます)。今回の例では仮想マシン(VM)を使用しているため、Ubuntu マシンに Kubernetes をインストールするための環境準備にかかる時間を短縮するために、VM をクローンすることができます。

VMをクローンする

最初のVMをクローンします。VMware ESXiを使用している場合は、組み込みのクローン機能を利用できます。この件に関する詳細は、当社のブログ記事” VMテンプレートを使用したVMのクローン作成. VMware Workstation を使用している場合は、2つの方法(組み込みのクローンツールと手動)でVMをクローンすることもできます。[クリック] VM > Manage > Clone リンククローンを作成します。最初のVMのフルクローンを作成し、VMファイルを手動でコピーしてみましょう。この場合、ファイルは docker-nakivo21 ディレクトリを docker-nakivo31. VMファイルをコピーする前に、ディレクトリを手動で作成する必要があります。

Cloning the Ubuntu VM by copying VM files for creating worker nodes to install Kubernetes on Ubuntu.

VM名と仮想ディスクファイルへのパスが変更されたため、VMXファイルを編集してください。

displayName = "docker-nakivo31"

scsi0:0.fileName = "C:VirtualKUBERNETESdocker-nakivo31docker-nakivo31.vmdk"

nvram = "docker-nakivo31.nvram"

Editing the VMX file of the VM clone.

最初のワーカーノードとして使用するVMが作成されました。Kubernetesクラスタの2番目のワーカーノードを準備するために、最初のVMをもう一度クローンしてください。

3番目のVM(2番目のワーカーノード)のVMXファイルを、先ほど行ったのと同じように編集してください。

displayName = "docker-nakivo32"

scsi0:0.fileName = "C:VirtualKUBERNETESdocker-nakivo31docker-nakivo32.vmdk"

nvram = "docker-nakivo32.nvram"

VMware Workstation で VM のクローンを開きます(File> Open (VMのVMXファイルを選択するか)、あるいはVMのVMXファイルをダブルクリックします。3台の仮想マシン(元のVM 1台とVMのクローン2台)の電源を入れます。[クリック] コピーしました, プロンプトが表示されたら。

注記: 仮想マシンを使用している場合は、VMのクローン作成が完了したら、各VMクローンのIPアドレスとホスト名を編集してください。物理マシンを使用している場合は、各マシンのIPアドレスとホスト名に合わせて、前述の手順をすべて実行してください。

仮想マシン(VM)でのIPアドレスとホスト名の設定

のIPアドレスとホスト名を変更する docker-nakivo31 そして docker-nakivo32 VM(上記参照)。

上記のセクションで説明した手順を繰り返して、静的IPアドレスとホスト名を設定してください。

IPアドレスは次の通りである必要があります: 192.168.101.31 そして 192.168.101.32; ホスト名は docker-nakivo31 そして docker-nakivo32 それに応じて、ワーカーノードでも同様の設定を行います。

すべてのマシンは、ノードのホスト名をIPアドレスに解決できるよう設定する必要があります。DNSサーバーを設定するか、手動で ホスト 各マシン上のファイルです。編集してみましょう ホスト.

以下の文字列を ホスト 各マシン上のファイル(docker-nakivo21, docker-nakivo31, docker-nakivo32).

$ sudo vim /etc/hosts

これらの行を ホスト ファイル:

192.168.101.21 docker-nakivo21

192.168.101.31 docker-nakivo31

192.168.101.32 docker-nakivo32

Installing Kubernetes on Ubuntu - configuring etchosts on all cluster nodes before Kubernetes setup

各ホストから他のホストに対してpingを実行し、ホスト名が正しく解決されることを確認します:

$ ping docker-nakivo21

$ ping docker-nakivo31

$ ping docker-nakivo32

すべてのホスト(VM)でSSHアクセスを設定する

すべてのホストでSSHアクセスを設定します。各マシンで以下のコマンドを実行して、OpenSSHサーバーをインストールしてください。

$ sudo apt-get install openssh-server

のホームディレクトリに移動します kubernetes-user そして、SSH鍵ペア(秘密鍵と公開鍵からなる暗号鍵のセット)を生成します。SSH鍵ペアを使用すると、パスワードを使用せずにSSH経由でリモートのLinuxコンソールにアクセスできます。公開鍵は、リモート接続を行う側のマシンにコピーできますが、秘密鍵は極秘情報であるため、接続先のマシンに保存しておく必要があります。

$ ssh-keygen

鍵の生成にはパスワードを入力する必要はありません(パスワードは任意です)。

他のUbuntuマシンに鍵をコピーします:

$ ssh-copy-id kubernetes-user@192.168.101.31

$ ssh-copy-id kubernetes-user@192.168.101.32

キーのコピーを確認するために、ユーザーパスワードを入力してください。

2台目のマシンへの接続を試みてください(docker-nakivo31) として kubernetes-user (つまり、一般ユーザーです)。

$ ssh 'kubernetes-user@192.168.101.31'

次に、3台目のマシンへの接続をテストします(docker-nakivo32).

$ ssh 'kubernetes-user@192.168.101.32'

接続に成功すると、コンソールのコマンドプロンプトにリモートマシンの名前が表示されます。

Installing Kubernetes on Ubuntu – using SSH access for accessing one node from another.

Ctrl+D キーを押して、リモートコンソールを終了してください。

root ユーザーとして SSH 経由で接続するための鍵をコピーするにはどうすればよいですか?

Kubernetes では root 権限が必要となるため、root ユーザーによる SSH アクセスを設定するための鍵を作成しましょう。root ユーザーとして SSH 経由でアクセスする必要があるすべてのマシン(docker-nakivo21、docker-nakivo31、docker-nakivo32)で、以下のコマンドを実行してください。

$ sudo -i

SSHサーバーの設定ファイルを編集します。

# vim /etc/ssh/sshd_config

このファイルに、以下の文字列を追加または編集してください。

PermitRootLogin yes

Setting the PermitRootLogin option during SSH configuration

SSH サーバーデーモンを再起動します。

# /etc/init.d/ssh stop

# /etc/init.d/ssh start

root パスワード(root ユーザーのパスワード)を設定します。

# passwd

$ cd /home/kubernetes-user/

$ sudo ssh-keygen -t rsa

SSH 経由で root としてリモートログインできるように、公開鍵をコピーしてください(前のコマンドは一般ユーザーのホームディレクトリから実行されたため、鍵はそのディレクトリに保存されています)。

$ sudo ssh-copy-id -i /home/kubernetes-user/.ssh/id_rsa.pub 127.0.0.1

鍵がrootユーザーのホームディレクトリに保存されている場合は、次のコマンドで鍵をコピーしてください:

# ssh-copy-id -i /root/.ssh/id_rsa.pub 127.0.0.1

この操作を確認し、パスワードを入力してください。

各マシンからキーをコピーして他のマシンに貼り付けるという操作を繰り返してください。たとえば、 docker-nakivo21 マシン実行:

# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.101.31

# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.101.32

公開鍵を承認します。

# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

ローカルマシンでSSH経由でrootとしてログインできるかどうかを確認してください。

$ sudo ssh root@127.0.0.1

パスワードを入力せずに、リモートマシンとの接続を試みてください。

$ sudo ssh root@192.168.101.21

$ sudo ssh root@192.168.101.31

$ sudo ssh root@192.168.101.32

注記: root ユーザーとして接続するのは安全ではない可能性があります。必要がない場合は root ユーザーとして接続しないでください。一般ユーザーとして SSH 経由で接続し、 sudo コマンド。

Dockerのインストール

Docker は、Kubernetes でサポートされているエンタープライズ向けアプリケーション用コンテナプラットフォームの中で最も普及しているものです。すべてのマシンに Docker をインストールしてください。以下のコマンドを docker-nakivo21, docker-nakivo31, docker-nakivo32.

とはいえ、急ぐ必要はありません。まずは、以下の一般的なコマンドを使って Docker をインストールしてみてください:

$ sudo apt-get install -y docker.io

とはいえ、このケースでは、使用されている Docker のバージョンが最新ではない可能性があります。そこで、Docker の最新バージョンをインストールして、この問題を解決しましょう。

まず、必要なパッケージをインストールします。

$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

Curl は、サポートされているプロトコル(HTTP、HTTPS、FTP、FTPS、SFTP、LDAP、LDAPS、IMAP、IMAPS、POP3、POP3S、SCP、SMB、SMTP、TELNET など)のいずれかを使用して、ユーザーの操作を必要とせずにホストとの間でデータを転送するために設計された、汎用的なコンパクトなツールです。

Ubuntu システムに、公式 Docker リポジトリの GPG 鍵を追加します:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

コンソールの出力は次の通りでなければなりません。 OK.

apt パッケージマネージャーに Docker の公式リポジトリを追加します:

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

前のコマンドで手動での変更を行った後、パッケージマネージャーのデータベースを更新してください。

$ sudo apt-get update

公式リポジトリで利用可能な Docker パッケージのバージョンを確認してください。

$ apt-cache policy docker-ce

Docker をインストールします。

$ sudo apt-get install docker-ce

インストール後、Dockerのバージョンを確認できます。

$ docker --version

この場合、出力は次のようになります: Docker バージョン 18.09.6、ビルド 481bc77.

Docker を起動し、システムの起動時に Docker デーモンが自動的に読み込まれるように設定します。

$ sudo systemctl start docker

$ sudo systemctl enable docker

すべてのマシンにDockerをインストールしたら、すぐにUbuntuへのKubernetesのインストール手順に進むことができます。

UbuntuへのKubernetesのインストールとクラスタの初期化

これで、Kubernetes のコアコンポーネントをインストールする準備が整いました。

Kubernetes クラスタに含めるすべてのマシンで、root 権限で以下のコマンドを実行してください。

$ sudo -i

Ubuntu システムに、Docker の公式リポジトリの GPG キーを追加します:

# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

apt パッケージマネージャーで使用可能なパッケージリポジトリのデータベースに、Kubernetes の公式リポジトリを追加します。

# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list

deb http://apt.kubernetes.io/ kubernetes-xenial main

EOF

あるいは、次のコマンドでリポジトリを追加することもできます:

# echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list

どこで Tシャツ 標準入力を読み取り、その入力データを標準出力および指定されたファイルに書き出すツールです。

Ubuntu システム上で利用可能なリポジトリのパッケージ一覧を更新します。

# apt-get update

Installing Docker before installing Kubernetes on Ubuntu

インストール kubectl, kubeadm そして kubectl UbuntuにKubernetesをインストールするには、これが不可欠です。

# apt-get install -y kubelet kubeadm kubectl

keepalived をインストールします。

# apt-get install keepalived

# systemctl enable keepalived && systemctl start keepalived

その値が 1 UbuntuにインストールされたKubernetesが正常に動作するために。

# sysctl net.bridge.bridge-nf-call-iptables

この値を 1 次のコマンドを実行してください:

sysctl net.bridge.bridge-nf-call-iptables=1

kubeadm の設定ファイルを編集します。

# vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

既存の”Environment”文字列の後に、次の文字列を追加してください:

Environment=”cgroup-driver=systemd/cgroup-driver=cgroupfs”

Installing Kubernetes on Ubuntu – configuring kubeadm

Cgroupsとは、プロセッサ、メモリ、ディスクの入出力、ネットワークなどのリソース使用量を隔離するための制御グループのことです。

マスターノードでは(docker-nakivo21) Ubuntu上でKubernetesクラスタを初期化するコマンドを実行します。

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

どこで

–pod-network-cidr Flannel ドライバーではこれが必須です。CIDR(Classless Inter-Domain Routing)は、後で設定するオーバーレイネットワーク(Flannel など)のアドレスを定義します。ネットワークマスクは、ノードごとに実行できるポッドの数も定義します。CIDR ネットワークアドレスと Flannel で使用されるネットワークアドレスは、同一でなければなりません。

–apiserver-advertise-address=192.168.101.21 Kubernetes が API サーバーとしてアドバタイズする IP アドレスを定義します。

Installing Kubernetes on Ubuntu – cluster initialization.

テキストの最後に表示される出力と保存コマンドを確認してください。これは重要なポイントです。生成されたトークンは、Kubernetes クラスタにワーカーノードを追加するために必要です。

以下のコマンドを、実行権限を持つユーザーとして実行してください。 kubeadm init. この場合、コマンドはroot権限で実行されます。

# mkdir -p $HOME/.kube

# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# sudo chown $(id -u):$(id -g) $HOME/.kube/config

これらのコマンドを実行しないと、Kubernetes から次のエラーが返されます:”サーバー localhost:8080 への接続が拒否されました – 正しいホストまたはポートを指定しましたか?”

Kubernetes はこの内容をコピーしません 設定 ユーザーディレクトリに自動的に保存されます。この操作は手動で行う必要があります。

Installing Kubernetes on Ubuntu – This connection to the server localhost 8080 was refused

クラスタに追加されたノードを確認する

# kubectl get nodes

Installing Kubernetes on Ubuntu – checking cluster nodes

次の内容を持つマスターノードが1つ確認できます。 NotReady Ubuntuにインストール中のKubernetesクラスタにおけるステータスです。これは、オーバーレイネットワークが設定されていないことが原因です。この問題を解決するには、Flannelを設定してください。 NotReady Kubernetes マスターノードの状態。Docker および Kubernetes の YAML ファイルを保存するディレクトリを作成します。例えば、 /home/kubernetes-user/kubernetes/

YAML(Yet Another Markup Language)を使用すると、Kubernetes でのポッドやデプロイメントの作成がより便利になります。Linux コンソールで各コマンドを手動で実行する代わりに、デプロイする必要のあるコンテナのすべてのパラメータを YAML 設定ファイルで定義することができます。YAML ファイルは、Kubernetes の文脈ではマニフェストファイルとも呼ばれます。

以下の内容を含む YAML 設定ファイルを作成してください:

kube-flannel.yml

コマンド”

“を実行してください # kubectl apply -f ./kube-flannel.yml

あるいは、GitHub上で、Kubernetes用のYAMLデプロイメント設定の既成の無料サンプルを見つけることもできます。

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

Ubuntu上でデプロイしているKubernetesクラスタに追加されたノードを確認してください:

# kubectl get nodes

マスターノードのステータスは現在”Ready”となっています。

Installing Kubernetes on Ubuntu – the master node is ready

Flannelが正しく設定されていることを確認してください:

# kubectl get pods --all-namespaces

Checking pods of the Kubernetes cluster after passing the error Unable to connect to the server net http TLS handshake timeout

Flannel ポッドが実行されていることが確認できます。このポッドは、Flannel デーモンと、CNI 設定を Kubernetes が読み取れる場所にデプロイするために使用される initContainer の 2 つのコンテナで構成されています。

Ubuntu に Kubernetes をインストールする際、次のようなエラーが発生することがあります:

サーバーに接続できません:net/http: TLS ハンドシェイクのタイムアウト。

この問題を解決するにはどうすればよいでしょうか?数秒待ってから再試行してください。多くの場合、これで解決します。

ネームスペースは、Kubernetes クラスタ内の論理的なエンティティであり、クラスタリソースを表し、仮想クラスタと見なすことができます。1つの物理クラスタを論理的に複数の仮想クラスタに分割することができます。Kubernetes のデフォルトのネームスペースは デフォルト, Kube-public、および Kube-system. 名前空間の一覧は、

から取得できます。 # kubectl get namespaces

ご存じのとおり、Kubernetesにおける基本的なデプロイメント単位は”Pod”であり、これはネットワークおよびマウントネームスペースを共有するコンテナの集合体です。Podに含まれるすべてのコンテナは、同じKubernetesノード上にスケジューリングされます。利用可能なPodを確認するには、次のように実行します:

# kubectl -n kube-system get pods

Checking available pods in Kubernetes

クラスタをリセットまたは停止したい場合は、次のコマンドを実行してください:

# kubeadm reset

マスターノードではすべて正常です。つまり、UbuntuへのKubernetesのインストールを続行し、クラスタへのワーカーノードの追加に移ることができます。

ワーカーノード上で(docker-nakivo31, docker-nakivo32) 次のコマンドを実行してください:

# kubeadm join 192.168.101.21:6443 --token d8mbzb.uulxu01jbty8yh4z

--discovery-token-ca-cert-hash sha256:65ace7a4ff6fff795abf086f18d5f0d97da71d4639a0d0a6b93f42bea4948a79

クラスタの初期化後、トークンとハッシュが記録されました。 kubeadm init コマンドです。ご記憶の方もおられるかもしれませんが。

マスターノードで、クラスタの状態を再度確認してください。

# kubectl get nodes

Installing Kubernetes on Ubuntu – all nodes are added and ready

これで、Ubuntuマシン上で実行されているKubernetesクラスタに、マスターノード1台とワーカーノード2台があることが確認できます。

Kubernetesの設定を確認するには、以下を実行してください:

# kubectl cluster-info

Installing Kubernetes on Ubuntu – viewing the cluster info

Kubernetes での Pod のデプロイ

これで、Kubernetes クラスターにコンテナを含むポッドをデプロイできるようになりました。ご存じのとおり、Kubernetes ではコンテナはポッドに含まれます。YAML ファイルを使用する場合は、管理しやすくするために、そのファイルを保存するディレクトリを作成してください。そのディレクトリに移動し、次のようなコマンドを実行します。 kubectl apply -f test.yaml

Flannel の設定時に、このようなディレクトリはすでに作成されています – /home/kubernetes-user/kubernetes/

新しいポッドをデプロイする時が来ました。まず、デプロイメントを作成する必要があります。デプロイメントとは、ポッドやレプリカセットに対して宣言型の更新を行うために使用されるコントローラーの概念です。デプロイメントは、1つのコマンドを実行するか、YAMLファイルを使用して作成できます。

例 1 – MySQL の導入

この例では、YAMLファイルを作成してみましょう。ファイル名は mysql-deployment.yaml

設定内容については、添付ファイルをご覧ください。

# vim mysql-deployment.yaml

リソースを管理するには、主に以下の2つの一般的なアプローチがあります。 kubectl. 以下の2つの違いは何ですか? kubectl create そして kubectl apply? を使用する際は kubectl create, Kubernetes に作成、置換、削除したい対象を指定します。このコマンドを実行すると、すべての変更内容が上書きされます。あるいは、 kubectl apply 段階的な変更を行い、このコマンドを使用すると、ライブオブジェクトに適用された変更を保存できます。

デプロイを作成します:

# kubectl apply -f ./mysql-deployment.yaml

Installing Kubernetes on Ubuntu – Creating the MySQL deployment

Kubernetes では、デプロイメントに関する情報を表示できます。

# kubectl describe deployment mysql

ポッドを確認:

# kubectl get po

または

# kubectl get pods

または

# kubectl get pods -l app=mysql

ポッドのステータスが”保留中”となっている場合は、コンピューティングリソースが不足している可能性があります。Kubernetes でポッドの”保留中”ステータスを解消するには、CPU およびメモリ容量を追加してみてください。

Installing Kubernetes on Ubuntu – getting the list of services and pods

必要に応じて、このサービスを削除することができます:

# kubectl delete service <service_name>

ポッドを削除することもできます:

# kubectl delete pod mysql-7b9b7999d8-nz5tm

例 2 – nginx のデプロイ

YAML ファイルを使わない別の方法で nginx をデプロイしてみましょう。

デプロイを作成します。

# kubectl create deployment nginx --image=nginx

デプロイが作成されたことを確認してください。

# kubectl get deployments

サービスを作成します。

# kubectl create service nodeport nginx --tcp=80:80

サービスは、ClusterIP、NodePort、LoadBalance、ExternalName の各サービスタイプを使用して作成できます。NodePort タイプを使用する場合、提供されるサービスへのアクセス用に 30000~32767 の範囲からランダムなポートが割り当てられます。このポートに送信されたトラフィックは、必要なサービスに転送されます。

サービスが作成され、定義されたポートでリスニングしていることを確認してください。

# kubectl get svc

Installing Kubernetes on Ubuntu – creating the nginx deployment

ポート番号(この場合は 31453)を覚えておいてください。

サービスがデプロイされ、利用可能かどうかを確認します(この例では、マスターノードでコマンドを実行します)。前の手順で控えておいたノードのホスト名とポート番号を使用してください。

# curl docker-nakivo31:31453

また、どのノードのブラウザからでもサービスにアクセスできるかを確認することもできます。Webブラウザのアドレスバーで、以下のページにアクセスしてみてください:

http:// 10.101.235.90

または

http://docker-nakivo31:31453

http://docker-nakivo32:31453

問題がなければ、nginxのウェルカムページが表示されます。

Nginx id deployed in Kubernetes after installing Kubernetes on Ubuntu

また、Kubernetes ノードが接続されているネットワークにアクセスできる任意のマシンから、nginx のテストページにアクセスすることも可能です—(192.168.101.0/24) この場合。たとえば、ブラウザを使って以下のWebページにアクセスできます:

http://192.168.101.21:31453/

http://192.168.101.31:31453/

http://192.168.101.32:31453/

Kubernetes を監視するための Web インターフェースの設定

UbuntuへのKubernetesのインストールはほぼ完了しましたが、さらに使いやすくするためにKubernetesダッシュボードをインストールすることもできます。Kubernetesダッシュボードは、Kubernetesの管理や監視を行うためのWebインターフェースです。ダッシュボードをインストールするには、 kubernetes-dashboard.yaml ファイルは、以前コマンドを実行する前にやったのと同じように処理してください。

# kubectl create -f ./kubernetes-dashboard.yaml

# kubectl apply -f ./kubernetes-dashboard.yaml

ポッドを確認してください。

# kubectl get pods -o wide --all-namespaces

Kubernetes API サーバーへのプロキシを起動します。

# kubectl proxy

Deploying Kubernetes dashboard after installing Kubernetes on Ubuntu

コンソールで次のコマンドを入力するには、別のコンソールウィンドウを開いてください。そうしないと、プロセスが終了してしまいます。

マスターノードのWebブラウザで、次のページにアクセスしてください:

http://localhost:8001

テストページが表示されます。

Deploying Kubernetes dashboard

Webブラウザのアドレスバーに完全なアドレスを入力してください。

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Installing Kubernetes on Ubuntu – the dashboard in installed

新しいコンソールウィンドウで以下のコマンドを実行し、サービスアカウントを使用してダッシュボードを作成します。

# kubectl create serviceaccount dashboard -n default

# kubectl create clusterrolebinding dashboard-admin -n default

--clusterrole=cluster-admin

--serviceaccount=default:dashboard

# kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 –decode

これで、生成されたトークンを確認できます:

Generating a token needed to log in Kubernetes dashboard

生成されたトークンをコピーし、Webインターフェースのトークン欄に貼り付けて、ダッシュボードにログインしてください。

Enter the token to log in Kubernetes dashboard.

以下のスクリーンショットは、KubernetesダッシュボードのWebインターフェースです。ノード、デプロイメント、ポッドの状態を確認できるほか、ロール、ストレージクラス、その他のコンポーネントも確認できます。

The main page of Kubernetes dashboard.

監視ツール”Heapster”の設定

Heapster をインストールして、CPU やメモリ、その他の監視パラメータを追加し、Kubernetes ダッシュボードの監視機能を拡張します。次の名前を持つマニフェストファイルを作成します。 heapster.yaml.

# vim heapster.yaml

次の手順として、Heapster をデプロイします。

# kubectl create -f heapster.yaml

HeapsterのRBAC(ロールベースのアクセス制御)ロールを編集し、ノードの統計情報にアクセスするための権限を追加します。

# kubectl edit clusterrole system:heapster

Installing Kubernetes on Ubuntu – deploying Heapster

コンソールで CPU およびメモリのメトリクスが測定できることを確認してください。

# kubectl top node

Installing Docker on Kubernetes – measuring CPU and memory consumption of cluster nodes

これで、KubernetesダッシュボードのWebインターフェースを開くと、CPU使用率やメモリ使用率のグラフなど、いくつかのセクションが追加されていることが確認できます。

The web interface of Kubernetes dashboard after deploying Heapster.

これで、Kubernetes クラスターの設定が完了し、使用可能な状態になりました。

Ubuntu上で、複数のマスターを持つ高可用性Kubernetesクラスタを展開する

マスターノードが1つ、ワーカーノードが数台あるKubernetesクラスターは有効な選択肢ですが、ハードウェアの問題や停電などの理由で、唯一のマスターノードが障害を起こす場合があります。UbuntuノードにデプロイされたKubernetesクラスターの耐障害性を高めるには、複数のマスターノードを備えた高可用性(HA)Kubernetesクラスターのデプロイを検討することをお勧めします。このKubernetesクラスターのデプロイモデルを採用することで、単一障害点を回避できます。 マスターノードの数は奇数にすることを推奨します。また、耐障害性を確保できる最小のマスターノード数は3つです。3つ以上のマスターノードを使用する場合、その数が偶数であっても、クラスタ全体の耐障害性は向上しません。 Kubernetesクラスタのマスターノード数に応じた耐障害性の比較については、以下の表を参照してください。たとえば、マスターノードが5つあるクラスタの場合、3つのマスターノードが稼働し続けるため、2つのマスターノードが障害を起こしてもクラスタは存続できます(5つのうち3つは50%を超え、過半数を占めるため)。ここでいうクラスタサイズとは、クラスタ内のマスターノード数を指します。

クラスタサイズ 過半数 フォールトトレランス
1 1 0
2 2 0
3 2 1
4 3 1
5 3 2
6 4 2
7 4 3
8 5 3
9 5 4

本日のブログ記事のこのセクションでは、Kubernetesの高可用性(HA)クラスタ、HAプロキシ、およびいくつかのワーカーノードを展開する枠組みの中で、UbuntuノードにKubernetesをインストールする方法について解説します。以下の表には、この例で説明するテストラボにおいて、Ubuntuノード上にHA Kubernetesクラスタをインストールするために使用されるホストのIPアドレス、ホスト名、および役割が記載されています。

ノードの役割 IPアドレス ホスト名
1 マスター 192.168.101.21 docker-nakivo21
2 マスター 192.168.101.22 docker-nakivo22
3 マスター 192.168.101.23 docker-nakivo23
4 HA Proxy 192.168.101.19 ha-proxy19
5 労働者 192.168.101.31 docker-nakivo31
6 労働者 192.168.101.32 docker-nakivo32

一部のコマンドは、1つのマスターノードモデルを使用してUbuntuにKubernetesをインストールする場合と同じです。このため、一部のコマンドに関する説明は繰り返しません。このページを上にスクロールして、コマンドの説明を確認してください。

以下の手順に従って、すべてのマシン(HAプロキシ、マスターノード、およびワーカーノード)をKubernetesのインストールに備えて準備します。

  • 静的IPアドレスを設定します。
  • ホスト名を設定します。すべてのホスト名は、IP アドレスに解決されている必要があります。
  • SSH アクセスは、証明書を使用して有効化し、設定する必要があります。
  • スワップは無効にしておく必要があります。

これらの手順は、各マシンで Docker のインストールを開始する前に実行する必要があります。これは、上記のセクションで、1 台のマスターノードを使用して Ubuntu に Kubernetes をインストールする方法について説明された内容と非常によく似ています。すべてのマシンの準備が完了したら、(192.168.101.19).

HA Proxy ロードバランサーの設定

HA Proxy ロードバランサーは、Kubernetes ノード間でインバウンドトラフィックを分散するために使用されます。このロードバランサーは、マスターノードの前にデプロイされます。のコンソールを開きます。 ha-proxy19 マシンを起動し、以下の手順に従ってください。

cfssl をインストールする

Cfssl(Cloud Flare SSL)は、TLS/SSL証明書チェーンを含むさまざまな証明書を生成するために使用されるツールキットです。

公式リポジトリからバイナリをダウンロードしてください。

# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64

# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

ダウンロードしたバイナリファイルに実行権限を設定します。

# chmod +x cfssl*

これらのバイナリファイルを次の場所に移動してください /usr/local/bin/

# mv cfssl_linux-amd64 /usr/local/bin/cfssl

# mv cfssljson_linux-amd64 /usr/local/bin/cfssljson

インストールされた cfssl のバージョンを確認して、インストールが正常に行われたかを確認してください。

# cfssl version

リポジトリツリーを更新します。

# apt-get update

HA Proxy をインストールします。

# apt-get install haproxy

の作成と編集 haproxy.cfg ファイル。

# vim /etc/haproxy/haproxy.cfg

この設定ファイルの最後に、以下の行を追加してください。

frontend kubernetes

bind 192.168.101.19:6443

option tcplog

mode tcp

default_backend kubernetes-master-nodes

backend kubernetes-master-nodes

mode tcp

balance roundrobin

option tcp-check

server docker-nakivo21 192.168.101.21:6443 check fall 3 rise 2

server docker-nakivo22 192.168.101.22:6443 check fall 3 rise 2

server docker-nakivo23 192.168.101.23:6443 check fall 3 rise 2

Installing HA proxy for Kubernetes on Ubuntu – editing the haproxy.cfg file

サービスを再起動してください。

# systemctl restart haproxy

TSL証明書を生成する

HAプロキシマシンのコンソールは引き続き使用できます。証明書発行機関(CA)の設定ファイルを作成してください。そのファイル名は ca-config.json.

# vim ca-config.json

この設定ファイルに、以下の内容を追加してください:

{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"kubernetes": {
"usages": ["signing", "key encipherment", "server auth", "client auth"],
"expiry": "8760h"
}
}
}
}

認証局署名要求の設定ファイルを作成します。

# vim ca-csr.json

以下のとおり、このファイルに内容を追加してください:

{
“CN”: “Kubernetes”,
“key”: {
“algo”: “rsa”,
“size”: 2048
},
“names”: [
{
“C”: “GB”,
“L”: “London”,
“O”: “Kubernetes”,
“OU”: “CA”,
“ST”: “Nakivo”
}
]
}

ここで:

C – 国名(例:GB(イギリス))。

L – 都市や町などの所在地。

O – 組織。

OU – 組織単位(例:キーの所有者として定義されている部門など)。

ST – 州または県。

次に、公開鍵と秘密鍵を生成します。

# cfssl gencert -initca ca-csr.json | cfssljson -bare ca

以下の点を確認してください。 ca-key.pem そして、その ca.pem 鍵が生成されました。

# ls -al

Etcdクラスタ用の証明書の作成

Etcd は、クライアント証明書による認証を利用して、サーバー間およびクラスタ内の通信をサポートしています。クラスタのメンバー 1 台につき、CA 証明書と署名済みの鍵ペアを用意する必要があります。

証明書署名要求の設定ファイルを作成します。

# vim kubernetes-csr.json

{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "GB",
"L": "London",
"O": "Kubernetes",
"OU": "Kubernetes",
"ST": "Nakivo"
}
]
}

その後、証明書と秘密鍵を生成します。

# cfssl gencert

-ca=ca.pem

-ca-key=ca-key.pem

-config=ca-config.json

-hostname=192.168.101.21,192.168.101.22,192.168.101.23,192.168.101.19,127.0.0.1,kubernetes.default

-profile=kubernetes kubernetes-csr.json |

cfssljson -bare kubernetes

Generating the certificate and private key for the etcd cluster

ディレクトリ内のファイル一覧を表示して、 kubernetes-key.pem そして、その kubernetes.pem ファイルが生成されました。

# ls -al

作成した証明書を各ノードにコピーします。

# scp ca.pem kubernetes.pem kubernetes-key.pem kubernetes-user@192.168.101.21:~

# scp ca.pem kubernetes.pem kubernetes-key.pem kubernetes-user@192.168.101.22:~

# scp ca.pem kubernetes.pem kubernetes-key.pem kubernetes-user@192.168.101.23:~

# scp ca.pem kubernetes.pem kubernetes-key.pem kubernetes-user@192.168.101.31:~

# scp ca.pem kubernetes.pem kubernetes-key.pem kubernetes-user@192.168.101.32:~

# scp ca.pem kubernetes.pem kubernetes-key.pem kubernetes-user@192.168.101.33:~

どこで ~ は、のホームディレクトリです kubernetes-user Ubuntu ホスト上で。

Installing Kubernetes on Ubuntu in the HA mode – copying a certificate to each Ubuntu node

Kubernetesのインストールに向けたUbuntuノードの準備

このセクションに記載されているコマンドを、すべてのマスターノードおよびワーカーノードで実行してください。Docker をインストールした後、Kubernetes クラスタに含まれる Ubuntu マシンに Kubernetes をインストールします。まずは、以下の準備から始めましょう。 192.168.101.21 マスターノード。

Docker をインストールします。

# apt-get install apt-transport-https ca-certificates curl software-properties-common

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

# apt-get update

# apt-get install docker-ce

Dockerのインストールが完了しました。kubeadm、kublet、kubectlは、UbuntuにKubernetesをインストールするために必要なKubernetesコンポーネントです。

Kubernetesコンポーネント(kubeadm、kublet、kubectl)をインストールします。

# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

# echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# apt-get update

# apt-get install -y kubelet kubeadm kubectl

すべてのノードの準備が完了し、Docker、kubelet、kubeadm、kubectl のインストールが終わったら、マスターノードに etcd をインストールして設定する必要があります。

Ubuntu マスターノードへの etcd のインストールと設定

etcd は、一貫性と高可用性を備えたストアであり、キーの保存やクラスタデータのバックアップを目的としています。複数のマスターノードを持つ HA Kubernetes クラスタを構成する前に、etcd クラスタを設定しておく必要があります。まずは、 192.168.101.21 マスターノード。

Installing and configuring etcd on the 192.168.101.21 machine.

etcd用の設定ディレクトリを作成します。

# mkdir /etc/etcd /var/lib/etcd

証明書がコピーされたディレクトリに移動します。これはkubernetesユーザーのホームディレクトリであり、この場合は – /home/kubernetes-user/

証明書をetcdの設定ディレクトリにコピーします。

# cp ca.pem kubernetes.pem kubernetes-key.pem /etc/etcd

ファイルがコピーされたことを確認してください。

# ls -al /etc/etcd

前のディレクトリに戻る

# cd -

リポジトリから etcd のバイナリをダウンロードしてください。

# wget https://github.com/coreos/etcd/releases/download/v3.3.9/etcd-v3.3.9-linux-amd64.tar.gz

etcd アーカイブを解凍します。

# tar xvzf etcd-v3.3.9-linux-amd64.tar.gz

それでは、etcd のバイナリファイルを /usr/local/bin/

# mv etcd-v3.3.9-linux-amd64/etcd* /usr/local/bin/

etcd の systemd ユニットファイルを作成します。

# vim /etc/systemd/system/etcd.service

このファイルに、以下に示す文字列を追加してください。

[Unit]

Description=etcd

Documentation=https://github.com/coreos

[Service]

ExecStart=/usr/local/bin/etcd

--name 192.168.101.21

--cert-file=/etc/etcd/kubernetes.pem

--key-file=/etc/etcd/kubernetes-key.pem

--peer-cert-file=/etc/etcd/kubernetes.pem

--peer-key-file=/etc/etcd/kubernetes-key.pem

--trusted-ca-file=/etc/etcd/ca.pem

--peer-trusted-ca-file=/etc/etcd/ca.pem

--peer-client-cert-auth

--client-cert-auth

--initial-advertise-peer-urls https://192.168.101.21:2380

--listen-peer-urls https://192.168.101.21:2380

--listen-client-urls https://192.168.101.21:2379,http://127.0.0.1:2379

--advertise-client-urls https://192.168.101.21:2379

--initial-cluster-token etcd-cluster-0

--initial-cluster 192.168.101.21=https://192.168.101.21:2380,192.168.101.22=https://192.168.101.22:2380,192.168.101.23=https://192.168.101.23:2380

--initial-cluster-state new

--data-dir=/var/lib/etcd

Restart=on-failure

RestartSec=5

[Install]

WantedBy=multi-user.target

ファイルシステムから変更された設定を読み込み、依存関係ツリーを再生成するために、systemdマネージャーの設定を再読み込みします。

# systemctl daemon-reload

起動時にetcdを起動するように設定します。

# systemctl enable etcd

etcd を起動します。

# systemctl start etcd

2番目のマスターノードでも同じ操作を行ってください(docker-nakivo22192.168.101.21 そして docker-nakivo23192.168.101.22). これらのマスターノードに必要な操作で唯一異なる点は、 etcd.service 設定ファイル。他の各マスターノードに対して正しいIPアドレスを指定してください。たとえば、 etcd.service 2番目のマスターノードの設定ファイルは、以下のようになければなりません(192.168.101.22) 現在のKubernetesテストラボの。

[Unit]

Description=etcd

Documentation=https://github.com/coreos

[Service]

ExecStart=/usr/local/bin/etcd

--name 192.168.101.22

--cert-file=/etc/etcd/kubernetes.pem

--key-file=/etc/etcd/kubernetes-key.pem

--peer-cert-file=/etc/etcd/kubernetes.pem

--peer-key-file=/etc/etcd/kubernetes-key.pem

--trusted-ca-file=/etc/etcd/ca.pem

--peer-trusted-ca-file=/etc/etcd/ca.pem

--peer-client-cert-auth

--client-cert-auth

--initial-advertise-peer-urls https://192.168.101.22:2380

--listen-peer-urls https://192.168.101.22:2380

--listen-client-urls https://192.168.101.22:2379,http://127.0.0.1:2379

--advertise-client-urls https://192.168.101.22:2379

--initial-cluster-token etcd-cluster-0

--initial-cluster 192.168.101.21=https://192.168.101.21:2380,192.168.101.22=https://192.168.101.22:2380,192.168.101.23=https://192.168.101.23:2380

--initial-cluster-state new

--data-dir=/var/lib/etcd

Restart=on-failure

RestartSec=5

[Install]

WantedBy=multi-user.target

Kubernetes HA クラスタにおけるマスターノードの初期化

これで、UbuntuマシンにインストールされたKubernetes HAクラスタのマスターノードを初期化できるようになりました。

192.168.101.21 のマスターノードを初期化しています

最初のマスターノードで、以下に説明する一連の操作を実行してください。

kubeadm用のYAML設定ファイルを作成します。

# vim config.yaml

このファイルに設定パラメータを追加してください:

apiVersion: kubeadm.k8s.io/v1alpha3

kind: ClusterConfiguration

kubernetesVersion: stable

apiServerCertSANs:

- 192.168.101.19

controlPlaneEndpoint: "192.168.101.19:6443"

etcd:

external:

endpoints:

- https://192.168.101.21:2379

- https://192.168.101.22:2379

- https://192.168.101.23:2379

caFile: /etc/etcd/ca.pem

certFile: /etc/etcd/kubernetes.pem

keyFile: /etc/etcd/kubernetes-key.pem

networking:

podSubnet: 10.244.0.0/16

apiServerExtraArgs:

apiserver-count: "3"

podSubnet(10.244.0.0/16)として定義されたネットワークは、 kube-flannel.yml ファイル。

Ubuntuマシンをマスターノードとして初期化します。

# kubeadm init --config=config.yaml

設定ファイルの古いバージョンに関する警告が表示されることがあります:

設定ファイルでは、非推奨となったAPI仕様が使用されています: “kubeadm.k8s.io/v1alpha3″。’kubeadm config migrate –old-config old.yaml –new-config new.yaml’ を実行してください。これにより、新しいAPIバージョンを使用した、同様の仕様の新しい設定ファイルが作成されます。

以下のコマンドで設定ファイルのバージョンを更新してください:

# kubeadm config migrate --old-config config.yaml --new-config config1.yaml

Kubeadm init – your configuration file uses a deprecated API spec.

etcd が実行されていない状態で、マルチマスター Kubernetes クラスタのノードを初期化しようとすると、別のエラーが発生する可能性があります:

[ERROR ExternalEtcdVersion]: https://192.168.101.21:2379/version を取得: tcp 192.168.101.21:2379 に接続: 接続が拒否されました

Kubernetes kubeadm ERROR ExternalEtcdVersion

お使いの etcd が実行中です。次のコマンドを実行できます。 etcd 手動で:

# systemctl start etcd

Ubuntu上で動作するKubernetesクラスタのマスターノードの初期化が正常に完了すると、スクリーンショットに示されているような以下のメッセージが表示されます。

The first master node is initialized in the Kubernetes multi-node cluster.

このコマンドが正常に実行されると、クラスタの使用を開始する方法に関するヒントに加え、ノードをクラスタに参加させるために必要なトークンと証明書のハッシュを含むコマンドが表示されます。これらの重要な文字列は、すぐに必要となるため、必ず保存しておいてください。スクリーンショットでは黄色で強調表示されており、以下にも転載しています。

証明書発行機関をコピーすることで、任意の数のコントロールプレーンノードを結合できるようになりました

各ノードでサービスアカウントのキーを設定した後、root 権限で以下のコマンドを実行します:

kubeadm join 192.168.101.19:6443 --token sxm34y.p4rn4328vne0iihf

--discovery-token-ca-cert-hash sha256:bf3887f1565fcd48ff696da98a761ac1b70c6d38ba0ba3e4b1bf573000a302ca

--experimental-control-plane

その後、各ワーカーノードでroot権限で以下のコマンドを実行することで、任意の数のワーカーノードを参加させることができます:

kubeadm join 192.168.101.19:6443 --token sxm34y.p4rn4328vne0iihf

--discovery-token-ca-cert-hash sha256:bf3887f1565fcd48ff696da98a761ac1b70c6d38ba0ba3e4b1bf573000a302ca

以下のコマンドを実行して、クラスタ内で初期化済みのノードの使用を開始してください。

# mkdir -p $HOME/.kube

# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# sudo chown $(id -u):$(id -g) $HOME/.kube/config

クラスタに追加されたノードを確認します。

# kubectl get nodes

Installing Kubernetes on Ubuntu – the first master node is now added to Kubernetes HA cluster

証明書を他の2つのマスターノードにコピーします

# scp -r /etc/kubernetes/pki kubernetes-user@192.168.101.22:~

# scp -r /etc/kubernetes/pki kubernetes-user@192.168.101.23:~

192.168.101.22 のマスターノードを初期化中

2番目のマスターノード(192.168.101.22)で以下のコマンドを実行してください。

以下の apiserver.crt そして apiserver.key ホームディレクトリにあるもの(~) の kubernetes-user.

$ rm ~/pki/apiserver.*

ホームディレクトリに保存されている証明書を、 /etc/kubernetes/ ディレクトリ。

$ sudo mv ~/pki /etc/kubernetes/

kubeadm用の設定YAMLファイルを作成します。

# vim config.yaml

このYAMLファイルの内容は、最初のマスターノードの場合と同じです(192.168.101.21). 上記の最初のマスターノードの初期化設定を参照してください。UbuntuマシンにインストールされたKubernetes HAクラスタの最初のマスターノードで使用されている、すでに作成済みのファイルをコピーすることができます。

2番目のマスターノードを初期化します。

# kubeadm config migrate --old-config config.yaml --new-config config1.yaml

# kubeadm init --config=config1.yaml

出力は、Kubernetes HA クラスタで最初のマスターノードの初期化後に表示された出力と同じです:

The second master node is initialized in the Kubernetes HA cluster running on Ubuntu machines.

同様に、クラスタ内で初期化済みのノードの使用を開始するためのコマンドを実行します。

# mkdir -p $HOME/.kube

# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# sudo chown $(id -u):$(id -g) $HOME/.kube/config

クラスタに追加されたノードを確認します。

# kubectl get nodes

Kubectl get nodes – the second master node is added to the Kubernetes cluster running on Ubuntu machines.

3つのマスターノードのうち2つがクラスターに追加されました。あと1つのマスターノードを追加する必要があります。

3番目のマスターノード(192.168.101.23)の初期化

クラスタ内の 2 番目のノード(192.168.101.22)を初期化したときと同じ手順を繰り返します。

マスターノードの初期化後に表示される、クラスタへのノード追加用のトークンとハッシュを含むコマンドを必ずメモしておいてください。

3 つのマスターノードすべてがクラスタに正常に追加されたことを確認してください。

# kubectl get nodes

Kubernetesのマスターノードの”NotReady”ステータスを修正するためのFlannelのインストール

それでは、Flannel をインストールしましょう。Ubuntu に Kubernetes をインストールして単一のマスタークラスタを作成する方法を学んだ最初の例とは異なり、この例では YAML ファイルを使用して Flannel をインストールします。

このコマンドを実行して Flannel をインストールし、 NotReady オーバーレイネットワークがまだ設定されていないため、ノードの状態が表示されません。以下の kube-flannel.yaml たとえば、最初のマスターノード上で、テキストエディタ”vim”を使ってファイルを開きます。

# kubectl apply -f kube-flannel.yml

で定義されている podSubnet のアドレスを覚えておいてください。 config.yaml ファイル。ネットワークアドレスは、 kube-flannel.yaml ファイル。

ノードとそのステータスを確認してください。

# kubectl get nodes

Kubectl get node – the NotReady status of master nodes has been fixed

これで、すべてのマスターノードが正常に動作するようになりました。

クラスタへのワーカーノードの追加

すべてのマスターノードの初期化が完了したら、Kubernetesクラスタにワーカーノードを追加できます。最初のワーカーノードを追加してみましょう(192.168.101.31) を、Ubuntu マシン上にデプロイされた HA Kubernetes クラスターに追加します。マスターノードの初期化後に表示されたコマンド(トークンとハッシュが含まれるコマンド)を使用して、ワーカーノードをクラスターに参加させます。このコマンドを 192.168.101.31 machine.

# kubeadm join 192.168.101.19:6443 --token kxl1gf.6ddalutd60n0ez45

--discovery-token-ca-cert-hash sha256:bf3887f1565fcd48ff696da98a761ac1b70c6d38ba0ba3e4b1bf573000a302ca

Kubernetes HA クラスタのノードを確認し、ワーカーノードが追加されていることを確認してください。また、ノードの一覧に HA プロキシマシンが表示されるようになっています。

# kubectl get nodes

Installing Kubernetes cluster on Ubuntu machines is almost complete – more worker nodes can be added.

同様に、UbuntuマシンにインストールされたKubernetes高可用性クラスターに、他のワーカーノードを追加します。必要に応じて、いつでもワーカーノードを追加することができます。これで、本日のチュートリアルは終了です。

結論

UbuntuへのKubernetesのインストールは、一見したほど難しくありません。Kubernetesクラスタのデプロイには多少の手間がかかりますが、その結果、一元化された管理の容易さ、高いスケーラビリティ、負荷分散など、多くのメリットが得られます。 最もシンプルな Kubernetes のデプロイ方法は、シングルマスター構成です。マスターノードとワーカーノードを含む Ubuntu ノードに Kubernetes をインストールする必要があります。

コンテナ化されたアプリケーションを実行するために、より信頼性の高いインフラストラクチャが必要な場合は、Kubernetes 高可用性クラスタとして知られるマルチマスター Kubernetes のデプロイを検討してください。このタイプの Kubernetes デプロイでは、単一障害点が排除され、一部のマスターノードが障害を起こしてもクラスタは稼働し続けることができます。

どちらのデプロイタイプにおいても、SSHアクセスの設定、静的IPアドレスとホスト名の設定、Dockerのインストール、スワップパーティションの使用無効化を行い、最後にkubeadm、kubectl、kubeletなどのKubernetesコンポーネントをインストールし、オーバーレイネットワーク用にFlannelを設定する必要があります。HA Kubernetesクラスタをデプロイする場合は、さらにスタンドアロンマシン上でHAプロキシを設定し、証明書を生成し、etcdクラスタを設定する必要があります。 Kubernetes の設定、デプロイの作成、およびポッドの実行といった段階の大部分は、コマンドラインインターフェースで提供されるコマンドを手動で実行する方法と、YAML 設定ファイルを使用する方法の 2 つの方法で実行できます。YAML ファイルを使用すると、より複雑な構造を作成でき、管理プロセスがより便利になります。

Kubernetesは、物理マシンおよび仮想マシンのいずれ上で動作するUbuntuにインストールできます。vSphere上で動作する仮想マシンにKubernetesがインストールされている場合は、以下を使用することで追加の保護を行うことができます。 VMware 高可用性クラスタ フォールトトレランス機能を活用して。このブログ記事で解説したKubernetesデプロイメントの仕組みは、他のLinuxディストリビューションにKubernetesをインストールする際にも活用できます。

試してみてください NAKIVO Backup & Replication

試してみてください NAKIVO Backup & Replication

無料トライアルを利用して、本ソリューションのデータ保護機能をすべてお試しください。15日間無料。機能や容量の制限は一切ありません。クレジットカードも不要です。

関連記事