もっと詳しく

Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、および管理を支援するオープンソースのコンテナオーケストレーションツールです。 Googleは当初Kubernetesを設計し、現在はCloud NativeComputingFoundationによって管理されています。

Kubernetesは現在、Docker、Containerd、CRI-Oで動作します。

KubernetesはDockerのクラスターマネージャーであり、DockerSwarmとほぼ同じ機能を提供します。

以下の方法を使用して、Kubernetesをローカルで実行できます。

1.1。 MinKube –開発とテスト用のシングルノードKubernetesクラスター。
2. Kubeadm –マルチノードKubernetesクラスター

ここでは、を使用してマルチノードKubernetesクラスターをデプロイする方法を説明します。 kubeadm 道具。

コンポーネント

マスターノード

KubeAPIサーバー:クラスタ情報をクエリするためのKubernetesAPIを公開するマスターノードで実行されます。
その他:Kubernetesクラスタデータを保存するキーストア
Kubeスケジューラ:マスターノードで実行されます。マスターノードは、新しく作成されたポッドを探し、リソースの可用性に応じて適切なノードを識別します。
Kubeコントローラーマネージャー:マスターノードで実行され、アプリケーションの実行を維持するための監視(ノード、ポッドレプリケーション、および展開)とアクションの実行を担当します。

ワーカーノード

クベレット:すべてのワーカーノードで実行され、ポッドの開始、管理、破棄などのタスクを処理します。
Kubeプロキシ:TCP/UDP着信要求をバックエンドポッドに転送するネットワークプロキシ。
コンテナランタイム:ワーカーノード(Docker、CRI-O、およびコンテナー化)でポッドを実行します

環境

ノード ホスト名 IPアドレス OS CPU
マスターノード master.itzgeek.local 192.168.0.10 Ubuntu 22.04 / Ubuntu 20.04 2 2GB
ワーカーノード worker.itzgeek.local 192.168.0.20 Ubuntu 22.04 / Ubuntu 20.04 2 2GB

システム要求

  • ノードあたり2GB以上のRAM
  • 2CPU以上
  • すべてのノードの一意のホスト名、MACアドレス、product_uuid
  • スワップを無効にする

前提条件

ホスト名を設定する

すべてのノードに一意のホスト名を設定します。 例:

sudo hostnamectl set-hostname master.itzgeek.local

DNSエントリ

マスターノードとワーカーノードがクラスター内のすべてのノードのホスト名を解決できることを確認します。

sudo nano /etc/hosts

エントリ:

192.168.0.10 master.itzgeek.local master
192.168.0.20 worker.itzgeek.local worker

製品のUUID

以下のコマンドを実行して、ホストに一意のproduct_uuidがあることを確認します。 2つのノードに同じproduct_uuidがある場合、Kubernetesクラスターのインストールは失敗します。

sudo cat /sys/class/dmi/id/product_uuid

ファイアウォール

Kubernetesが正しく機能するためには、iptablesの以下のポートを許可する必要がある場合があります。

マスターノード上

sudo ufw allow 6443/tcp
ufw allow 2379/tcp
sudo ufw allow 2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10257/tcp
sudo ufw allow 10259/tcp
sudo ufw reload

ワーカーノード

sudo ufw allow 10250/tcp
sudo ufw allow 30000:32767/tcp
sudo ufw reload

ブリッジトラフィック用のロードモジュール

をロードします br_netfilter クラスタノード間でKubernetesポッド間のトラフィック通信を有効にするモジュール。

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

以下のエントリを追加して、iptablesがブリッジされたトラフィックを認識できるようにします。

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

以下のコマンドを実行して、システムを再起動せずに設定を適用します。

sudo sysctl --system

スワップを無効にする

スワップパーティションを削除するか、スワップパーティションエントリをから削除して、スワップを無効にしてください。 /etc/fstab ファイル。

コンテナランタイムのインストール

インストールする必要があります コンテナランタイム ポッドを実行および管理するために、クラスター内の各ノードに接続します。 Kubernetesは、いくつかのコンテナランタイムで動作します。

ここでは、ポッドを実行するためにCRI-Oランタイムを使用しています。 他のランタイムを使用する場合は、上記のリンクをたどって移動し、クラスターをセットアップしてください。

CRI-OにはCNI(Kubernetesで使用可能)が組み込まれており、ポッドネットワークアドオンをインストールするために削除できます。

