k8sプラクティス(15):Centos7.6はk8s v1.16.4高可用性クラスター(アクティブおよびスタンバイモード)を展開します

1.展開環境#

ホストリスト:

ホスト名 Centosバージョン ip ドッカーバージョン フランネルバージョン Keepalivedバージョン ホスト構成 備考
master01 7.6.1810 172.27.34.3 18.09.9 v0.11.0 v1.3.5 4C4G control plane
master02 7.6.1810 172.27.34.4 18.09.9 v0.11.0 v1.3.5 4C4G control plane
master03 7.6.1810 172.27.34.5 18.09.9 v0.11.0 v1.3.5 4C4G control plane
work01 7.6.1810 172.27.34.93 18.09.9 / / 4C4G worker nodes
work02 7.6.1810 172.27.34.94 18.09.9 / / 4C4G worker nodes
work03 7.6.1810 172.27.34.95 18.09.9 / / 4C4G worker nodes
VIP 7.6.1810 172.27.34.130 18.09.9 v0.11.0 v1.3.5 4C4G 制御面に浮かぶ
client 7.6.1810 172.27.34.234 / / / 4C4G client

7つのサーバー、3つのコントロールプレーン、3つの作業、1つのクライアントがあります。

k8sバージョン:

ホスト名 kubeletバージョン kubeadmバージョン kubectlバージョン 備考
master01 v1.16.4 v1.16.4 v1.16.4 kubectlオプション
master02 v1.16.4 v1.16.4 v1.16.4 kubectlオプション
master03 v1.16.4 v1.16.4 v1.16.4 kubectlオプション
work01 v1.16.4 v1.16.4 v1.16.4 kubectlオプション
work02 v1.16.4 v1.16.4 v1.16.4 kubectlオプション
work03 v1.16.4 v1.16.4 v1.16.4 kubectlオプション
client / / v1.16.4 client

2つの高可用性アーキテクチャ#

この記事では、kubeadmを使用して高可用性k8sクラスターを構築します。k8sクラスターの高可用性は、実際にはk8sのコアコンポーネントの高可用性です。ここでは、アクティブスタンバイモードが使用されます。アーキテクチャは次のとおりです。

アクティブ/スタンバイモードでの高可用性アーキテクチャの説明:

コアコンポーネント 高可用性モード 高可用性の実装
apiserver アクティブおよびスタンバイ keepalived
コントローラーマネージャー アクティブ/スタンバイ リーダー選挙
スケジューラー アクティブおよびスタンバイ リーダーの選出
etcd cluster kubeadm

**Apiserver **は、ノードに障害が発生したときにkeepalivedvip転送をトリガーするkeepalivedを通じて高い可用性を実現します。

**controller-manager **リーダーはk8sで内部的に選出され(--leader-electの選択によって制御され、デフォルトはtrue)、クラスター内で同時に実行されるコントローラーマネージャーコンポーネントは1つだけです。

スケジューラリーダーはk8sでの選択によって内部的に生成され(--leader-elect選択によって制御され、デフォルトはtrue)、クラスター内で同時に実行されるスケジューラコンポーネントは1つだけです。

**etcd **は、kubeadmを実行してクラスターを自動的に作成することにより、高い可用性を実現します。デプロイされたノードの数は奇数です。3ノード方式では、最大1台のマシンのダウンタイムに耐えることができます。

3、インストールの準備#

コントロールプレーンと作業ノードの両方が、操作のこの部分を実行します。

