VirtualBox+Ubuntu16でKubernetesクラスタを構築する実装

VirtualBox+Ubuntu16でKubernetesクラスタを構築する実装

Kubernetes の運用・保守の始まりは、当然のことながらクラスタ環境の構築と切り離せません。この記事では、VirtualBox + Ubuntu 16 を使用したマシン上に Kubernetes を構築するまでの全過程を記録し、遭遇したいくつかの問題とその解決策も紹介します。

Kubernetesについて

Wikipedia による Kubernetes の説明は次のとおりです。

Kubernetes (K8s とも呼ばれる) は、コンテナ化されたアプリケーションを自動的にデプロイ、スケーリング、管理するためのオープンソース システムです。このシステムは Google によって設計され、Cloud Native Computing Foundation (現在は Linux Foundation の一部) に使用するために寄贈されました。
その目的は、「ホストのクラスター全体にわたるアプリケーション コンテナの展開、スケーリング、実行を自動化するプラットフォーム」を提供することです。 Docker を含むさまざまなコンテナ ツールをサポートします。

Kubernetes は、サービス検出と負荷分散、ストレージ オーケストレーション、自動デプロイメントとロールバック、ボックス パッキングの自動完了、自己修復、キーと構成の管理機能を提供します。

基本的な環境の準備

VirtualBoxをインストールする

VirtualBox は、オープンソースで無料の強力な仮想マシン ソフトウェアです。ダウンロード アドレスはこちらです。VirtualBox のインストールは非常に簡単なので、ここでは詳しく説明しません。

Ubuntu 16 システムイメージをダウンロード

ここではシステムイメージとして Ubuntu 16 を選択しました。もちろん CentOS など他のシステムも使用できます。Ubuntu 16 のダウンロード アドレス。

仮想マシン x3

VirtualBox をインストールして Ubuntu 16 イメージをダウンロードしたら、まず 3 つの Ubuntu 16 仮想マシンを構築する必要があります。新しい仮想マシンを作成するプロセスは比較的簡単で、手順を 1 つずつ実行するだけです。新規作成が完了したら、各仮想マシンをそれに応じて構成する必要があります。構成中に使用するユーザーは、root ユーザーである必要があります。

仮想マシンのIP

仮想マシンを使用しているため、各仮想マシンがインターネットにアクセスできるように、各仮想マシンにネットワーク カードを構成します。方法は 2 つあります。

  • ブリッジネットワークカードを使用すると、各仮想マシンのIPがホストネットワークセグメントに配置され、仮想マシンがインターネットにアクセスできるようになります。
  • NATネットワーク+ポート転送を使用し、ネットワークセグメントを自分で設定し、仮想マシンのインターネットアクセスをサポートします。

これらのいずれかの方法を使用して、仮想マシンがインターネットにアクセスできるように仮想マシンのネットワーク カードを構成できます。

クラスターが構築された後、クラスター内の各ノードの IP アドレスは変更されないままである必要があることに注意してください。そうでない場合は、ノードを再参加する必要があります。

簡単な方法は、仮想マシンをシャットダウンするのではなくスリープ モードにして、次回起動することです。

クラスターでは、イントラネット アドレスを使用します。各仮想マシンに対応するイントラネット アドレスは、ifconfig または ip addr で確認できます。

> ifconfig

enp0s3 リンク encap:イーサネット HWaddr 08:00:27:6f:23:2a  
          inet アドレス:10.0.2.4 Bcast:10.0.2.255 マスク:255.255.255.0
          inet6 アドレス: fe80::a00:27ff:fe6f:232a/64 スコープ:リンク
          アップブロードキャスト 実行中マルチキャスト MTU:1500 メトリック:1
          RXパケット:3277016 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0
          TX パケット:3385793 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0
          衝突:0 トランザクションキュー数:1000 
          RX バイト:1084480916 (1.0 GB) TX バイト:2079122979 (2.0 GB)

この仮想マシン (マスター) のアドレスは 10.0.2.4 です。

ホスト名の設定

Kubernetes のノード名はホスト名によって決まるため、3 つの仮想マシンのホスト名をそれぞれ master、node1、node2 に設定できます。ホスト名を変更するには、/etc/hosts ファイルを変更して仮想マシンを再起動します。

# /etc/ホスト
10.0.2.4 マスター
10.0.2.5 ノード1
10.0.2.6 ノード2

SSH 非暗号化接続

仮想マシンが実行中になったら、最初に 3 台の仮想マシンを接続し、SSH パスワード不要の接続を構成する必要があります。
まず、仮想マシンの 1 つで SSH 公開キーと秘密キーを生成します。

ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/id_rsa -q -N ''

