Kubernetes (k8s)は、無料のオープンソースコンテナオーケストレーションツールです。コンテナベースのアプリケーションのデプロイ、スケーリング、管理に使用されます。この記事では、 kubeadmを使用してUbuntu20.04LTSサーバー(Focal Fossa)にKubernetesクラスターをインストールする方法を示します。 。私のラボのセットアップでは、3台のUbuntu20.04LTSサーバーマシンを使用しました。以下は、各Ubuntuシステムのシステム要件です。
- 2GB以上のRAM
- 2コア(2 vCPU)
- /varに15GBの空き容量
- sudo権限を持つ特権ユーザー
- 安定したインターネット接続
ラボのセットアップの詳細は次のとおりです。
- マシン1(Ubuntu 20.04 LTSサーバー)– K8sマスター– 192.168.1.40
- マシン2(Ubuntu 20.04 LTSサーバー)– K8s-node-0 – 192.168.1.41
- マシン3(Ubuntu 20.04 LTSサーバー)– K8s-node-1 – 192.168.1.42
それでは、Kubernetesのインストール手順に進みましょう
ステップ1)ホスト名を設定し、/ etc/hostsファイルにエントリを追加します
hostnamectlコマンドを使用して、各ノードにホスト名を設定します。例を以下に示します。
$ sudo hostnamectl set-hostname"k8s-master"//マスターノードでこのコマンドを実行します$sudohostnamectl set-hostname"k8s-node-0"//ノードでこのコマンドを実行します-0$sudo hostnamectl set-hostname "k8s-node-1"//ノード1でこのコマンドを実行します
各ノードの/etc/hostsファイルに次のエントリを追加します
192.168.1.40 k8s-master192.168.1.41 k8s-node-0192.168.1.42 k8s-node-1
ステップ2)3つのノードすべてにDocker(コンテナランタイム)をインストールします
各ノードにログインし、次のコマンドを実行してdockerをインストールします
$ sudo apt update $ sudo apt install -y docker.io
次に、undersystemctlコマンドを使用して各ノードでDockerサービスを開始して有効にします。
$ sudo systemctl enable docker.service --now
次のコマンドを実行して、Dockerサービスのステータスとそのバージョンを確認します。
$ systemctl status docker $ docker --version
ステップ3)スワップを無効にし、すべてのノードでIP転送を有効にします
スワップを無効にするには、/ etc / fstabファイルを編集し、スワップパーティションまたはスワップファイルのいずれかのエントリを含む行をコメントアウトします。
$ sudo vi / etc / fstab
ファイルを保存して終了します
swapoffコマンドを実行して、その場でスワップを無効にします
$ sudo swapoff -a
IPv転送を永続的に有効にするには、ファイル「/etc/sysctl.conf」を編集して、「 net.ipv4.ip_forward =1」という行を探します。 」とコメントを外します。ファイルに変更を加えたら、次のコマンドを実行します
$ sudo sysctl -pnet.ipv4.ip_forward =1 $
ステップ4)すべてのノードにKubectl、kubelet、およびkubeadmをインストールします
3つのノードすべてで次のコマンドを実行して、kubectl、kubelet、およびkubeadmユーティリティをインストールします
$ sudo apt install -y apt-transport-https curl $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add $ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" $ sudo apt update $ sudo apt install -y kubelet kubeadm kubectl
注: この記事の執筆時点では、Ubuntu 16.04(Xenial Xerus)Kubernetesリポジトリが利用可能でしたが、将来、Ubuntu 20.04でkubernetesリポジトリが利用可能になったら、上記の「apt-add-repository」コマンドでxenialをフォーカルワードに置き換えます。
>ステップ4)(マスターノードから)kubeadmを使用してKubernetesクラスターを初期化します
マスターノード(k8s-master)にログインし、「kubeadm init」コマンドの下で実行して、Kubernetesクラスターを初期化します
$ sudo kubeadm init
クラスタが正常に初期化されると、次の出力が得られます
通常のユーザーとしてクラスターの使用を開始するには、次のコマンドを実行してみましょう。コマンドは既に出力にあり、コピーして貼り付けるだけです。
[メール保護]:〜$ mkdir -p $ HOME / .kube [メール保護]:〜$ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config [メール保護]:〜 $ sudo chown $(id -u):$(id -g)$ HOME / .kube / config
ここで、ワーカーノード(k8s-node-0 / 1)をクラスターに参加させます。クラスターに参加するコマンドは、出力にすでに含まれています。 「kubeadmjoin」コマンドをコピーして、両方のノード(ワーカーノード)に貼り付けます。
Node-0にログインし、次のコマンドを実行します
[メール保護]:〜$ sudo kubeadm join 192.168.1.40:6443 --token b4sfnc.53ifyuncy017cnqq --discovery-token-ca-cert-hash sha256:5078c5b151bf776c7d2395cdae08080faa6f82973b989d29caaa4d58c
Node-1にログインし、次のコマンドを実行してクラスターに参加します。
[メール保護]:〜$ sudo kubeadm join 192.168.1.40:6443 --token b4sfnc.53ifyuncy017cnqq --discovery-token-ca-cert-hash sha256:5078c5b151bf776c7d2395cdae08080faa6f82973b989d29caaa4d58c
マスターノードから「kubectlgetnodes」コマンドを実行してノードのステータスを確認します
[email protected]:〜$ kubectl get nodeNAME STATUS AGE VERSIONk8s-master NotReady master 27m v1.18.3k8s-node-0 NotReady8m3s 19 v 1.1 18.3 [メール保護]:〜$ ご覧のとおり、ワーカーノードとマスターノードの両方がクラスターに参加していますが、各ノードのステータスは「 NotReady」です。 」。ステータスを「準備完了」にするには 」calicoなどのContainerNetworkInterface(CNI)ベースのポッドネットワークアドオンを導入する必要があります 、kube-router およびweave-net 。名前が示すように、ポッドネットワークアドオンを使用すると、ポッドが相互に通信できます。
ステップ5)Calico Pod Networkアドオン(マスターノード)をデプロイする
マスターノードから、次のコマンドを実行してCalicoポッドネットワークアドオンをインストールします。
[メール保護]:〜$ kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
正常にデプロイされると、ノードのステータスが準備完了になります。kubectlコマンドを再実行して、ノードのステータスを確認しましょう
[メールで保護]:〜$ kubectlgetnodesNAMEステータスロール年齢VERSIONk8s-masterReadymaster 39m v1.18.3k8s-node-0 Ready19m v1.18.3k8s-node-1 18.3 [メール保護]:〜$ 以下のコマンドを実行して、すべての名前空間のポッドのステータスを確認します
上記のパーフェクトは、すべてのポッドが実行され、正常な状態にあることを確認します。ポッド、サービス、デプロイをデプロイして、Kubernetesクラスターが正常に機能しているかどうかを確認してみましょう。
注: マスターノードでbash完了機能を有効にするには、次の手順を実行します
[email protected]:〜$ echo'source <(kubectl complete bash)'>>〜/ .bashrc [email protected]:〜$ source .bashrcステップ6)Kubernetesクラスターのテストと検証
デフォルトの名前空間にnginxコンテナイメージを使用してnginx-webという名前のデプロイを作成し、マスターノードから次のkubectlコマンドを実行してみましょう。
[メール保護]:〜$ kubectl create deploy nginx-web --image =nginxdeployment.apps / nginx-webcreated [メール保護]:〜$以下のコマンドを実行して、展開のステータスを確認します
[email protected]:〜$ kubectl get deploys.appsNAME READY UP-TO-DATE AVAILABLE AGEnginx-web 1/1 1 1 ctl s TO-app -o s [email protected]:〜$ -date AVAILABLE AGEコンテナのIMAGES SELECTORnginx-ウェブ1/1 1 1 56S nginxのnginxのアプリ=nginxのウェブ[電子メールが保護された]:〜$ [Eメール保護]:〜$ kubectl GET podsNAME READY STATUS再起動しAGEnginx-ウェブ7748f7f978-nk8b2 1 / 12分50秒[メール保護]:〜$ご覧のとおり、デフォルトのレプリカを使用してデプロイが正常に作成されています。
展開をスケールアップして、レプリカを4に設定しましょう。次のコマンドを実行します。
[メール保護]:〜$ kubectl scale --replicas =4 deploy nginx-webdeployment.apps / nginx-web scaled [メール保護]:〜$次に、次のコマンドを使用して展開のステータスを確認します。
[email protected]:〜$ kubectl get deploys.apps nginx-webNAME READY UP-TO-DATE AVAILABLE AGEnginx-web 4/4 4 4 4 {e deploys.apps nginx-web
上記は、nginxベースのデプロイが正常にスケールアップされたことを確認しています。
もう1つのテストを実行して、「http-web」という名前のポッドを作成し、ポート80とNodePortをタイプとして「http-service」という名前のサービスを介して公開します。
次のコマンドを実行してポッドを作成します
[メール保護]:〜$ kubectl run http-web --image =httpd --port =80pod / http-webcreated [メール保護]:〜$underコマンドを使用してサービスを作成し、ポート80で上に作成したポッドを公開します。
[email protected]:〜$ kubectl Exposure pod http-web --name =http-service --port =80 --type =NodePortservice / http-service expected [email protected]:〜$ [email protected]: 〜$ kubectl get service http-serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGEhttp-service NodePort 10.101.152.138e:mail> 80:31098 / TCP
http-web podがデプロイされているノードIPまたはホスト名を取得し、NodePort(31098)を介してWebサーバーにアクセスします
[メールで保護]:〜$ kubectl get pods http-web -o wideNAME READY STATUS RESTARTSAGEIPノードノード0> [メール保護]:〜$ [メール保護]:〜$ curl http:// k8s-node-0:31098動作します!
[メール保護]:〜$完璧です、期待どおりに正常に動作しています。これで記事は終わり、Ubuntu20.04LTSサーバーでKubernetesクラスターが正常にセットアップされたことを確認します。
また読む :KubernetesでNGINXIngressControllerを設定する方法
また読む : Kubernetes(k8s)でプライベートDockerレジストリを設定する方法
Ubuntu