GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu20.04にKubernetesをインストールする方法

コンテナは、独自のアプリケーションをバンドルして実行するのに適しています。コンテナの数が急増し、便利な方法で管理する必要がある場合。それがKubernetesが登場する理由です。 Kubernetes(K8s)は、コンテナ化されたアプリケーションとサービスのデプロイ、スケーリング、管理を自動化するためのオープンソースシステムです。

Kubernetesクラスターにはマスターノードとワーカーノードが含まれています。マスターノードは、ワーカーノードのグループを制御および管理します。高可用性クラスター用に複数のマスターノードを持つことができます。

このチュートリアルでは、Kubernetesクラスタをインストールする方法を示します Ubuntuでkubeadmを使用 20.04。

環境の準備

  • Ubuntu20.04を実行している2つのLinuxホストを使用する

マスターノードとワーカーノードの静的IPアドレスの設定

-マスターノード:192.168.1.11
-ワーカーノード:192.168.1.12

  • 各マシンのホスト名を構成します

ノード1をマスターノードとして使用し、ノード2をワーカーノードとして使用します。

$ sudo hostnamectl set-hostname node-1
$ sudo hostnamectl set-hostname node-2
  • 各ubuntuノードでスワップメモリ​​を無効にする
$ sudo swapoff -a

Kubernetesリポジトリを追加

KubernetesはUbuntuのデフォルトリポジトリでは利用できないため、手動で追加する必要があります。

マスターノードとワーカーノードの両方で 次の手順を実行します:

次のようにKubernetes署名キーを追加します:

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

次に、Kubernetesリポジトリを追加し、次のコマンドを実行します:

$ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list
$ sudo mv ~/kubernetes.list /etc/apt/sources.list.d
$ sudo apt update

Kubernetesツールのインストール

このセクションでは、Kubeadm、cri-o、Kubelet、Kubernetes-cniをインストールします。これらのツールはすべて、マスターノードとワーカーノードの両方にインストールする必要があります 。

推奨およびサポートされているバージョンを必ずインストールしてください。ここでは、Kubernetesとcrioのバージョン1.18をインストールしています。

Kubeadmをインストールする

Kubeadmは、Kubernetesクラスターの初期化に役立つKubernetesプロジェクトの一部であるツールです。

このチュートリアルでは、kubeadmバージョン1.18.0-00をインストールします。次のように入力します。

$ sudo apt install -y kubeadm=1.18.0-00 --allow-unauthenticated

:次のコマンドで特定のバージョンを見つけることができます:

$ curl -s https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages | grep Version | awk '{print $2}'

Kubectlをインストールする

Kubectl Kubernetesコマンドラインツールです。これにより、Kubernetesクラスターでコマンドを実行できます。 kubectlを使用して、アプリケーションのデプロイ、クラスターリソースの管理、ログの表示を行うことができます。

次のコマンドでkubectlv1.18.0-00をインストールします。

$ sudo apt install -y kubectl=1.18.0-00 --allow-unauthenticated

CRI-Oのインストール

CRI-Oは、OCI準拠のコンテナランタイムインターフェイス(CRI)です。最も一般的に使用されるランタイムはDockerです。 Kubernetes 1.20のリリース以降、Dockerのコンテナランタイムインターフェイス(CRI)シムは非推奨になりました。 Dockerは、OCI(Open Container Initiative)イメージではないイメージを生成します。

特にGKE、EKS、AKSなどのKubernetesサービスを使用している場合は、OCI準拠のコンテナランタイムを使用してOCIイメージをプルして実行する必要があります。

引き続きdockerを使用してから、sudo apt-get install docker.ioを使用してインストールできます。

ここではcri-oを使用します これは準拠したランタイムです。 cri-oバージョンをKubernetesバージョンと一致させてください。

サポートされているバージョンをインストールしてください。

まず、modprobeを使用します オーバーレイをロードするコマンド およびbr_netfilter マスターノードとワーカーノードの両方のモジュール:

$ sudo modprobe overlay
$ sudo modprobe br_netfilter

次に、sysctl構成ファイルを作成して、/etc/sysctl.d/99-kubernetes-cri.confに次の行を挿入して、再起動中にIP転送とnetfilter設定を有効にします。 マスターノードとワーカーノードのファイル:

net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1

次のコマンドを実行して構成ファイルを適用します:

$ sudo sysctl --system

ここで、UbuntuOSとcri-oのバージョンを次のように指定します。

$ sudo -i
# export OS=xUbuntu_20.04
# export VERSION=1.18

次に、次のコマンドをrootとして実行します ユーザー:

# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
# echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list

# curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
# curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -

# apt update
# apt install cri-o cri-o-runc

インストールが完了すると、 conmon (コンテナ監視)ユーティリティがインストールされました。 conmonのパスを見つける:

$ which conmon

/usr/bin/conmon

/etc/crio/crio.confを編集します 次のようにファイルします:

