Kubernetes - Kubernetesの詳細な説明、インストールとデプロイ (1)

1. Kubernetes

Kubernetes という言葉はギリシャ語に由来し、「操舵手」または「パイロット」を意味します。

K8S とも呼ばれる Kubernetes は、8 が中央の「ubernete」を表す 8 文字であり、CNCF (Cloud Native Computing Foundation; Cloud Native Computing Foundation) の最も重要なコンポーネントとして、2014 年に Google によってオープン ソース化されたコンテナー オーケストレーション エンジンです。一

Kubernetes は、コンテナ化されたアプリケーションの展開、計画、拡張、および管理を自動化するために使用されます. Kubernetes は、アプリケーションを構成するコンテナを論理ユニットにグループ化して、管理と検出を容易にし、クラウド プラットフォームの複数のホストでコンテナ化されたアプリケーションを管理するために使用されます. .

Kubernetes の目標は、コンテナ化されたアプリケーションの展開をシンプルかつ効率的にすることであり、多くの詳細について、運用および保守担当者が複雑な手動構成および処理を実行する必要はありません。

Kubernetes 公式ウェブ
サイトKubernetes  

GitHub アドレス:

GitHub - kubernetes/kubernetes: プロダクション グレードのコンテナのスケジューリングと管理

Kubernetes の中国語ドキュメント:

Kubernetes とは |Kubernetes

Kubernetes は Go 言語を使用して開発されています (Go 言語は 2009 年に Google によってリリースされたオープン ソースのプログラミング言語です)。

2. Kubernetes アーキテクチャ

(1) マスター

k8s クラスター制御ノード。クラスターのスケジュールと管理を行い、クラスター外のユーザーからの要求を受け入れてクラスターを操作します。

マスター ノードは、API サーバー、スケジューラ、ClusterState Store (ETCD データベース)、および Controller MangerServerで構成されます。

1. クラスター API: kube-apiserver

kube-apiserver は、リソース操作への唯一のアクセスを提供し、認証、承認、アクセス制御、API 登録、および検出メカニズムを提供します。

Kubernetes クラスターとやり取りする必要がある場合は、API を使用します。Kubernetes API は、内部および外部の要求を処理するための Kubernetes コントロール プレーンのフロントエンドです。API サーバーは、リクエストが有効かどうかを判断し、有効な場合は処理します。ユーザーは、REST 呼び出し、kubectl コマンドライン インターフェイス、または kubeadm などの他のコマンドライン ツールを介して API にアクセスします。

2. クラスターのスケジューリング: kube-scheduler

kube-scheduler はリソースのスケジューリングを担当し、事前に定義されたスケジューリング ポリシーに従って Pod を対応するマシンにスケジューリングします

スケジューラーは、ポッドのリソース要件 (CPU やメモリーなど) とクラスターの正常性を考慮します。次に、ポッドを適切な計算ノードにスケジュールします。

3. クラスタ コントローラ: kube-controller-manager

kube-controller-manager は、障害検出、自動拡張、ローリング アップデートなど、クラスターの状態を維持する役割を果たします。

コントローラーは実際にクラスターを実行する役割を担い、Kubernetes コントローラー マネージャーは複数のコントローラーを 1 つにまとめた機能です。コントローラーは、スケジューラーにクエリを実行し、正しい数のポッドが実行されていることを確認するために使用されます。Pod がダウンすると、別のコントローラーがそれを認識して応答します。コントローラーはサービスをポッドに接続して、リクエストが正しいエンドポイントに送信されるようにします。アカウントと API アクセス トークンを作成するためのコントローラーもあります。

4. キー値ストレージ データベース: etcd

etcd はクラスター全体の状態を保存します

アプリケーションの構成データとクラスターの状態に関する情報は、etcd (kv データベース) にあります。etcd は、分散型のフォールト トレラントな設計であり、クラスターの究極の信頼できる情報源と見なされています。

(2) ノード

作業ノードをクラスター化し、ユーザー ビジネス アプリケーション コンテナーを実行する

ノード ノードは、ワーカー ノードとも呼ばれ、kubelet、kube プロキシ、Pod (コンテナ ランタイム)が含まれます。

1、ポッド

Pod は、Kubernetes オブジェクト モデルの最小かつ最も単純なユニットです。

