zoukankan      html  css  js  c++  java
  • 使用kubeadm部署k8s多master集群

     

    目录
    • 一、部署方案选择
    • 二、默认拓扑部署
      • 1、使用ansiable分发配置,如:设置主机名、/etc/hosts解析、repo文件、dockerhub证书、服务器配置、安装docker等,不详述了就。(每台服务器)
      • 2、安装docker(每台服务器)
      • 3、安装 kubeadm, kubelet 和 kubectl(每台服务器)
      • 4、配置高可用
      • 5、初始化第一个master0
      • 6、验证证书有效时间
      • 7、安装网络插件
      • 8、拷贝master证书到其他master节点
      • 9、加入集群

    一、部署方案选择

    使用kubeadm安装多master集群有两种部署方案:
    第一种使用kubeadm中的默认拓扑。使用kubeadm join --experimental-control-plane命令在master节点上自动创建本地etcd成员,加入到master集群。这种部署方式最为简单,缺点是有一定的耦合失败的风险。每个master节点运行kube-apiserver,kube-scheduler和kube-controller-manager的一个实例,每个master节点创建一个本地etcd成员,该etcd成员仅与本节点kube-apiserver通信,kube-controller-manager和kube-scheduler也一样。所以每掉一台服务器就会使etcd和apiserver的实例减少一台,必要时候需要按照集群的规模,扩大master实例的数量,减少风险。
    第二种是使用外部etcd集群拓扑,etcd节点与master在不同节点上运行。需要额外为每个master创建独立的init配置文件,并在配置文件中指定外部的etcd集群。每个master节点运行一个kube-apiserver,kube-scheduler和kube-controller-manager实例,每个master都可以和etcd集群通信。好处自然是低耦合,大大的降低了风险。但配置上稍有一些麻烦,并且需要的服务器要多一些。

    二、默认拓扑部署

    1、使用ansiable分发配置,如:设置主机名、/etc/hosts解析、repo文件、dockerhub证书、服务器配置、安装docker等,不详述了就。(每台服务器)

    设置主机名
    分发配置主机文件/etc/hosts
    分发repo文件
    kube.repo

    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
    

    docker.repo
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

    yum clean
    yum makecatch
    

    安装依赖
    yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
    关闭防火墙、swap,重置iptables
    关闭防火墙
    $ systemctl stop firewalld && systemctl disable firewalld
    重置iptables

    iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
    # 关闭swap
    swapoff -a
    sed -i '/swap/s/^(.*)$/#1/g' /etc/fstab
    # 关闭selinux
    setenforce 0
    # 关闭dnsmasq(否则可能导致docker容器无法解析域名)
    service dnsmasq stop && systemctl disable dnsmasq
    

    设置系统参数

    cat > /etc/sysctl.d/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    vm.swappiness=0
    vm.overcommit_memory=1
    vm.panic_on_oom=0
    fs.inotify.max_user_watches=89100
    EOF
    

    sysctl -p /etc/sysctl.d/kubernetes.conf

    #!/bin/bash
    # 开启forward
    # Docker从1.13版本开始调整了默认的防火墙规则
    # 禁用了iptables filter表中FOWARD链
    # 这样会引起Kubernetes集群中跨Node的Pod无法通信
     
    iptables -P FORWARD ACCEPT
     
    # 加载ipvs相关内核模块
    # 如果重新开机,需要重新加载
    modprobe ip_vs
    modprobe ip_vs_rr
    modprobe ip_vs_wrr
    modprobe ip_vs_sh
    modprobe nf_conntrack_ipv4
    lsmod | grep ip_vs
    

    2、安装docker(每台服务器)

    # 安装docker
    查看可以安装的版本
    yum list docker-ce --showduplicates|sort -r
    yum install -y docker-ce-18.06.1.ce-3
    
    cat > /etc/docker/daemon.json <<EOF
    {
        "graph": "/docker/data/path",
        "exec-opts": ["native.cgroupdriver=cgroupfs"],
        "registry-mirrors":["https://k9e55i4n.mirror.aliyuncs.com"]
    }
    EOF
    

    systemctl start docker && systemctl enable docker

    3、安装 kubeadm, kubelet 和 kubectl(每台服务器)

    # 找到安装的版本号
    yum list kubeadm --showduplicates | sort -r
    
    #安装指定版本
    yum install -y kubelet-1.14.5 kubeadm-1.14.5 kubectl-1.14.5
    
    #查看安装情况
    systemctl cat kubelet
    

    4、配置高可用

    参照LVS+keepalived部署高可用集群

    5、初始化第一个master0

    systemctl daemon-reload
    systemctl enable kubelet
    
    # 使用kubeadm-config.yaml配置k8s1.14.5集群
    
    # cat init.sh
    LOAD_BALANCER_DNS="192.168.2.22"     **\这个是上一步配置的VIP地址**
    LOAD_BALANCER_PORT="6443"
    # 生成kubeadm配置文件
    cat > kubeadm-master.config <<EOF
    apiVersion: kubeadm.k8s.io/v1beta1
    kind: ClusterConfiguration
    # kubernetes版本
    kubernetesVersion: v1.14.5
    # 使用国内阿里镜像
    imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
    
    apiServer:
      certSANs:
      - "$LOAD_BALANCER_DNS"
    controlPlaneEndpoint: "$LOAD_BALANCER_DNS:$LOAD_BALANCER_PORT"
    
    networking:
      podSubnet: 10.244.0.0/16
    EOF
    
    #初始化k8s集群
    kubeadm init --config=kubeadm-master.config
    

    6、验证证书有效时间

    cd /etc/kubernetes/pki
    for crt in $(find /etc/kubernetes/pki/ -name "*.crt"); do openssl x509 -in $crt -noout -dates; done 
    

    7、安装网络插件

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    8、拷贝master证书到其他master节点

    # cat scp.sh
    USER=root
    CONTROL_PLANE_IPS="192.168.3.43 192.168.3.44"
    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
        scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key
        scp /etc/kubernetes/admin.conf "${USER}"@$host:
        ssh ${USER}@${host} 'mkdir -p /etc/kubernetes/pki/etcd'
        ssh ${USER}@${host} 'mv /${USER}/ca.crt /etc/kubernetes/pki/'
        ssh ${USER}@${host} 'mv /${USER}/ca.key /etc/kubernetes/pki/'
        ssh ${USER}@${host} 'mv /${USER}/sa.pub /etc/kubernetes/pki/'
        ssh ${USER}@${host} 'mv /${USER}/sa.key /etc/kubernetes/pki/'
        ssh ${USER}@${host} 'mv /${USER}/front-proxy-ca.crt /etc/kubernetes/pki/'
        ssh ${USER}@${host} 'mv /${USER}/front-proxy-ca.key /etc/kubernetes/pki/'
        ssh ${USER}@${host} 'mv /${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt'
        ssh ${USER}@${host} 'mv /${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key'
        ssh ${USER}@${host} 'mv /${USER}/admin.conf /etc/kubernetes/admin.conf'
    done
    

    9、加入集群

    #master
    kubeadm join 192.168.2.22:6443 --token qlrq5y.1yhm3rz9r7ynfqf1 --discovery-token-ca-cert-hash sha256:62579157003c3537deb44b30f652c500e7fa6505b5ef6826d796ba1245283899 --experimental-control-plane
    #node
    kubeadm join 192.168.2.22:6443 --token qlrq5y.1yhm3rz9r7ynfqf1 --discovery-token-ca-cert-hash sha256:62579157003c3537deb44b30f652c500e7fa6505b5ef6826d796ba1245283899
    

    参考文档:
    外部etcd集群拓扑部署
    默认拓扑部署

  • 相关阅读:
    SAP MM 采购附加费计入物料成本之二
    SAP MM 采购附加费计入物料成本?
    SAP MM 作为采购附加费的运费为啥没能在收货的时候计入物料成本?
    SAP MM 外部采购流程里的Advanced Return Management
    SAP MM 外部采购流程里的如同鸡肋一样的Advanced Returns Management功能
    SAP MM Why is the freight not included in the material cost at the time of GR?
    SAP MM: Change of material moving average price after goods receipt and invoice verification posting for PO
    SAP 创建启用了ARM功能的采购订单,报错 Shipping processing is not selected to supplier 100057 in purchase org. 0002
    GIT·代码仓库默认分支更改
    .Net/C#·运行报错缺少XXX文件,但双击无法跳转缺少位置
  • 原文地址:https://www.cnblogs.com/zhangrui153169/p/14191290.html
Copyright © 2011-2022 走看看