ssh-keygen のパラメータの説明:

  • -t rsaは暗号化アルゴリズムをRSAとして指定します
  • -C '[email protected]' は、秘密鍵を生成した人物を示すメモを提供するために使用されます。
  • -f ~/.ssh/id_rsa は秘密鍵が生成される場所を指定します
  • -q -N ''は秘密鍵を暗号化せず、サイレントモードを使用することを意味します

公開鍵と秘密鍵を他の 2 台の仮想マシンに配布し、公開鍵 (~/.ssh/id_rsa.pub) の内容を 3 台の仮想マシンすべての ~/.ssh/authorized_keys ファイルに書き込み、~/.ssh/authorized_keys ファイルの権限を 400 に設定します。

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

構成が完了すると、次の方法で仮想マシンの 1 つ上の別の仮想マシンに接続できるようになります。

# マスターノードでssh root@node1

Kubernetes クラスターの構築

3 つの仮想マシンをセットアップしたら、3 つのノードを持つ Kubernetes クラスターの構築を開始できます。

Dockerをインストールする

apt-getアップデート-y
apt-getインストール-y \
  apt-transport-https \
  ca証明書\
  カール\
  gnupg \
  lsb リリース
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
エコー\
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) 安定版" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# DOCKERエンジンをインストールする
apt-getアップデート-y
apt-get install -y docker-ce docker-ce-cli containerd.io

# 起動時にDockerが起動するように設定する
systemctl で docker.service を有効にする
systemctl で containerd.service を有効にする

# Dockerを起動する
systemctl ドッカーを起動する

kubeadm、kubelet、kubectlをインストールする

ここで使用されている画像ソースは Alibaba Cloud です。

# apt パッケージインデックスを更新し、Kubernetes apt リポジトリを使用するために必要なパッケージをインストールします。apt-get update -y
apt-get install -y apt-transport-https ca-certificates curl

# Google Cloud 公開署名キーをダウンロードします# curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key を追加 -

# Kubernetes apt リポジトリを追加します# echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# apt パッケージインデックスを更新し、kubelet、kubeadm、kubectl をインストールして、それらのバージョンをロックします。apt-get update -y
apt-get install -y kubelet kubeadm kubectl
apt-mark ホールド kubelet kubeadm kubectl

SWAPをオフにする

/etc/fstab ファイルを編集し、スワップ パーティションの設定をコメント アウトします。

#/dev/mapper/master--vg-swap_1 なし スワップ sw 0 0

画像を事前にダウンロードする

kubeadm init に必要なミラー リストを取得します。

> kubeadm 構成イメージリスト

k8s.gcr.io/kube-apiserver:v1.21.1
k8s.gcr.io/kube-コントローラマネージャー:v1.21.1
k8s.gcr.io/kube-scheduler:v1.21.1
k8s.gcr.io/kube-proxy:v1.21.1
k8s.gcr.io/一時停止:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0

k8s のイメージソースは国内ユーザーには手の届かないところにありますが、まずは国内のイメージウェアハウスか、Alibaba Cloud のコンテナイメージサービス ACR や Docker の公式イメージウェアハウス DockerHub など、利用できるイメージウェアハウスに pull することができます。

1 つの Dockerfile だけで新しい GitHub コード リポジトリを作成できます。その内容は次のとおりです。

k8s.gcr.io/kube-apiserver:v1.21.0 から

次に、Alibaba Cloud のコンテナ イメージ サービス ACR で新しいイメージを作成し、それを GitHub コード リポジトリに関連付けます。ビルドされたイメージは、上記の k8s.gcr.io/kube-apiserver:v1.21.1 のような必要な k8s イメージですが、使用するときにイメージにラベルを付け直す必要があります。

ACR で必要なすべてのイメージを構築した後、次のスクリプトを使用して、イメージにタグを付けるタスクをすばやく処理します。

# aliyun レジストリからイメージをプルする
kubeadm 構成イメージリスト | sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#registry.cn-shenzhen.aliyuncs.com/k8scat#g' -e 's#/coredns/coredns#/coredns#g' | sh -x

# 画像のタグ付け
docker イメージ | grep k8scat | awk '{print "docker tag",$1":"$2,$1":"$2}' | sed -e 's#registry.cn-shenzhen.aliyuncs.com/k8scat#k8s.gcr.io#2' | sh -x
docker タグ k8s.gcr.io/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0