アプリケーションの単一のインスタンスを表します。各 Pod は、コンテナー (または密結合された一連のコンテナー) と、コンテナーの実行方法を制御するいくつかのオプションで構成されます。Pod は永続ストレージに接続して、ステートフル アプリケーションを実行できます

2、コンテナランタイムエンジン

コンテナー ランタイムは、イメージの管理と、Pod とコンテナーの実際の操作 (CRI) を担当します。

コンテナーを実行するために、各ノードにはコンテナー ランタイム エンジンがあります。Docker などですが、Kubernetes は rkt や CRI-O などの他の Open Container Initiative (OCI) 準拠のコンテナーもサポートしています。Kubernetes は、CRI インターフェースを実装する他のほとんどのコンテナーをサポートします

3・クベレット

Kubelet は、コンテナーのライフサイクルを維持する役割を担い、ボリューム (CVI) とネットワーク (CNI) の管理も担当します。

各計算ノードには、コントロール プレーンと通信する小さなアプリケーションである kubelet が含まれています。kublet は、コンテナーが Pod 内で実行されていることを保証します。コントロール プレーンがノードで操作を実行する必要がある場合、kubelet が操作を実行します。

4、代理人になる

kube-proxy は、Service のクラスター内でサービスの検出と負荷分散を提供します。

各計算ノードには、Kubernetes ネットワーク サービスを最適化するためのネットワーク プロキシである kube-proxy も含まれています。kube-proxy は、クラスター内外のネットワーク通信を処理します (オペレーティング システムのパケット フィルタリング レイヤーに依存するか、トラフィックを単独で転送します)。

3. Kubeadm が Kubernetes をデプロイする

(1) Kubernetes環境の構築方法

1、minikube

Minikube は、ローカルで Kubernetes を実行できるツールです. Minikube は、パーソナル コンピューター (Windows、macOS、および Linux PC を含む) 上で単一ノードの Kubernetes クラスターを実行できるため、Kubernetes を試したり、日常の開発作業を行うことができます。

こんにちはミニキューブ | Kubernetes

2、種類

Kind や minikube に似たツールで、ローカル コンピューターで Kubernetes を実行できます。このツールを使用するには、Docker をインストールして構成する必要があります。

親切

3・kube管理者

Kubeadm は、kubeadm init と kubeadm join の 2 つの操作コマンドを提供する K8s デプロイ ツールで、Kubernetes クラスターをすばやくデプロイします。

公式住所:

Kubeadm| Kubernetes

kubeadm のインストール | Kubernetes

kubeadm | Kubernetes のインストール

4.バイナリパッケージ

リリース版のバイナリ パッケージを Github からダウンロードし、各コンポーネントを手動でデプロイしてインストールし、Kubernetes クラスターを形成する. 手順は面倒ですが、各コンポーネントをより明確に理解することができます.

5. yum のインストール

Kubernetes の各コンポーネントを yum 経由でインストールして Kubernetes クラスターを形成しますが、yum ソースの k8s バージョンは比較的古いため、この方法はあまり使用されません。

 6. サードパーティ ツール

一部のマスターはいくつかのツールをカプセル化し、これらのツールを使用して k8s 環境をインストールします。

 7.お金を使って買う

Alibaba Cloud などのパブリック クラウド プラットフォーム k8s の直接購入

(2) Kubeadm は Kubernetes をデプロイします

kubeadm は、kubernetes クラスターの迅速な展開のために公式コミュニティによって開始されたツールです. このツールは、2 つの手順で kubernetes クラスターの展開を完了することができます

 1. マスター ノードを作成します: kubeadm init

 2. ノード ノードをマスター クラスターに追加します。 kubeadm join <マスター ノードの IP とポート>

(3) Kubernetes の展開環境要件

(1) 1 台以上のマシン、オペレーティング システム CentOS 7.x-86_x64

(2) ハードウェア構成: メモリ 2GB または 2G+、CPU 2 コアまたは CPU 2 コア+

(3) クラスタ内の各マシンが相互に通信できる

(4) スワップパーティションを無効にする

(5) クラスタ内の各マシンは外部ネットワークにアクセスでき、イメージをプルする必要があります

環境が要件を満たしていない場合、次のようにエラーが報告されます。

  

(4) Kubernetesのデプロイ環境の準備

