zoukankan      html  css  js  c++  java
  • 二、使用kubeadm部署k8s

    三、集群部署

    ip 系统环境 主机名
    192.168.130.11 CentOS 7.6 Kube-master
    192.168.130.12 CentOS 7.6 Kube-node1
    192.168.130.13 CentOS 7.6 Kube-node2

    3.1 部署前准备

    3.1.1 主机名解析

    vim /etc/hosts
    
    192.168.130.11 kube-master
    192.168.130.12 kube-node1
    192.168.130.13 kube-node2
    

    3.1.2 时间同步

    yum install chrony
    systemctl start chronyd
    systemctl enable chronyd
    

    3.1.3 禁用swap

    swapoff -a
    

    并且注释/etc/fstab所有与swap相关的行

    3.3.4 关闭防火墙

    setenforce 0
    sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
    
    systemctl stop firewalld
    systemctl disable firewalld
    

    3.3.5 加载ipvs内核模块

    安装 IPVS 模块

    yum -y install ipvsadm ipset sysstat conntrack libseccomp
    

    设置开机加载配置文件

    cat >>/etc/modules-load.d/ipvs.conf<<EOF
    ip_vs_dh
    ip_vs_ftp
    ip_vs
    ip_vs_lblc
    ip_vs_lblcr
    ip_vs_lc
    ip_vs_nq
    ip_vs_pe_sip
    ip_vs_rr
    ip_vs_sed
    ip_vs_sh
    ip_vs_wlc
    ip_vs_wrr
    nf_conntrack_ipv4
    EOF
    

    设置开机加载 IPVS 模块

    systemctl enable systemd-modules-load.service   # 设置开机加载内核模块
    lsmod | grep -e ip_vs -e nf_conntrack_ipv4      # 重启后检查 ipvs 模块是否加载
    

    3.3.6 下载 Docker 和 K8S

    设置docker源

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

    设置k8s源

    cat >>/etc/yum.repos.d/kuberetes.repo<<EOF
    [kuberneres]
    name=Kubernetes
    baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    gpgcheck=0
    gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
    enabled=1
    EOF
    

    安装 docker-ce 和 kubernetes

    yum install docker-ce kubelet kubectl kubeadm -y
    
    systemctl start docker
    systemctl enable docker
    systemctl enable kubelet
    

    3.3.7 设置内核及k8s参数

    设置内核参数

    cat >>/etc/sysctl.conf<<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    

    设置kubectl忽略swap,使用ipvs

    cat >/etc/sysconfig/kubelet<<EOF
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"
    KUBE_PROXY_MODE=ipvs
    EOF
    

    3.2 部署Master

    本小节的所有操作,只在Master上进行

    3.2.1 拉取镜像

    宿主机最好能访问国外资源,在kubeadm init 在初始化的时候会到谷歌的 docker hub 拉取镜像,如果宿主机测试无法访问 k8s.gcr.io

    如果条件不允许可以参考:https://blog.csdn.net/jinguangliu/article/details/82792617,解决镜像问题。

    • 提前拉取初始化需要的镜像
    kubeadm config images pull
    

    • 拉取其他源镜像
    docker pull mirrorgooglecontainers/kube-apiserver:v1.14.2
    docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2
    docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2
    docker pull mirrorgooglecontainers/kube-proxy:v1.14.2
    docker pull mirrorgooglecontainers/pause:3.1
    docker pull mirrorgooglecontainers/etcd:3.3.10
    docker pull coredns/coredns:1.3.1
    
    
    利用`kubeadm config images list` 查看需要的docker image name
    
    k8s.gcr.io/kube-apiserver:v1.14.2
    k8s.gcr.io/kube-controller-manager:v1.14.2
    k8s.gcr.io/kube-scheduler:v1.14.2
    k8s.gcr.io/kube-proxy:v1.14.2
    k8s.gcr.io/pause:3.1
    k8s.gcr.io/etcd:3.3.10
    k8s.gcr.io/coredns:1.3.1
    
    # 修改tag
    
    docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2
    docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2
    docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2
    docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2
    docker tag docker.io/mirrorgooglecontainers/etcd:3.3.10  k8s.gcr.io/etcd:3.3.10
    docker tag docker.io/mirrorgooglecontainers/pause:3.1  k8s.gcr.io/pause:3.1
    docker tag docker.io/coredns/coredns:1.3.1  k8s.gcr.io/coredns:1.3.1
    
    docker rmi `docker images |grep docker.io/ |awk '{print $1":"$2}'`
    

    3.2.2 初始化Master

    使用 kubeadm 初始化 k8s 集群

    kubeadm init 
        --apiserver-advertise-address=0.0.0.0 
        --apiserver-bind-port=6443 
        --kubernetes-version=v1.18.5 
        --pod-network-cidr=10.10.0.0/16 
        --service-cidr=172.31.0.0/16 
        --service-dns-domain=pansn.local 
        --image-repository=k8s.gcr.io 
        --ignore-preflight-errors=swap 
      --token-ttl=0
    

    下面是最后执行成功显示的结果,需要保存这个执行结果,以让 node 节点加入集群

    注意最后一行的kubeadm join命令,后面在加入node节点时要用

    • 如果初始化过程被中断可以使用下面命令来恢复
    kubeadm reset
    
    • 最好以普通用户的身份运行下面的命令
    # 在当前用户家目录下创建.kube目录并配置访问集群的config 文件
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

    3.2.3 部署 flannel 网络插件

    • 下载falannel.yml文件
    wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    • 修改配置
    [root@kube-master opt]# vim kube-flannel.yml
    

    改成之前初始化时pod-network-cidr选项对应的值

    • 部署 flannel 网络插件
    [root@kube-master opt]# kubectl apply -f kube-flannel.yml
    

    3.2.4 检查k8s集群状态

    • 查看 kube-system 命名空间中运行的 pods
    kubectl get pods -n kube-system
    

    • 查看 k8s 集群组件的状态
    kubectl get ComponentStatus
    

     kubectl get nodes
    

    3.2.5 配置命令补全

    yum install -y bash-completion
    source /usr/share/bash-completion/bash_completion
    source <(kubectl completion bash)
    echo "source <(kubectl completion bash)" >> ~/.bashrc
    

    3.3 部署node节点

    本小节的所有的操作,只在 Node 节点上进行

    3.3.1 加入集群

    加入集群,注意在命令尾部加上 –ignore-preflight-errors=Swap ,以忽略 k8s 对主机 swap 的检查(k8s为了性能所以要求进制 swap

     kubeadm join 192.168.130.11:6443  
           --ignore-preflight-errors=swap 
         --token 70hwi7.omp6t2nfwfsg4y87 
        --discovery-token-ca-cert-hash sha256:f4b7ea9af19c749e3e6447ceb8803c8c1d563fc3e2452e7d4422246ad4dfb0b4
    

    返回结果,表示加入集群成功

    This node has joined the cluster:
    * Certificate signing request was sent to apiserver and a response was received.
    * The Kubelet was informed of the new secure connection details.
    
    Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
    

    编写最后命令写成脚本以便后续使用

    3.3.2 查看进度

    • node查看镜像

    当 node 节点加入 K8S 集群中后,Master 会调度到 Node 节点上一些组件,用于处理集群事务,这些组件没有下载完成之前 Node 节点在集群中还是未就绪状态

    在 node 执行下面命令,可以查看镜像的下载进度,下面是最终结果显示

    最终显示结果

    [root@kube-node1 ~]# docker image ls
    REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
    k8s.gcr.io/kube-proxy    v1.18.5             a1daed4e2b60        11 days ago         117MB
    quay.io/coreos/flannel   v0.12.0-amd64       4e9f801d2217        3 months ago        52.8MB
    k8s.gcr.io/pause         3.2                 80d28bedfe5d        4 months ago        683kB
    

    可以在 Master 上使用下面命令来查看新加入的节点状态

    [root@kube-master ~]# kubectl get nodes 
    NAME          STATUS   ROLES    AGE     VERSION
    kube-master   Ready    master   82m     v1.18.5
    kube-node1    Ready    <none>   7m14s   v1.18.5
    kube-node2    Ready    <none>   4m17s   v1.18.5
    
    
    • node查看集群组件状态
    kubectl get pods -n kube-system -o wide
    

    问题汇总:

    K8s集群初始化成功后,kubectl get nodes 查看节点信息时报错

    解决方法:

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

    3.3.3 解决镜像下载慢问题

    node 节点需要翻墙下载镜像太慢,建议使用 docker 镜像的导入导出功能 先将master的三个镜像打包发送到node节点,load后再jion

    • 导出
    docker image save -o /tmp/kube-proxy.tar k8s.gcr.io/kube-proxy
    docker image save -o /tmp/flannel.tar quay.io/coreos/flannel
    docker image save -o /tmp/pause.tar k8s.gcr.io/pause
    
    • 导入
    docker image load -i /tmp/kube-proxy.tar
    docker image load -i /tmp/pause.tar
    docker image load -i /tmp/flannel.tar
    

    参考

  • 相关阅读:
    jmeter的断言
    Fiddler(五)设置显式IP地址
    学习pycharm----自动化接口
    fidder重复创建数据+模拟接口响应数据+fidder接口测试
    python网络/并发编程部分简单整理
    python面向对象部分简单整理
    python模块与包简单整理
    python函数部分整理
    Python基础部分整理
    Scheme Implementations对比
  • 原文地址:https://www.cnblogs.com/pansn/p/13260135.html
Copyright © 2011-2022 走看看