# 画像を削除する
docker イメージ | grep k8scat | awk '{print "docker rmi",$1":"$2}' | sh -x

マスターノードを初期化する

10.0.2.4 はマスターノードの IP アドレスです。ポッドのネットワークセグメントを 192.168.16.0/20 に設定します。

> kubeadm init --apiserver-advertise-address=10.0.2.4 --pod-network-cidr=192.168.16.0/20

kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \
    --ディスカバリートークンCA証明書ハッシュsha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065

ノードを追加

kubeadm join 10.0.2.4:6443 --token ioshf8.40n8i0rjsehpigcl \
    --ディスカバリートークンCA証明書ハッシュsha256:085d36848b2ee8ae9032d27a444795bc0e459f54ba043500d19d2c6fb044b065

kubectl設定ファイルを配布する

scp マスター:/etc/kubernetes/admin.conf /etc/kubernetes/admin.conf
echo 'export KUBECONFIG="/etc/kubernetes/admin.conf"' >> /etc/profile
ソース /etc/profile

ネットワークプラグインのインストール

ここではWeave Netを使用します。

# curl -L "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" > weave-net.yaml

# IPALLOC_RANGE を使用する場合
kubectl を適用 -f https://gist.githubusercontent.com/k8scat/c6a1aa5a1bdcb8c220368dd2db69bedf/raw/da1410eea6771c56e93f191df82206be8e722112/k8s-weave-net.yaml

VirtualBox+Ubuntu16でKubernetesクラスターを構築する実装については以上です。VirtualBox+Ubuntu16でKubernetesクラスターを構築する実装の詳細については、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • VirtualBox を使用して Linux クラスターをシミュレートする方法
  • VirtualBoxでローカルKubernetesクラスターを構築する方法を説明します

<<:  横スクロールウェブサイトデザインの概要

>>:  JSは要素のドラッグとプレースホルダー機能を実装します

推薦する

Windows 上の Docker にさまざまなソフトウェアをインストールする詳細なプロセス

1. MySQLをインストールする # docker で mysql をダウンロード docker ...

Centos8.2 クラウド サーバー環境に Tomcat8.5 をインストールするための詳細なチュートリアル

Tomcatをインストールする前に、まずJDK環境をインストールしてくださいLinux サーバー上で...

ElementUI el-select の過剰なデータに対する解決策についての簡単な説明

目次1. シナリオの説明2. 解決策オプションが多すぎる el-select コンポーネントの解決策...

MySQL でパーセンテージと最初の数パーセントを表示する方法

目次必要とする実装コードデータベース数日前、友人からこれを書くのを手伝ってほしいと頼まれました。ただ...

JavaScript でタブバーの切り替え効果を実装する

フロントエンド開発者が必ず知っておくべきケースとして、タブバーの切り替え効果があります。タブバー自体...

MySQLコンテナ間のレプリケーション構成例の詳細な説明

背景先週、会社で MySQL レプリケーションのトレーニングを受けたので、今週末は学んだことを実践す...

JavaScript配列の一般的なメソッドの概要

目次1. はじめに2. フィルター() 3. マップ() 4. ソート() 5. 減らす() 6. ...

CentOS に Docker をインストールし、Springboot で Docker をリモート公開する方法

目次1. CentOS7.0へのJDK1.8のインストール2. Dockerのインストール3.Doc...

MySQL の時間差関数 TIMESTAMPDIFF と DATEDIFF の使用

時間差関数 TIMESTAMPDIFF と DATEDIFF の使用SQL ステートメント、特にスト...

画像のシームレスなスクロールを実現する JavaScript タイマー

この記事では、画像のシームレスなスクロールを実現するためのJavaScriptの具体的なコードを参考...

VMware仮想マシンブリッジによるインターネット相互接続を実現する方法

VMware をインストールして新しい仮想マシンを作成したら、オプション バーの [編集] - [仮...

Dockerfile に基づいて Tomcat イメージを構築する方法

Dockerfile は Docker イメージを構築するために使用されるファイルです。コマンドパラ...

ウェブデザインの初心者に役立つ学習教材をいくつかお勧めします

勉強中に読んだ本についてもよく聞かれます。以下は初心者におすすめの本です(私が勉強中に読んだ本です。...

コンテンツタイプの説明、つまりHTTPリクエストヘッダーのタイプ

コンテンツ タイプについて学ぶには、まずそれが何であるか、そして何に使用されるかを知る必要があります...

XHTML チュートリアル: Transitional と Strict の違い

実際、XHTML 1.0 は、Transitional DOCTYPE と Strict DOCTY...