1.ファイアウォールを無効にする

systemctl stop firewalld
systemctl disable firewalld

2.selinux を閉じる

sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久
setenforce 0  #临时

3.スワップをオフにします(k8sはパフォーマンスを向上させるために仮想メモリを禁止します)

sed -ri 's/.*swap.*/#&/' /etc/fstab #永久
swapoff -a #临时

4. ホストをマスターに追加する

cat >> /etc/hosts << EOF
192.168.132.129 k8smaster
192.168.132.130 k8snode
EOF

5. ブリッジ パラメータの設定

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system  #生效

6.同期時間

yum install ntpdate -y    #如果没有ntpdate命令先安装
ntpdate time.windows.com

(5) Kubernetes インストール固有の手順

1.Docker をインストールする

すべてのサーバー ノードに Docker/kubeadm/kubelet/kubectl をインストールします。

Kubernetes のデフォルトのコンテナー動作環境は Docker であるため、最初に Docker をインストールする必要があります。

指定したバージョンの Docker を次のようにインストールできます。 

//更新docker的yum源
yum install wget -y
 
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
 
//安装指定版本的docker:
yum install docker-ce-20.10.0 -y

インストールとアンインストールについては、公式 Web サイトの最新のドキュメントを参照してください。

CentOS に Docker エンジンをインストールする | Docker ドキュメント

Docker リリース ノート

Docker エンジンのリリース ノート | Docker ドキュメント

ダウンロードを高速化するためのアクセラレータの構成

/etc/docker/daemon.json  このファイルが存在しない場合は、最初に作成します

{
    # 阿里云镜像加速器;可自己注册复制过来
    "registry-mirrors": ["https://registry.docker-cn.com"]
}

  

埋め込む 

systemctl enable docker.service

 ビルド: kubeadm、kubelet、kubectl

キューブレット

クラスターのすべてのノードで実行され、POD とコンテナーの開始を担当します。

Kubeadm:

クラスターを初期化するためのツール

kubectl:

kubectl は kubenetes コマンド ライン ツールです。このツールを使用して、kubectl はアプリケーションのデプロイと管理、さまざまなリソースの表示、コンポーネントの作成、削除、更新を行うことができます。

2. k8s の Alibaba Cloud YUM ソースを追加します。

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

3. kubeadm、kubelet、および kubectl をインストールします。

Kubernetes のバージョンは次のとおりです。

パッチ バージョン | Kubernetes

yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y

インストールされているかどうかを確認します。

yum list installed | grep kubelet

yum list installed | grep kubeadm

yum list installed | grep kubectl

インストールされているバージョンを確認します。

kubeadm version
kubectl version --client
kubelet --version

インストール後に実行

systemctl enable kubelet.service

CentOS を再起動します: 再起動します 

Linux centos 再起動コマンド:

1. 再起動 通常再起動

2. Shutdown -r now restart immediately (root ユーザーが使用)

3. shutdown -r 10 は、10 分後に自動的に再起動します (root ユーザーが使用)

4. shutdown -r 10:30 10:30 に再起動 (root ユーザー)

4. Kubernetes マスター マスター ノードをデプロイする 

(2) マスターマシンで実行

kubeadm init 
    --apiserver-advertise-address=192.168.133.129 
    --control-plane-endpoint=master
    --image-repository registry.aliyuncs.com/google_containers 
    --kubernetes-version v1.19.4 
    --service-cidr=10.96.0.0/12 
    --pod-network-cidr=10.244.0.0/16

パラメータの説明:

        --apiserver-advertise-address クラスタ アドバタイズ アドレス、マスター ノード ID

        --control-plane-endpoint マスターノードのホスト名

        --image-repository 中国ではデフォルトのプル イメージ アドレス k8s.gcr.io にアクセスできないため、ここで Alibaba Cloud イメージ リポジトリのアドレスを指定します。

        --kubernetes-version 上記でインストールしたものと一致する K8s バージョン

        --service-cidr クラスター内部仮想ネットワーク、Pod ユニファイド アクセスの入り口

        --pod-network-cidr Pod ネットワーク。以下にデプロイされた CNI ネットワーク コンポーネント yaml と同じにします

ノート:

