コンテナは、独自のアプリケーションをバンドルして実行するのに適しています。コンテナの数が急増し、便利な方法で管理する必要がある場合。それが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クラスターにデプロイしてみることができます。
読んでいただきありがとうございます。以下のコメントセクションに提案を残してください。