Centos7.6のインストールの詳細については、以下を参照してください。 [Centos7.6オペレーティングシステムのインストールと最適化の記録](https://blog.51cto.com/3241766/2398136)

Centosをインストールすると、ファイアウォールとselinuxが無効になり、Aliソースが設定されます。

1. ホスト名を設定します##

1.1 ホスト名を変更する###

[ root@centos7 ~]# hostnamectl set-hostname master01
[ root@centos7 ~]# more /etc/hostname             
master01

終了して再度ログインすると、新しく設定されたホスト名master01が表示されます。

1.2 ホストファイルを変更します###

[ root@master01 ~]# cat >>/etc/hosts << EOF
172.27.34.3 master01
172.27.34.4 master02
172.27.34.5 master03
172.27.34.93 work01 
172.27.34.94 work02
172.27.34.95 work03
EOF

2. macアドレスuuidを確認します##

[ root@master01 ~]# cat /sys/class/net/ens160/address
[ root@master01 ~]# cat /sys/class/dmi/id/product_uuid

各ノードのmacとuuidが一意であることを確認してください

3. スワップを無効にする##

3.1 ###を一時的に無効にします

[ root@master01 ~]# swapoff -a

3.2 ###を完全に無効にする

再起動して有効にする必要がある場合は、スワップを無効にした後で構成ファイル/ etc / fstabを変更し、スワップをコメントする必要があります。

[ root@master01 ~]# sed -i.bak '/swap/s/^/#/'/etc/fstab

4. カーネルパラメータの変更##

この記事のk8sネットワークはフランネルを使用しています。ネットワークはカーネルパラメータbridge-nf-call-iptables = 1を設定する必要があります。このパラメータを変更するには、システムにbr_netfilterモジュールが必要です。

4.1 br_netfilterモジュールの読み込み###

br_netfilterモジュールを表示します:

[ root@master01 ~]# lsmod |grep br_netfilter

システムにbr_netfilterモジュールがない場合は、次の新しいコマンドを実行します(存在する場合)。それらは無視してください。

br_netfilterモジュールを一時的に追加します:

[ root@master01 ~]# modprobe br_netfilter

このメソッドは再起動後に失敗します

br_netfilterモジュールを恒久的に追加します:

[ root@master01 ~]# cat >/etc/rc.sysinit << EOF
#! /bin/bash
for file in/etc/sysconfig/modules/*.modules ; do
[ - x $file ] && $file
done
EOF
[ root@master01 ~]# cat > /etc/sysconfig/modules/br_netfilter.modules << EOF
modprobe br_netfilter
EOF
[ root@master01 ~]# chmod 755 /etc/sysconfig/modules/br_netfilter.modules

4.2 カーネルパラメータの一時的な変更###

[ root@master01 ~]# sysctl net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-iptables =1[root@master01 ~]# sysctl net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-ip6tables =1

4.3 カーネルパラメータの永続的な変更###

[ root@master01 ~]# cat <<EOF >/etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
EOF
[ root@master01 ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1

5. kubernetesソースを設定します##

5.1 kubernetesソースを追加しました###

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

5.2 キャッシュの更新###

[ root@master01 ~]# yum clean all
[ root@master01 ~]# yum -y makecache

6. パスワードなしのログイン##

master01からmaster02およびmaster03へのパスワードなしのログインを構成します。この手順はmaster01でのみ実行されます。

6.1 秘密鍵を作成する###

[ root@master01 ~]# ssh-keygen -t rsa

6.2 秘密鍵をmaster02 / master03 ###に同期します

[ root@master01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected][root@master01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

6.3 パスワードなしのログインテスト###

[ root@master01 ~]# ssh 172.27.34.4[root@master01 ~]# ssh master03

master01は、パスワードを入力せずにmaster02とmaster03に直接ログインできます。

4、Dockerのインストール#

コントロールプレーンと作業ノードの両方が、操作のこの部分を実行します。

1. 依存関係をインストールします##

[ root@master01 ~]# yum install -y yum-utils   device-mapper-persistent-data   lvm2

2. Dockerソースを設定します##

[ root@master01 ~]# yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo

3. DockerCEをインストールします##

3.1 Dockerインストールバージョンビュー###

[ root@master01 ~]# yum list docker-ce --showduplicates | sort -r

3.2 docker ###をインストールします

[ root@master01 ~]# yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y

インストールされているdockerのバージョンを18.09.9として指定します

4. Dockerを起動します##

[ root@master01 ~]# systemctl start docker
[ root@master01 ~]# systemctl enable docker

5. コマンド完了##

5.1 bash-completion ###をインストールします

[ root@master01 ~]# yum -y install bash-completion

5.2 bash-completion ###をロードします

[ root@master01 ~]# source /etc/profile.d/bash_completion.sh

6. ミラー加速##

Docker Hubサーバーは海外にあるため、イメージのダウンロードに時間がかかります。イメージアクセラレータを構成できます。主なアクセラレータは、中国レジストリミラー、Alibaba Cloudアクセラレータ、およびDockerによって正式に提供されているDaoCloudアクセラレータです。この記事では、Alibabaアクセラレータの構成を例として取り上げます。

6.1 アリババクラウドコンテナモジュール###にログインします

ログインアドレスは次のとおりです。[https://cr.console.aliyun.com](https://cr.console.aliyun.com/)、登録していない人は最初にAlibabaCloudアカウントを登録できます

6.2 ミラーアクセラレータを構成する###

demo.jsonファイルを構成します

[ root@master01 ~]# mkdir -p /etc/docker
[ root@master01 ~]# tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors":["https://v16stybc.mirror.aliyuncs.com"]}
EOF

サービスを再開します

[ root@master01 ~]# systemctl daemon-reload
[ root@master01 ~]# systemctl restart docker

アクセラレータの構成が完了しました

7. 検証##

[ root@master01 ~]# docker --version
[ root@master01 ~]# docker run hello-world

dockerのバージョンを照会し、コンテナーhello-worldを実行して、dockerが正常にインストールされているかどうかを確認します。

8. Cgroupドライバーの変更##

8.1 demo.json ###を変更します

demo.jsonを変更し、「exec-opts」を追加します:["native.cgroupdriver = systemd" '

[ root@master01 ~]# more /etc/docker/daemon.json 
{" registry-mirrors":["https://v16stybc.mirror.aliyuncs.com"],"exec-opts":["native.cgroupdriver=systemd"]}

8.2 ドッカーをリロード###

[ root@master01 ~]# systemctl daemon-reload
[ root@master01 ~]# systemctl restart docker

cgroupdriverは、警告を排除するように変更されています。

WARNING IsDockerSystemdCheck: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/

5、keepalivedインストール#

コントロールプレーンノードはすべて、操作のこの部分を実行します。

1. keepalivedをインストールします##

[ root@master01 ~]# yum -y install keepalived

2. keepalived構成##

master01のKeepalived構成:

[ root@master01 ~]# more /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
 router_id master01
}
vrrp_instance VI_1 {
 state MASTER 
 interfaceens160
 virtual_router_id 50
 priority 100
 advert_int 1
 authentication {
  auth_type PASS
  auth_pass 1111}
 virtual_ipaddress {172.27.34.130}}

master02のKeepalived構成:

[ root@master02 ~]# more /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
 router_id master02
}
vrrp_instance VI_1 {
 state BACKUP 
 interfaceens160
 virtual_router_id 50
 priority 90
 advert_int 1
 authentication {
  auth_type PASS
  auth_pass 1111}
 virtual_ipaddress {172.27.34.130}}

master03のKeepalived構成:

[ root@master03 ~]# more /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
global_defs {
 router_id master03
}
vrrp_instance VI_1 {
 state BACKUP 
 interfaceens160
 virtual_router_id 50
 priority 80
 advert_int 1
 authentication {
  auth_type PASS
  auth_pass 1111}
 virtual_ipaddress {172.27.34.130}

3. keepalivedを開始します##

すべてのコントロールプレーンはkeepalivedサービスを開始し、開始するように設定します

[ root@master01 ~]# service keepalived start
[ root@master01 ~]# systemctl enable keepalived

4. VIPビュー##

[ root@master01 ~]# ip a

vipはmaster01にあります

6、k8sのインストール#

コントロールプレーンと作業ノードの両方が、操作のこの部分を実行します。

1. バージョンビュー##

[ root@master01 ~]# yum list kubelet --showduplicates | sort -r

この記事でインストールされているkubeletのバージョンは1.16.4であり、このバージョンでサポートされているdockerのバージョンは1.13.1、17.03、17.06、17.09、18.06、18.09です。

2. kubelet、kubeadm、kubectlをインストールします##

2.1 3つのパッケージをインストールします###

[ root@master01 ~]# yum install -y kubelet-1.16.4 kubeadm-1.16.4 kubectl-1.16.4

2.2 インストールパッケージの説明###

2.3 kubeletを開始###

kubeletを起動し、起動するように設定します

[ root@master01 ~]# systemctl enable kubelet && systemctl start kubelet

2.4 kubectlコマンドの完了###

[ root@master01 ~]# echo "source <(kubectl completion bash)">>~/.bash_profile
[ root@master01 ~]# source .bash_profile 

3. ミラーをダウンロード##

3.1 ミラーダウンロードスクリプト###

ほとんどすべてのKubernetesインストールコンポーネントとDockerイメージは、goolge自身のWebサイトに配置されています。直接アクセスすると、ネットワークの問題が発生する可能性があります。ここでの解決策は、Alibaba Cloudミラーウェアハウスからイメージをダウンロードし、ローカルにプルして、デフォルトのイメージタグに戻すことです。 。この記事では、image.shスクリプトを実行してイメージをプルします。

[ root@master01 ~]# more image.sh 
#! /bin/bash
url=registry.cn-hangzhou.aliyuncs.com/loong576
version=v1.16.4
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)for imagename in ${images[@]};do
 docker pull $url/$imagename
 docker tag $url/$imagename k8s.gcr.io/$imagename
 docker rmi -f $url/$imagename
done

urlはAlibabaCloudミラーウェアハウスのアドレスであり、バージョンはkubernetesのインストール済みバージョンです。

3.2 ミラーをダウンロード###

スクリプトimage.shを実行して、指定されたバージョンの画像をダウンロードします

[ root@master01 ~]# ./image.sh
[ root@master01 ~]# docker images

7、マスターを初期化します#

master01ノードは、操作のこの部分を実行します。

1. kubeadm.conf

[ root@master01 ~]# more kubeadm-config.yaml 
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.16.4
apiServer:
 certSANs:    #すべての久部を記入してください-apiserverノードのホスト名、IP、VIP
 - master01
 - master02
 - master03
 - node01
 - node02
 - node03
  -172.27.34.3-172.27.34.4-172.27.34.5-172.27.34.93-172.27.34.94-172.27.34.95-172.27.34.130
controlPlaneEndpoint:"172.27.34.130:6443"
networking:
 podSubnet:"10.244.0.0/16"

kubeadm.confは初期構成ファイルです

2. マスターの初期化##

[ root@master01 ~]# kubeadm init --config=kubeadm-config.yaml

kubeadm joinの出力を記録します。このコマンドは、作業ノードおよびその他の制御平面ノードをクラスターに結合するために後で必要になります。

You can now join any number of control-plane nodes by copying certificate authorities 
and service account keys on each node and then running the following as root:

 kubeadm join 172.27.34.130:6443--token qbwt6v.rr4hsh73gv8vrcij \
 - - discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 \
 - - control-plane       

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 172.27.34.130:6443--token qbwt6v.rr4hsh73gv8vrcij \
 - - discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 

初期化に失敗しました:

初期化に失敗した場合は、kubeadmresetを実行して再初期化してください

[ root@master01 ~]# kubeadm reset
[ root@master01 ~]# rm -rf $HOME/.kube/config

3. 環境変数をロードする##

[ root@master01 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf">>~/.bash_profile
[ root@master01 ~]# source .bash_profile

この記事のすべての操作はrootユーザーの下で実行されます。root以外のユーザーの場合は、次の操作を実行します。

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

4. フランネルネットワークをインストールします##

master01で新しいフランネルネットワークを作成します

[ root@master01 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

ネットワーク上の理由により、インストールが失敗する場合があります。記事の最後にあるkube-flannel.ymlファイルを直接ダウンロードして、applyを実行できます。

8つの制御平面ノードがクラスターに参加します#

1. 証明書の配布##

master01配布証明書:

master01でスクリプトcert-main-master.shを実行して、証明書をmaster02とmaster03に配布します。

[ root@master01 ~]# ll|grep cert-main-master.sh 
- rwxr--r--1ルートルート6381215:23 cert-main-master.sh
[ root@master01 ~]# more cert-main-master.sh 
USER=root # customizable
CONTROL_PLANE_IPS="172.27.34.4 172.27.34.5"for host in ${CONTROL_PLANE_IPS};do
 scp /etc/kubernetes/pki/ca.crt "${USER}"@$host:
 scp /etc/kubernetes/pki/ca.key "${USER}"@$host:
 scp /etc/kubernetes/pki/sa.key "${USER}"@$host:
 scp /etc/kubernetes/pki/sa.pub "${USER}"@$host:
 scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host:
 scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host:
 scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:etcd-ca.crt
 # Quote this line if you are using external etcd
 scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key
done

Master02は、証明書を指定されたディレクトリに移動します:

master02でスクリプトcert-other-master.shを実行して、証明書を指定されたディレクトリに移動します

[ root@master02 ~]# pwd
/root
[ root@master02 ~]# ll|grep cert-other-master.sh 
- rwxr--r--1ルートルート4841215:29 cert-other-master.sh
[ root@master02 ~]# more cert-other-master.sh 
USER=root # customizable
mkdir -p /etc/kubernetes/pki/etcd
mv /${USER}/ca.crt /etc/kubernetes/pki/
mv /${USER}/ca.key /etc/kubernetes/pki/
mv /${USER}/sa.pub /etc/kubernetes/pki/
mv /${USER}/sa.key /etc/kubernetes/pki/
mv /${USER}/front-proxy-ca.crt /etc/kubernetes/pki/
mv /${USER}/front-proxy-ca.key /etc/kubernetes/pki/
mv /${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt
# Quote this line if you are using external etcd
mv /${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key
[ root@master02 ~]# ./cert-other-master.sh 

Master03は、証明書を指定されたディレクトリに移動します:

また、master03でスクリプトcert-other-master.shを実行します

[ root@master03 ~]# pwd
/root
[ root@master03 ~]# ll|grep cert-other-master.sh 
- rwxr--r--1ルートルート4841215:31 cert-other-master.sh
[ root@master03 ~]# ./cert-other-master.sh 

2. master02がクラスターに参加します##

kubeadm join 172.27.34.130:6443--token qbwt6v.rr4hsh73gv8vrcij \
 - - discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 \
 - - control-plane

コマンドを実行して、初期マスターによって生成されたコントロールプレーンノードをクラスターに追加します

3. master03がクラスターに参加します##

kubeadm join 172.27.34.130:6443--token qbwt6v.rr4hsh73gv8vrcij \
 - - discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 \
 - - control-plane

4. 環境変数をロードする##

master02およびmaster03ロード環境変数

[ root@master02 ~]# scp master01:/etc/kubernetes/admin.conf /etc/kubernetes/[root@master02 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf">>~/.bash_profile
[ root@master02 ~]# source .bash_profile 
[ root@master03 ~]# scp master01:/etc/kubernetes/admin.conf /etc/kubernetes/[root@master03 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf">>~/.bash_profile
[ root@master03 ~]# source .bash_profile 

このステップは、master02およびmaster03でkubectlコマンドを実行することです。

5. クラスターノードビュー##

[ root@master01 ~]# kubectl get nodes
[ root@master01 ~]# kubectl get po -o wide -n kube-system 

すべてのコントロールプレーンノードは準備完了状態にあり、すべてのシステムコンポーネントは正常です。

9つの作業ノードがクラスターに参加します#

1. work01クラスターに参加する##

kubeadm join 172.27.34.130:6443--token qbwt6v.rr4hsh73gv8vrcij \
 - - discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 

コマンドを実行して、初期マスターによって生成された作業ノードをクラスターに追加します

2. work02クラスターに参加する##

3. work03クラスターに参加する##

4. クラスターノードビュー##

[ root@master01 ~]# kubectl get nodes
NAME       STATUS   ROLES    AGE     VERSION
master01   Ready    master   44m     v1.16.4
master02   Ready    master   33m     v1.16.4
master03   Ready    master   23m     v1.16.4
work01     Ready    <none>   11m     v1.16.4
work02     Ready    <none>   7m50s   v1.16.4
work03     Ready    <none>   3m4s    v1.16.4

10、クライアント構成#

1. kubernetesソースを設定します##

1.1 kubernetesソースを追加しました###

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

1.2 キャッシュの更新###

[ root@client ~]# yum clean all
[ root@client ~]# yum -y makecache

2. kubectlをインストールします##

[ root@client ~]# yum install -y kubectl-1.16.4

インストールバージョンはクラスターバージョンと一致しています

3. コマンド完了##

3.1 bash-completion ###をインストールします

[ root@client ~]# yum -y install bash-completion

3.2 bash-completion ###をロードします

[ root@client ~]# source /etc/profile.d/bash_completion.sh

3.3 admin.conf ###をコピーします

[ root@client ~]# mkdir -p /etc/kubernetes
[ root@client ~]# scp 172.27.34.3:/etc/kubernetes/admin.conf /etc/kubernetes/[root@client ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf">>~/.bash_profile
[ root@client ~]# source .bash_profile 

3.4 環境変数をロードする###

[ root@master01 ~]# echo "source <(kubectl completion bash)">>~/.bash_profile
[ root@master01 ~]# source .bash_profile 

4. kubectl test

[ root@client ~]# kubectl get nodes 
[ root@client ~]# kubectl get cs
[ root@client ~]# kubectl get po -o wide -n kube-system 

11、ダッシュボードビルド#

このセクションの内容はクライアント側で完了します

1. yamlをダウンロード##

[ root@client ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

接続がタイムアウトした場合は、さらに数回試すことができます。 Recommendationd.yamlがアップロードされており、記事の最後からダウンロードすることもできます。

2. yamlを構成します##

2.1 ミラーアドレスを変更します###

[ root@client ~]# sed -i 's/kubernetesui/registry.cn-hangzhou.aliyuncs.com\/loong576/g' recommended.yaml

デフォルトのミラーウェアハウスネットワークにアクセスできないため、Aliミラーに変更されます

2.2 エクストラネットアクセス###

[ root@client ~]# sed -i '/targetPort: 8443/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' recommended.yaml

NodePortを構成し、https:// NodeIp:NodePortを介して外部からダッシュボードにアクセスします。この時点で、ポートは30001です。

2.3 管理者アカウントを追加します###

[ root@client ~]# cat >> recommended.yaml << EOF
---
# - - - - - - - - - - - - - - - - - - - dashboard-admin ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:
 name: dashboard-admin
 namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
 name: dashboard-admin
subjects:- kind: ServiceAccount
 name: dashboard-admin
 namespace: kubernetes-dashboard
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin

ダッシュボードにログインするためのスーパー管理者アカウントを作成します

3. 展開アクセス##

3.1 ダッシュボードをデプロイする###

[ root@client ~]# kubectl apply -f recommended.yaml

3.2 ステータスビュー###

[ root@client ~]# kubectl get all -n kubernetes-dashboard 

3.3 トークンビュー###

[ root@client ~]# kubectl describe secrets -n kubernetes-dashboard dashboard-admin

トークンは次のとおりです。

eyJhbGciOiJSUzI1NiIsImtpZCI6Ikd0NHZ5X3RHZW5pNDR6WEdldmlQUWlFM3IxbGM3aEIwWW1IRUdZU1ZKdWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tNms1ZjYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZjk1NDE0ODEtMTUyZS00YWUxLTg2OGUtN2JmMWU5NTg3MzNjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.LAe7N8Q6XR3d0W8w-r3ylOKOQHyMg5UDfGOdUkko_tqzUKUtxWQHRBQkowGYg9wDn-nU9E-rkdV9coPnsnEGjRSekWLIDkSVBPcjvEd0CVRxLcRxP6AaysRescHz689rfoujyVhB4JUfw1RFp085g7yiLbaoLP6kWZjpxtUhFu-MKh1NOp7w4rT66oFKFR-_5UbU3FoetAFBmHuZ935i5afs8WbNzIkM6u9YDIztMY3RYLm9Zs4KxgpAmqUmBSlXFZNW2qg6hxBqDijW_1bc0V7qJNt_GXzPs2Jm1trZR6UU1C2NAJVmYBu9dcHYtTCgxxkWKwR0Qd2bApEUIJ5Wug

3.4 アクセス###

次のサイトにアクセスするには、Firefoxブラウザを使用してください: https:// VIP:30001

リスクを受け入れる

トークン経由でログイン

ダッシュボードは、クラスター管理、ワークロード、サービス検出、[負荷分散](https://cloud.tencent.com/product/clb?from=10680)、ストレージ、辞書構成、ログビューなどの機能を提供します。

12.クラスターの高可用性テスト#

このセクションの内容はクライアント側で完了します

1. コンポーネントが配置されているノードを表示します##

ipを介してapiserverが配置されているノードを表示し、leader-electを介してスケジューラーとコントローラーマネージャーが配置されているノードを表示します。

[ root@master01 ~]# ip a|grep 130
 inet 172.27.34.130/32 scope global ens160
[ root@client ~]# kubectl get endpoints kube-controller-manager -n kube-system -o yaml |grep holderIdentity
 control-plane.alpha.kubernetes.io/leader:'{"holderIdentity":"master01_6caf8003-052f-451d-8dce-4516825213ad","leaseDurationSeconds":15,"acquireTime":"2020-01-02T09:36:23Z","renewTime":"2020-01-03T07:57:55Z","leaderTransitions":2}'[root@client ~]# kubectl get endpoints kube-scheduler -n kube-system -o yaml |grep holderIdentity
 control-plane.alpha.kubernetes.io/leader:'{"holderIdentity":"master01_720d65f9-e425-4058-95d7-e5478ac951f7","leaseDurationSeconds":15,"acquireTime":"2020-01-02T09:36:20Z","renewTime":"2020-01-03T07:58:03Z","leaderTransitions":2}'

コンポーネント名 ノード
apiserver master01
controller-manager master01
scheduler master01

2. master01シャットダウン##

2.1 master01をシャットダウンし、ダウンタイムをシミュレートします###

[ root@master01 ~]# init 0

2.2 すべてのコンポーネントを表示###

vipはmaster02にフロートしました

[ root@master02 ~]# ip a|grep 130
 inet 172.27.34.130/32 scope global ens160

コントローラーマネージャーとスケジューラーも移行しました

[ root@client ~]# kubectl get endpoints kube-controller-manager -n kube-system -o yaml |grep holderIdentity
 control-plane.alpha.kubernetes.io/leader:'{"holderIdentity":"master02_b3353e8f-a02f-4322-bf17-2f596cd25ba5","leaseDurationSeconds":15,"acquireTime":"2020-01-03T08:04:42Z","renewTime":"2020-01-03T08:06:36Z","leaderTransitions":3}'[root@client ~]# kubectl get endpoints kube-scheduler -n kube-system -o yaml |grep holderIdentity
 control-plane.alpha.kubernetes.io/leader:'{"holderIdentity":"master03_e0a2ec66-c415-44ae-871c-18c73258dc8f","leaseDurationSeconds":15,"acquireTime":"2020-01-03T08:04:56Z","renewTime":"2020-01-03T08:06:45Z","leaderTransitions":3}'
コンポーネント名 ノード
apiserver master02
controller-manager master02
scheduler master03

2.3 クラスター機能テスト###

お問い合わせ:

[ root@client ~]# kubectl get nodes
NAME       STATUS     ROLES    AGE   VERSION
master01   NotReady   master   22h   v1.16.4
master02   Ready      master   22h   v1.16.4
master03   Ready      master   22h   v1.16.4
work01     Ready      <none>   22h   v1.16.4
work02     Ready      <none>   22h   v1.16.4
work03     Ready      <none>   22h   v1.16.4

master01ステータスはNotReadyです

新しいポッド:

[ root@client ~]# more nginx-master.yaml 
apiVersion: apps/v1             #記述ファイルは拡張子に従います/Kubernetes API v1beta1
kind: Deployment                #デプロイメントとしてリソースタイプを作成します
metadata:                       #リソースメタデータ
 name: nginx-master            #展開名
spec:                           #展開仕様
 selector:
 matchLabels:
  app: nginx 
 replicas:3                   #部数を3に指定します
 template:                     #ポッドテンプレートを定義する
 metadata:                   #ポッドメタデータを定義する
  labels:                   #ラベルを定義する
  app: nginx              #ラベルのキーと値はそれぞれappとnginxです
 spec:                       #ポッドの仕様
  containers:- name: nginx             #コンテナの名前
  image: nginx:latest     #コンテナで使用されるイメージを作成します
[ root@client ~]# kubectl apply -f nginx-master.yaml 
deployment.apps/nginx-master created
[ root@client ~]# kubectl get po -o wide
NAME                            READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
nginx-master-75b7bfdb6b-lnsfh   1/1     Running   0          4m44s   10.244.5.6   work03   <none><none>
nginx-master-75b7bfdb6b-vxfg7   1/1     Running   0          4m44s   10.244.3.3   work01   <none><none>
nginx-master-75b7bfdb6b-wt9kc   1/1     Running   0          4m44s   10.244.4.5   work02   <none><none>

2.4 結論として###

コントロールプレーンノードがダウンすると、VIPがドリフトし、クラスターの機能は影響を受けません。

3. master02シャットダウン##

master01をシャットダウンしながらmaster02をシャットダウンして、クラスターが引き続き外部で正常に機能できるかどうかをテストします。

3.1 master02を閉じる:###

[ root@master02 ~]# init 0

3.2 VIPを見る:###

[ root@master03 ~]# ip a|grep 130
 inet 172.27.34.130/32 scope global ens160

vipは唯一の制御面にドリフトします:master03

3.3 クラスター機能テスト###

[ root@client ~]# kubectl get nodes
Error from server: etcdserver: request timed out
[ root@client ~]# kubectl get nodes
The connection to the server 172.27.34.130:6443 was refused - did you specify the right host or port?

etcdクラスターがクラッシュし、k8sクラスター全体を外部から提供できなくなります。

この記事のすべてのスクリプトと構成ファイルがアップロードされました: [Centos7.6-install-k8s-v1.16.4-HA-cluster](https://github.com/loong576/Centos7.6-install-k8s-v1.16.4-HA-cluster)

Recommended Posts

k8sプラクティス(15):Centos7.6はk8s v1.16.4高可用性クラスター(アクティブおよびスタンバイモード)を展開します
k8sプラクティス(1):Centos 7.6デプロイメントk8s(v1.14.2)クラスター
CentOS7.3.1611はk8s1.5.2クラスターを展開します
CentOS7はk8sクラスターを展開します
Centos7はKubernetesクラスターを展開します
centos7でk8sクラスターをインストールおよび構成するための詳細な手順
Centos7インストールk8sクラスター1.15.0バージョン
Centos7hadoopクラスターのインストールと構成