service-cidr の選択は、PodCIDR およびローカル ネットワークと重複または競合することはできません. 通常、ローカル ネットワークおよび PodCIDR によって使用されていないプライベート ネットワーク アドレス セグメントを選択できます. たとえば、PODCIDR が 10.244.0.0/16 を使用する場合、サービス cidr は 10.96.0.0/12 を選択できます。ネットワークは重複して競合しません。 

実行エラー

centos を再起動してから、上記の kubeadm init コマンドを実行します。

試した後、centos を再起動しても同じエラーが報告され、慎重に確認します。「kube-apiserver.yaml、kube-controller-manager.yaml、kube-scheduler.yaml、etcd.yaml」これらの yaml ファイルは、リセットするだけ

kubeadm reset
mv /etc/containerd/config.toml /tmp/
systemctl restart containerd

次に、上記の kubeadm init コマンドを再入力すると、次の出力が得られます。最後の段落
kubeadm join IP:PORT --token XX \
    --discovery-token-ca-cert-hash sha256:XX を 貼り付けます。

バックアップ(クラスタに新規ノードを追加するため、実行コマンドはkubeadm initが最後に出力するkubeadm joinコマンド)

kubeadm join 192.168.133.129:6443 --token vx912w.g8wyei3zo8qem1mq \
    --discovery-token-ca-cert-hash sha256:5c08ca34fed1e3fcef41e581970d3046ac85db10ee4a3875efb0bca5c8f8b104

上の図の 1 は、初期化が成功したことを意味します。

2 は、クラスターがまだ必要とする操作を示します

3 はノード トークンを追加することを意味します (24 時間有効で、有効期限が切れた後にトークンを取得するだけです)

トークンを再取得する

kubeadm token create --print-join-command

(2) マスターマシンで実行 (環境変数を設定)

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 nodes

次のエラーが発生した場合:

sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

/etc/sudoersファイルは読み取り専用であるため、sudo chmod 777 /etc/sudoers の結果、このファイルを変更できますが、すべてのユーザーの sudo は使用できません

コマンドを入力して、sudoers の権限を変更できます。

chmod 0440 /etc/sudoers 
reboot

次に、再起動を入力して再起動します

 kubectl でノードを取得

5. ノード ノードを Kubernetes マスターに追加し、ノード マシンで実行します。

クラスタに新しいノードを追加するために実行されるコマンドは、kubeadm init の最後の出力 kubeadm join コマンドです。

kubeadm join 192.168.133.129:6443 --token vx912w.g8wyei3zo8qem1mq \
    --discovery-token-ca-cert-hash sha256:5c08ca34fed1e3fcef41e581970d3046ac85db10ee4a3875efb0bca5c8f8b104

 kubectl でノードを取得 

(6) ネットワーク プラグインのデプロイ (マスター マスター ノード マシンが実行中)

1. kube-flannel.yml ファイルをダウンロードします

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

2. kube-flannel.yml ファイルを適用して、ランタイム コンテナーを取得します。

kubectl apply -f kube-flannel.yml

3. ノードのステータスを表示する: kubectl get nodes

すぐには準備ができません。ノードの準備が整うまでしばらく時間がかかります

成功のステータスを確認する 

kubectl get cs
kubectl cluster-info

ランタイム コンテナー ポッドを表示します (複数の Docker コンテナーがポッドで実行されています)。

kubectl get pods -n kube-system

この時点で、k8s 環境がセットアップされました。! !

4. Kubernetes は「コンテナー化されたアプリケーション」をデプロイします ( kubernetes クラスターのテスト)

クラスター内に Pod を作成し、正常に動作していることを確認する

1. Kubernetes クラスターにNginxをデプロイする

1. インターネットで nginx ミラーを取得する

kubectl create deployment nginx --image=nginx

2. ポート 80 を外部に公開する

kubectl expose deployment nginx --port=80 --type=NodePort

3. 外部ポートを確認する

kubectl get pod,svc

4. アクセスアドレス: http://NodeIP:Port

 2.Tomcat を Kubernetes クラスターにデプロイする

kubectl create deployment tomcat --image=tomcat

kubectl expose deployment tomcat --port=8080 --type=NodePort

kubectl get pod,svc

アクセスアドレス:http://NodeIP:Port

おすすめ

転載: blog.csdn.net/MinggeQingchun/article/details/126347932