...
# Path to the conmon binary, used for monitoring the OCI runtime.
conmon = "/usr/bin/conmon"         #<-- Edit this line. Around line 108

...

registries = [                     #<-- Edit and add registries. Around line 351
        "docker.io",
        "quay.io",
]
....

cri-oを有効にして、実行されていることを確認します。

$ sudo systemctl daemon-reload
$ sudo systemctl enable crio
$ sudo systemctl start crio
$ sudo systemctl status crio

出力:

● crio.service - Container Runtime Interface for OCI (CRI-O)
   Loaded: loaded (/usr/lib/systemd/system/crio.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-12-10 15:46:37 UTC; 3 days ago
     Docs: https://github.com/cri-o/cri-o
...

Kubeletをインストールする

Kubeletは、各ノードで実行されるエージェントであり、マスターノード上のAPIサーバーと通信し、コンテナーランタイムを駆動してワークロードを開始する役割を果たします。

kubeletを構成する /etc/default/kubeletに次の行を挿入して、cri-oと対話する方法を理解する ファイル:

KUBELET_EXTRA_ARGS=--feature-gates="AllAlpha=false,RunAsGroup=true" --container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock' --runtime-request-timeout=5m

マスターノードとワーカーノードの両方で、次のコマンドを実行してkubeletをインストールします :

$ sudo apt install -y kubelet=1.18.0-00 --allow-unauthenticated

Kubernetes-cniをインストールする

クラスタでコンテナネットワークを有効にするには、kubernetes-cniをインストールする必要があります 。

次のコマンドを実行します:

$ sudo apt-get install -y kubernetes-cni --allow-unauthenticated

Kubernetesクラスターのデプロイ

Kubernetesクラスターのデプロイには2つのステップが含まれます。最初のステップはマスターノードを初期化することであり、2番目のステップはワーカーノードをクラスターに参加させることです。

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

マスターノードでKubernetesを初期化するには 、タイプ:

$ sudo kubeadm init --apiserver-advertise-address=192.168.1.11 --pod-network-cidr=10.244.0.0/16

完了するまでに数分かかります。初期化が完了すると、端末は次のように出力を表示します。

上でマークされたクラスターに参加する行に注意してください。次のステップでそれを使用して、ワーカーノードをクラスターに参加させます。

次に、次のコマンドを実行して、マスターノードに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 apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

すべてのコントロールプレーンコンポーネントが正常にインストールされたことを確認します:

$ kubectl get pod --all-namespaces

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

次に、ワーカーノードにログインし、ワーカーノードをクラスターに参加させます。

ワーカーノードマシンで、次のコマンドを実行します。

$ sudo kubeadm join 192.168.1.11:6443 --token 9ii02d.nsmrmu1asascv2yg \
    --discovery-token-ca-cert-hash sha256:1104bf70b03a2d030ffc0a462f9dbcbcdd9975393e9a9ac2a1f18500f1b6b74e

参加プロセスが終了したら、マスターノードに戻って次のコマンドを実行します。

$ kubectl get node
NAME     STATUS   ROLES    AGE     VERSION
node-1   Ready    master   2m37s   v1.18.0
node-2   Ready    none     22s     v1.18.0

ノードの詳細を取得するには、次のように入力します。

$ kubectl get node -owide
NAME     STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION   CONTAINER-RUNTIME
node-1   Ready    master   9h    v1.18.0   10.2.0.4              Ubuntu 20.04.1 LTS   5.4.0-1029-gcp   cri-o://1.18.4
node-2   Ready    none     9h    v1.18.0   10.2.0.5              Ubuntu 20.04.1 LTS   5.4.0-1029-gcp   cri-o://1.18.4

出力には、マスターノードとクラスターに参加しているノードの詳細が表示されます。

また読む:Vagrant/Minikubeを使用してKubernetesをローカルにインストールする方法

結論

コンテナ化が普及するにつれて、コンテナ化されたワークロードとサービスを管理する必要があるため、Kubernetesは非常に人気があります。ほとんどの主要なクラウドプロバイダーはすべて、管理されたKubernetesのサポートを開始しました。これにより作業が楽になります。

Kubernetesは完全に無料で、リポジトリからいつでもダウンロードできます。 UbuntuにKubernetesをインストールして楽しんでいただけたでしょうか。 MySQLやWordPressなどのアプリケーションをK8クラスターにデプロイしてみることができます。

読んでいただきありがとうございます。以下のコメントセクションに提案を残してください。


Ubuntu
  1. UbuntuにOdooをインストールする方法

  2. Ubuntu16.04にRをインストールする方法

  3. Ubuntu18.04にGoをインストールする方法

  1. UbuntuにMavenをインストールする方法

  2. UbuntuにWineをインストールする方法

  3. Ubuntu20.04にRubyをインストールする方法

  1. UbuntuにPuTTYをインストールする方法

  2. Ubuntu18.04にRubyをインストールする方法

  3. Ubuntu18.04にPipをインストールする方法