sudo rm -rf /etc/cni/net.d/*

Kubernetesクラスターのセットアップ

Kubernetesリポジトリを設定する

まず、すべてのノードにKubernetesを設定します。

sudo apt update

sudo apt install -y apt-transport-https ca-certificates curl

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

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

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

次に、以下のパッケージをすべてのノードにインストールします。

sudo apt update

sudo apt install -y kubelet kubeadm kubectl

sudo apt-mark hold kubelet kubeadm kubectl

Kubernetesクラスターを初期化する

マスターノードで、 kubeadm init ターミナルでコマンドを実行して、クラスターを初期化します。

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

出力:

[init] Using Kubernetes version: v1.23.6
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[certs] Using certificateDir folder "/etc/kubernetes/pki"
.      .      .
.      .      .
.      .      .

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.10:6443 --token nzy73q.3s2ig8r2ue09wrjy 
        --discovery-token-ca-cert-hash sha256:0866420e1833c5a0710c92712d56468b4576b8bd8f00c381232dd993d89a0246

次に、ターミナルで以下のコマンドを実行して、Kubernetesクラスターの使用を開始します。

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 pods -A

出力:

corednsポッドが保留中であり、ポッドネットワークをインストールするとステータスが変わることがわかります。

ポッドネットワークアドオンを展開する

ポッドが相互に通信できるように、クラスター上にポッドネットワークアドオンをセットアップする必要があります。 いくつかのプロジェクトが提供します Kubernetesポッドネットワークつまり、Calico、Weave、Flannelなどです。

ここでは、フランネルポッドネットワークを使用します。

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

出力:

podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

クラスターの状態をもう一度確認してください。 これで、corednsポッドが実行状態になっているはずです。

kubectl get pods -A

出力:

ネットワークポッドアドオン後のKubernetesクラスタステータス
ネットワークポッドアドオン後のKubernetesクラスタステータス

ワーカーノードをKubernetesクラスターに参加させる

まず、ワーカーノードがシステム要件を満たしていることを確認します。

次に、前提条件を完了し、コンテナランタイムとKubernetesパッケージをインストールします。

最後に、マスターノードから参加トークンを取得します( kubeadm init コマンド)を実行し、 kubeadm join すべてのノードでコマンドを実行して、クラスターに参加します。

現在のターミナルセッションにトークンがない場合は、 kubeadm token list トークンとCA証明書のハッシュを取得するコマンドopenssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' マスターノードのコマンド。

sudo kubeadm join 192.168.0.10:6443 --token nzy73q.3s2ig8r2ue09wrjy --discovery-token-ca-cert-hash sha256:0866420e1833c5a0710c92712d56468b4576b8bd8f00c381232dd993d89a0246

出力:

[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
W0430 03:59:02.069246    2862 utils.go:69] The recommended value for "resolvConf" in "KubeletConfiguration" is: /run/systemd/resolve/resolv.conf; the provided value is: /run/systemd/resolve/resolv.conf
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster

上記の出力は、ノードがクラスターに正常に追加されたことを確認します。

次に、次のコマンドを使用して、マスターノードのワーカーノードのステータスを確認します。

kubectl get nodes

出力:

NAME                   STATUS   ROLES                  AGE   VERSION
master.itzgeek.local   Ready    control-plane,master   16m   v1.23.6
worker.itzgeek.local   Ready                           55s   v1.23.6

ワーカーノードが準備完了状態になっていることを確認する必要があります。
以下のコマンドを使用して、ノードに関する追加情報を取得できます。

kubectl get nodes -o wide

出力:

NAME                   STATUS   ROLES                  AGE     VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION      CONTAINER-RUNTIME
master.itzgeek.local   Ready    control-plane,master   17m     v1.23.6   192.168.0.10                Ubuntu 22.04 LTS   5.15.0-27-generic   cri-o://1.23.2
worker.itzgeek.local   Ready                           2m26s   v1.23.6   192.168.0.20                Ubuntu 22.04 LTS   5.15.0-27-generic   cri-o://1.23.2

結論

それで全部です。 Ubuntu 22.04 /Ubuntu20.04でマルチノードKubernetesクラスターを正常にセットアップできたことを願っています。

The post Ubuntu 22.04 /Ubuntu20.04にKubernetesをインストールする方法 appeared first on Gamingsym Japan.