(kubeadm、オフラインインストーラを使用して)kubernetes v1.14.0マスターの高可用性クラスタの展開
HTTPS:// www.jianshu.com/p/a55e7d95a875は HAproxyの使用を必要とするようだとkeepalivedの について学ぶために別の日。
クラスタープログラム:
- リリース:CentOSの7
- ランタイムコンテナ
- カーネル:4.18.12-1.el7.elrepo.x86_64
- バージョン:Kubernetes:1.14.0
- ネットワークソリューション:キャラコ
- KUBE-プロキシモード:IPVS
- 可用性のマスタープラン:HAProxy keepalivedのLVS
- DNSプラグ:CoreDNS
- プラグメトリック:メトリックサーバ
- インタフェース:kubernetes、ダッシュボード
Kubernetesクラスタのセットアップ
ホスト名 | 役割 | IP |
---|---|---|
MASTER1 | MASTER1 | 192.168.56.103 |
MASTER2 | MASTER2 | 192.168.56.104 |
master3 | master3 | 192.168.56.105 |
ノード1 | ノード1 | 192.168.56.106 |
ノード2 | ノード2 | 192.168.56.107 |
ノード3 | ノード3 | 192.168.56.108 |
1、(対応するインストールパッケージをダウンロードするには、外部ネットワークにアクセスできるサーバーに基づく)オフラインインストールパッケージを準備します
# 设置yum缓存路径,cachedir 缓存路径 keepcache=1保持安装包在软件安装之后不删除
cat /etc/yum.conf
[main] cachedir=/home/yum keepcache=1 ... # 安装ifconfig yum install net-tools -y # 时间同步 yum install -y ntpdate # 安装docker(建议19.8.06) yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo yum makecache fast ## 列出Docker版本 yum list docker-ce --showduplicates | sort -r ## 安装指定版本 sudo yum install docker-ce-<VERSION_STRING> # 安装文件管理器,XShell可通过rz sz命令上传或者下载服务器文件 yum intall lrzsz -y # 安装keepalived、haproxy yum install -y socat keepalived ipvsadm haproxy # 安装kubernetes相关组件 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum install -y kubelet kubeadm kubectl ebtables # 其他软件安装 yum install wget ...
図2に示すように、ノード構成システム
-
閉じるSELinuxの、ファイアウォール
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
-
システム・スワップをシャットダウン(Kubernetes 1.8開始要求)
swapoff -a yes | cp /etc/fstab /etc/fstab_bak cat /etc/fstab_bak |grep -v swap > /etc/fstab
-
設定L2ブリッジを参照して下さいパケットを転送するとき、構成が詳細については、CNIプラグを必要とされるのiptables FORWARDルールによってフィルタリングされるネットワークプラグイン要件
echo """ vm.swappiness = 0 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 """ > /etc/sysctl.conf sysctl -p
ブリッジ-NF-コールip6tablesをがそのようなファイルやディレクトリはありません表示されますcentos7、それは単にのmodprobe br_netfilterを実行しています
-
時刻同期
ntpdate -u ntp.api.bz
-
最新のカーネルにアップグレード(カーネルオフラインインストールパッケージは、オプションの準備ができています)
grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg grubby --default-kernel grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
-
IPVSを開いて、システムを再起動し、カーネルのバージョンを確認する(カーネルをアップグレードしていない場合は、ip_vs_fo削除)
uname -a cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack" for kernel_module in \${ipvs_modules}; do /sbin/modinfo -F filename \${kernel_module} > /dev/null 2>&1 if [ $? -eq 0 ]; then /sbin/modprobe \${kernel_module} fi done EOF chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
sysctlを-pエラー実行のmodprobe br_netfilterを実行し、参照してくださいcentos7追加ブリッジ-NF-コールを-ip6tablesをはそのようなファイルやディレクトリを表示されません
-
すべてのマシンは、システム・パラメータを設定する必要があります/etc/sysctl.d/k8s.conf
# https://github.com/moby/moby/issues/31208 # ipvsadm -l --timout # 修复ipvs模式下长连接timeout问题 小于900即可 cat <<EOF > /etc/sysctl.d/k8s.conf net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 10 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv4.neigh.default.gc_stale_time = 120 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 net.ipv4.ip_forward = 1 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.netfilter.nf_conntrack_max = 2310720 fs.inotify.max_user_watches=89100 fs.may_detach_mounts = 1 fs.file-max = 52706963 fs.nr_open = 52706963 net.bridge.bridge-nf-call-arptables = 1 vm.swappiness = 0 vm.overcommit_memory=1 vm.panic_on_oom=0 EOF sysctl --system
-
セットのブーツ
# 启动docker sed -i "13i ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT" /usr/lib/systemd/system/docker.service systemctl daemon-reload systemctl enable docker systemctl start docker # 设置kubelet开机启动 systemctl enable kubelet systemctl enable keepalived systemctl enable haproxy
-
密なセットを無料ログイン
# 1、三次回车后,密钥生成完成 ssh-keygen # 2、拷贝密钥到其他节点 ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名字@192.168.x.xxx
**、Kubernetesは異なるMACアドレス、製品のUUID、ホスト名とクラスタ内のすべてのマシンが必要です。
3、keepalivedの+ haproxy構成
cd ~/
# 创建集群信息文件
echo """
CP0_IP=192.168.56.103
CP1_IP=192.168.56.104
CP2_IP=192.168.56.105
VIP=192.168.56.102
NET_IF=eth0
CIDR=10.244.0.0/16
""" > ./cluster-info bash -c "$(curl -fsSL https://raw.githubusercontent.com/hnbcao/kubeadm-ha-master/v1.14.0/keepalived-haproxy.sh)"
4、HAマスターを展開
HAマスター展開プロセスが自動化された、マスター-1、およびIPを変更するために注意を払うには、以下のコマンドを実行します。
3つの手順を実行するためのメインスクリプト:
1)、kubeletをリセットするために設けられています。
kubeadm reset -f
rm -rf /etc/kubernetes/pki/
2)ノード構成ファイルの準備とkubeletのMASTER1を初期化します
echo """
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.13.0
controlPlaneEndpoint: "${VIP}:8443"
maxPods: 100
networkPlugin: cni
imageRepository: registry.aliyuncs.com/google_containers
apiServer:
certSANs:
- ${CP0_IP}
- ${CP1_IP}
- ${CP2_IP}
- ${VIP}
networking:
# This CIDR is a Calico default. Substitute or remove for your CNI provider.
podSubnet: ${CIDR}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
""" > /etc/kubernetes/kubeadm-config.yaml
kubeadm init --config /etc/kubernetes/kubeadm-config.yaml
mkdir -p $HOME/.kube
cp -f /etc/kubernetes/admin.conf ${HOME}/.kube/config
- デフォルトゲートウェイの問題について、複数のネットワークカードがある場合は、あなたがそうでなければetcdない接続している他の問題が発生する可能性があり、クラスタ内で使用しているネットワークカードのデフォルトゲートウェイへの最初のスイッチにする必要があります。(アプリケーション仮想マシンIの使用、カードを各ノード路地を持っていない、現在のゲートウェイ情報を表示するためのルート、ルートデルデフォルトデフォルトゲートウェイを削除し、ルートがデフォルトenth0 enth0ネットワークカード名のデフォルトゲートウェイを設定追加します)
3)、該当する証明書MASTER2、master3をコピーします
for index in 1 2; do ip=${IPS[${index}]} ssh $ip "mkdir -p /etc/kubernetes/pki/etcd; mkdir -p ~/.kube/" scp /etc/kubernetes/pki/ca.crt $ip:/etc/kubernetes/pki/ca.crt scp /etc/kubernetes/pki/ca.key $ip:/etc/kubernetes/pki/ca.key scp /etc/kubernetes/pki/sa.key $ip:/etc/kubernetes/pki/sa.key scp /etc/kubernetes/pki/sa.pub $ip:/etc/kubernetes/pki/sa.pub scp /etc/kubernetes/pki/front-proxy-ca.crt $ip:/etc/kubernetes/pki/front-proxy-ca.crt scp /etc/kubernetes/pki/front-proxy-ca.key $ip:/etc/kubernetes/pki/front-proxy-ca.key scp /etc/kubernetes/pki/etcd/ca.crt $ip:/etc/kubernetes/pki/etcd/ca.crt scp /etc/kubernetes/pki/etcd/ca.key $ip:/etc/kubernetes/pki/etcd/ca.key scp /etc/kubernetes/admin.conf $ip:/etc/kubernetes/admin.conf scp /etc/kubernetes/admin.conf $ip:~/.kube/config ssh ${ip} "${JOIN_CMD} --experimental-control-plane" done
4)、MASTER2、master3追加されたノード
JOIN_CMD=`kubeadm token create --print-join-command`
ssh ${ip} "${JOIN_CMD} --experimental-control-plane"
完全なスクリプト:
# 部署HA master
bash -c "$(curl -fsSL https://raw.githubusercontent.com/hnbcao/kubeadm-ha-master/v1.14.0/kube-ha.sh)"
図5に示すように、ノードを追加することにより
-
そして、各ノードは、configure keepalivedのhaproxyする必要があります
#/etc/haproxy/haproxy.cfg global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults mode tcp log global option tcplog option dontlognull option redispatch retries 3 timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s maxconn 3000 listen stats mode http bind :10086 stats enable stats uri /admin?stats stats auth admin:admin stats admin if TRUE frontend k8s_https *:8443 mode tcp maxconn 2000 default_backend https_sri backend https_sri balance roundrobin server master1-api ${MASTER1_IP}:6443 check inter 10000 fall 2 rise 2 weight 1 server master2-api ${MASTER2_IP}:6443 check inter 10000 fall 2 rise 2 weight 1 server master3-api ${MASTER3_IP}:6443 check inter 10000 fall 2 rise 2 weight 1
#/etc/keepalived/keepalived.conf global_defs { router_id LVS_DEVEL } vrrp_script check_haproxy { script /etc/keepalived/check_haproxy.sh interval 3 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 80 priority 100 advert_int 1 authentication { auth_type PASS auth_pass just0kk } virtual_ipaddress { ${VIP}/24 } track_script { check_haproxy } } }
両者の構成のように注意_、{IP} MASTER2 {}は、VIP自体に対応するクラスタのIPアドレスを交換する必要
-
再起動はkeepalivedのとhaproxy
systemctl stop keepalived systemctl enable keepalived systemctl start keepalived systemctl stop haproxy systemctl enable haproxy systemctl start haproxy
-
コマンドは、参加するノードを取得します
#master节点执行该命令,再在节点执行获取到的命令 kubeadm token create --print-join-command
6、インストールの終了
また、プラグインCNI推奨キャラコをインストールする必要がある現在のクラスタインストールでは、パフォーマンスは他よりも優れています。