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パッケージをインストールします。
最後に、マスターノードから参加トークンを取得します( 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.