k8s-高可用性クラスターの実装(keepalived)

1.環境計画

おおよそのトポロジ:

etcdとmasterが同じマシン上にある

2つのシステムの初期化

https://www.cnblogs.com/huningfei/p/12697310.htmlを参照してください

3つはk8sとdockerをインストールします

https://www.cnblogs.com/huningfei/p/12697310.htmlを参照してください

4つはkeepalivedをインストールします

3つのマスターノードにインストールする

yum -y install keepalived

構成ファイル
master1

[root@k8s-master01 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id master01
}
vrrp_instance VI_1 {
    state MASTER #主
    interface ens33 #网卡名字
    virtual_router_id 50
    priority 100 #权重
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.222 #vip
    }
}



マスター2

! Configuration File for keepalived
global_defs {
   router_id master01
}
vrrp_instance VI_1 {
    state BACKUP 
    interface ens32
    virtual_router_id 50
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.222
    }
}



マスター3

! Configuration File for keepalived
global_defs {
   router_id master01
}
vrrp_instance VI_1 {
    state BACKUP 
    interface ens32
    virtual_router_id 50
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.222
    }
}

起動し、起動するようにブートを設定します

service keepalived start
 systemctl enable keepalived

4つはマスターノードを初期化します

どれでも実行する

kubeadm init --config=kubeadm-config.yaml
初始化配置文件如下:
```bash
[root@k8s-master01 load-k8s]# cat kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.15.1
apiServer:
  certSANs:    #填写所有kube-apiserver节点的hostname、IP、VIP(好像也可以不用写,只写vip就行)
  - k8s-master01
  - k8s-node1
  - k8s-node2
  - 192.168.1.210
  - 192.168.1.200
  - 192.168.1.211
  - 192.168.1.222
controlPlaneEndpoint: "192.168.1.222:6443" #vip
imageRepository: registry.aliyuncs.com/google_containers

networking:
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12

---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs


図に示されている情報は、正常な初期化を表しています。

次に、プロンプトに従ってコマンドを実行します。

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

5つのインストールネットワークプラグインフランネル

kubectl apply -f kube-flannel.yml

6つのコピーの証明書(主要な手順)

master01から残りの2つのマスターノードにコピーします。ここではスクリプトコピーを使用します

[root@k8s-master01 load-k8s]# cat cert-master.sh 
USER=root # customizable
CONTROL_PLANE_IPS="192.168.1.200 192.168.1.211"
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

然后去其他两个master节点把证书移动到/etc/kubernetes/pki目录下面,我这里用脚本移动
```bash
[root@k8s-node1 load-k8s]# cat mv-cert.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

残りの2つのマスターノードがクラスターに参加します

kubeadm join 192.168.1.222:6443 --token zi3lku.0jmskzstc49429cu \
    --discovery-token-ca-cert-hash sha256:75c2e15f51e23490a0b042d72d6ac84fc18ba63c230f27882728f8832711710b \
    --control-plane

ここでのIPはkeepalivedによって生成された仮想IPであることに注意してください

正常に参加した後、3つのマスターに移動して、ステータスが成功したかどうかを確認できます
。Kubectlget nodes
説明:ここでの私のホスト名は、便利なことに、実際には3つすべてがマスターノードであるため、マスターホスト名に変更されていません。

8つのノードノードがクラスターに参加します

kubeadm join 192.168.1.222:6443 --token zi3lku.0jmskzstc49429cu \
    --discovery-token-ca-cert-hash sha256:75c2e15f51e23490a0b042d72d6ac84fc18ba63c230f27882728f8832711710b

次のメッセージが表示され、成功を示します


ノードのステータスを確認します。node3は私のノードで、残りはマスターノードです。

9つのクラスターの高可用性テスト

1 Master01がシャットダウンし、vipがmaster02にフロートし、すべての機能が正常です
2 master02がシャットダウンし、vipフロートがmaster03にフロートし、ポッドは正常ですが、すべてのコマンドを使用できません。
マスターの1つが故障すると、クラスターは普通に働くことができます

おすすめ

転載: www.cnblogs.com/huningfei/p/12759833.html