ホストリスト:
ホスト名 | 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 |
この記事では、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台のマシンのダウンタイムに耐えることができます。
コントロールプレーンと作業ノードの両方が、操作のこの部分を実行します。
Centos7.6のインストールの詳細については、以下を参照してください。 [Centos7.6オペレーティングシステムのインストールと最適化の記録](https://blog.51cto.com/3241766/2398136)
Centosをインストールすると、ファイアウォールとselinuxが無効になり、Aliソースが設定されます。
[ root@centos7 ~]# hostnamectl set-hostname master01
[ root@centos7 ~]# more /etc/hostname
master01
終了して再度ログインすると、新しく設定されたホスト名master01が表示されます。
[ 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
[ root@master01 ~]# cat /sys/class/net/ens160/address
[ root@master01 ~]# cat /sys/class/dmi/id/product_uuid
各ノードのmacとuuidが一意であることを確認してください
[ root@master01 ~]# swapoff -a
再起動して有効にする必要がある場合は、スワップを無効にした後で構成ファイル/ etc / fstabを変更し、スワップをコメントする必要があります。
[ root@master01 ~]# sed -i.bak '/swap/s/^/#/'/etc/fstab
この記事のk8sネットワークはフランネルを使用しています。ネットワークはカーネルパラメータbridge-nf-call-iptables = 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
[ 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
[ 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
[ 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
[ root@master01 ~]# yum clean all
[ root@master01 ~]# yum -y makecache
master01からmaster02およびmaster03へのパスワードなしのログインを構成します。この手順はmaster01でのみ実行されます。
[ root@master01 ~]# ssh-keygen -t rsa
[ 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]
[ root@master01 ~]# ssh 172.27.34.4[root@master01 ~]# ssh master03
master01は、パスワードを入力せずにmaster02とmaster03に直接ログインできます。
コントロールプレーンと作業ノードの両方が、操作のこの部分を実行します。
[ root@master01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[ root@master01 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[ root@master01 ~]# yum list docker-ce --showduplicates | sort -r
[ root@master01 ~]# yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y
インストールされているdockerのバージョンを18.09.9として指定します
[ root@master01 ~]# systemctl start docker
[ root@master01 ~]# systemctl enable docker
[ root@master01 ~]# yum -y install bash-completion
[ root@master01 ~]# source /etc/profile.d/bash_completion.sh
Docker Hubサーバーは海外にあるため、イメージのダウンロードに時間がかかります。イメージアクセラレータを構成できます。主なアクセラレータは、中国レジストリミラー、Alibaba Cloudアクセラレータ、およびDockerによって正式に提供されているDaoCloudアクセラレータです。この記事では、Alibabaアクセラレータの構成を例として取り上げます。
ログインアドレスは次のとおりです。[https://cr.console.aliyun.com](https://cr.console.aliyun.com/)、登録していない人は最初にAlibabaCloudアカウントを登録できます
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
アクセラレータの構成が完了しました
[ root@master01 ~]# docker --version
[ root@master01 ~]# docker run hello-world
dockerのバージョンを照会し、コンテナーhello-worldを実行して、dockerが正常にインストールされているかどうかを確認します。
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"]}
[ 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/
コントロールプレーンノードはすべて、操作のこの部分を実行します。
[ root@master01 ~]# yum -y install 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}
すべてのコントロールプレーンはkeepalivedサービスを開始し、開始するように設定します
[ root@master01 ~]# service keepalived start
[ root@master01 ~]# systemctl enable keepalived
[ root@master01 ~]# ip a
vipはmaster01にあります
コントロールプレーンと作業ノードの両方が、操作のこの部分を実行します。
[ 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です。
[ root@master01 ~]# yum install -y kubelet-1.16.4 kubeadm-1.16.4 kubectl-1.16.4
kubeletを起動し、起動するように設定します
[ root@master01 ~]# systemctl enable kubelet && systemctl start kubelet
[ root@master01 ~]# echo "source <(kubectl completion bash)">>~/.bash_profile
[ root@master01 ~]# source .bash_profile
ほとんどすべての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のインストール済みバージョンです。
スクリプトimage.shを実行して、指定されたバージョンの画像をダウンロードします
[ root@master01 ~]# ./image.sh
[ root@master01 ~]# docker images
master01ノードは、操作のこの部分を実行します。
[ 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は初期構成ファイルです
[ 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
[ 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
master01で新しいフランネルネットワークを作成します
[ root@master01 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
ネットワーク上の理由により、インストールが失敗する場合があります。記事の最後にあるkube-flannel.ymlファイルを直接ダウンロードして、applyを実行できます。
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
kubeadm join 172.27.34.130:6443--token qbwt6v.rr4hsh73gv8vrcij \
- - discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 \
- - control-plane
コマンドを実行して、初期マスターによって生成されたコントロールプレーンノードをクラスターに追加します
kubeadm join 172.27.34.130:6443--token qbwt6v.rr4hsh73gv8vrcij \
- - discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966 \
- - control-plane
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コマンドを実行することです。
[ root@master01 ~]# kubectl get nodes
[ root@master01 ~]# kubectl get po -o wide -n kube-system
すべてのコントロールプレーンノードは準備完了状態にあり、すべてのシステムコンポーネントは正常です。
kubeadm join 172.27.34.130:6443--token qbwt6v.rr4hsh73gv8vrcij \
- - discovery-token-ca-cert-hash sha256:e306ffc7a126eb1f2c0cab297bbbed04f5bb464a04c05f1b0171192acbbae966
コマンドを実行して、初期マスターによって生成された作業ノードをクラスターに追加します
[ 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
[ 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
[ root@client ~]# yum clean all
[ root@client ~]# yum -y makecache
[ root@client ~]# yum install -y kubectl-1.16.4
インストールバージョンはクラスターバージョンと一致しています
[ root@client ~]# yum -y install bash-completion
[ root@client ~]# source /etc/profile.d/bash_completion.sh
[ 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
[ root@master01 ~]# echo "source <(kubectl completion bash)">>~/.bash_profile
[ root@master01 ~]# source .bash_profile
[ root@client ~]# kubectl get nodes
[ root@client ~]# kubectl get cs
[ root@client ~]# kubectl get po -o wide -n kube-system
このセクションの内容はクライアント側で完了します
[ root@client ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
接続がタイムアウトした場合は、さらに数回試すことができます。 Recommendationd.yamlがアップロードされており、記事の最後からダウンロードすることもできます。
[ root@client ~]# sed -i 's/kubernetesui/registry.cn-hangzhou.aliyuncs.com\/loong576/g' recommended.yaml
デフォルトのミラーウェアハウスネットワークにアクセスできないため、Aliミラーに変更されます
[ root@client ~]# sed -i '/targetPort: 8443/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' recommended.yaml
NodePortを構成し、https:// NodeIp:NodePortを介して外部からダッシュボードにアクセスします。この時点で、ポートは30001です。
[ 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
ダッシュボードにログインするためのスーパー管理者アカウントを作成します
[ root@client ~]# kubectl apply -f recommended.yaml
[ root@client ~]# kubectl get all -n kubernetes-dashboard
[ root@client ~]# kubectl describe secrets -n kubernetes-dashboard dashboard-admin
トークンは次のとおりです。
eyJhbGciOiJSUzI1NiIsImtpZCI6Ikd0NHZ5X3RHZW5pNDR6WEdldmlQUWlFM3IxbGM3aEIwWW1IRUdZU1ZKdWMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tNms1ZjYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZjk1NDE0ODEtMTUyZS00YWUxLTg2OGUtN2JmMWU5NTg3MzNjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.LAe7N8Q6XR3d0W8w-r3ylOKOQHyMg5UDfGOdUkko_tqzUKUtxWQHRBQkowGYg9wDn-nU9E-rkdV9coPnsnEGjRSekWLIDkSVBPcjvEd0CVRxLcRxP6AaysRescHz689rfoujyVhB4JUfw1RFp085g7yiLbaoLP6kWZjpxtUhFu-MKh1NOp7w4rT66oFKFR-_5UbU3FoetAFBmHuZ935i5afs8WbNzIkM6u9YDIztMY3RYLm9Zs4KxgpAmqUmBSlXFZNW2qg6hxBqDijW_1bc0V7qJNt_GXzPs2Jm1trZR6UU1C2NAJVmYBu9dcHYtTCgxxkWKwR0Qd2bApEUIJ5Wug
次のサイトにアクセスするには、Firefoxブラウザを使用してください: https:// VIP:30001
リスクを受け入れる
トークン経由でログイン
ダッシュボードは、クラスター管理、ワークロード、サービス検出、[負荷分散](https://cloud.tencent.com/product/clb?from=10680)、ストレージ、辞書構成、ログビューなどの機能を提供します。
このセクションの内容はクライアント側で完了します
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 |
[ root@master01 ~]# init 0
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 |
お問い合わせ:
[ 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>
コントロールプレーンノードがダウンすると、VIPがドリフトし、クラスターの機能は影響を受けません。
master01をシャットダウンしながらmaster02をシャットダウンして、クラスターが引き続き外部で正常に機能できるかどうかをテストします。
[ root@master02 ~]# init 0
[ root@master03 ~]# ip a|grep 130
inet 172.27.34.130/32 scope global ens160
vipは唯一の制御面にドリフトします:master03
[ 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