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集群拓扑部署
    默认拓扑部署

  • 相关阅读:
    LAB02:Selenium的安装与使用
    HW03:Exercise Section 2.3
    LAB01:安装 Junit(4.12), Hamcrest(1.3) 以及 Eclemma并完成一次三角形问题的测试
    HW02:根据程序回答问题
    HW01:程序中的错误
    Postman 接口测试
    Python3.7、Eclipse 4.5、 Java 8、 PyDev 5.2.0、 selenium-3.14.0环境搭建
    Java + selenium 实现web自动化简单示例
    java Junit自动化测试框架环境搭建
    java TestNg自动化测试框架环境搭建
  • 原文地址:https://www.cnblogs.com/zhangrui153169/p/14191290.html
Copyright © 2011-2022 走看看