[포스트]는 Kubernetes v1.14.0 배포 고 가용성 클러스터 마스터 (사용 kubeadm 오프라인 설치)

는 Kubernetes v1.14.0 마스터 고 가용성 클러스터 구축 (사용 kubeadm, 오프라인 설치)

HTTPS는 : // www.jianshu.com/p/a55e7d95a875 것은 

HAproxy의 사용을 필요로 보인다 keepalived 

에 대해 배울 수있는 또 다른 하루.

 


hnbcao
단어의 0.0962019.04.09 19시 30분 14초 수는 1,284 1,583 읽기

클러스터 프로그램 :

  • 자료 : 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 
  • 을 참조하시기 바랍니다 자세한 내용은 구성이 필요 CNI 플러그를, 패킷을 전달할 때 구성 L2 다리가 iptables에 의해 필터링됩니다 규칙을 전달 네트워크 플러그인 요구 사항

    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
    
  • 최신 커널로 업그레이드 (커널 오프라인 설치 패키지는 선택 준비)

    커널을 업그레이드 centos7

    참조 기사

    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 다른 맥 주소, 제품 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를 수정하는 임금의 관심에서 다음 명령을 수행;

주요 스크립트는 세 단계를 수행합니다 :

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 그렇지 않으면 클러스터에서 사용하는 네트워크 카드의 기본 게이트웨이에 제 ​​1 스위치에 필요합니다. (응용 프로그램 가상 머신의 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 노드를 추가하여

  • 그리고 각 노드에 구성 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 } } } 

두 가지의 구성주의 {MASTER1 _ IP}{IP} MASTER2가 _,  {MASTER3 _ IP}{}는 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 권장 패브릭을 설치해야 현재 클러스터 설치는 성능이 다른 것보다 낫다.

추천

출처www.cnblogs.com/jinanxiaolaohu/p/12355895.html