• k8s部署02-----kubeadm部署k8s


    机器规划

    系统配置

    三台机器都执行

    1、关闭selinux及firewalld

    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    
    setenforce 0
    
    systemctl stop firewalld && systemctl disable firewalld
    

    2、内核参数调整

    cat <<EOF >  /etc/sysctl.d/k8s.conf
    
    net.bridge.bridge-nf-call-ip6tables = 1
    
    net.bridge.bridge-nf-call-iptables = 1
    
    EOF
    
     
    sysctl --system
    

    3、关闭swap

    swapoff -a
    
    为了防止开机自动挂载 swap 分区,可以注释 /etc/fstab 中相应的条目:
    
    sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
    

    注: k8s 版本1.8开始要求关闭系统的swap,否则启动不了kubelet;

    安装docker

    三台都执行

    docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE; 比如: 18.06 为18年6月份发布的版本;

    1、下载安装 docker-ce

    wget -c https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
    
    wget -c https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
    
    yum install -y docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
    

    注:本次安装的版本为 17.03 ; k8s-1.11.1 对应的最高版本docker是 17.03 ;

    2、启动 docker

    systemctl enable docker && systemctl start docker
    

    3、导入必要的镜像

    默认使用 kubeadm 初始化集群时需要从 k8s.gcr.io 地址上拉取相关镜像,如果可以@科@学@上@网的,这一步可以省略;

    master节点执行:

    images=(kube-apiserver-amd64.tar kube-controller-manager-amd64.tar kube-scheduler-amd64.tar kubernetes-dashboard-amd64.tar etcd-amd64.tar coredns.tar flannel.tar kube-proxy-amd64.tar pause.tar)
    
    for i in ${images[@]};do
    
        docker load < $i
    
    done
    

    node节点执行:

    images=(flannel.tar kube-proxy-amd64.tar pause.tar coredns.tar)
    
    for i in ${images[@]};do
    
        docker load < $i
    
    done
    

    镜像分享地址:

    链接: https://pan.baidu.com/s/1jtT0qHpcz1WjovIBP6JOwQ 密码:5xxn

    安装 kubeadm

    三台机器都执行

    1、添加 yum 源

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

    2、安装 kubeadm

    # 列出最新版本
    yum list kubeadm --showduplicates
    
    # 安装
    yum install kubeadm-1.11.1 kubectl-1.11.1  kubelet-1.11.1
    

    注:安装 kubeadm ,相关依赖会安装 kubectl、kubelet、kubernetes-cni ;(版本要一致)

    kubectl 是管理集群的工具,kubelet 是每个node节点都会运行的一个服务,用于管理节点的docker启动、网络组件等功能;

    配置启动 kubelet

    三台机器都执行

    确保kubelet和docker使用同一个cgroupdriver, 这里使用systemd;

    kubelet 额外参数配置:

    vi /etc/sysconfig/kubelet
    KUBELET_EXTRA_ARGS="--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"
    

    启动 kubelet :

    systemctl enable kubelet && systemctl start kubelet
    

    初始化k8s集群

    (master机器执行)

    初始化:

    kubeadm init --apiserver-advertise-address 0.0.0.0 --apiserver-bind-port=6443 --pod-network-cidr=10.244.0.0/16  --service-cidr=10.96.0.0/16 --kubernetes-version=v1.11.1
    

    参数说明:

    --pod-network-cidr:                     指定Pod网段,默认为10.244.0.0/16
    --service-cidr:                               指定服务网段,默认为10.96.0.0.12
    --kubernetes-version:                  指定kubernetes版本,不同时间安装的kubeadm版本不同,所支持部署的kubernetes版本也不同,如果不支持会有报错提示
    --apiserver-advertise-address:     指定apiserver监听地址,默认监听0.0.0.0
    --apiserver-bind-port:                  指定apiserver监听端口,默认6443
    --ignore-preflight-errors:             忽略指定错误信息,默认情况下如果swap打开会报错,如果关闭了Swap此项可以不指定
    

    初始化完成后会有以下提示:

    增加kubectl权限访问:

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

    配置 k8s 网络 – flannel

    Kubernetes支持Flannel、Calico、Weave network等多种cni网络Drivers;

    配置 flannel :

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

    如果有多张网卡,需要在kube-flannel.yml中使用–iface参数指定集群主机内网网卡的名称, 类似 :

    args:
    - --ip-masq
    - --kube-subnet-mgr
    - --iface=eth1
    

    其它节点添加到集群

    集群初始化完成后可以看到,最后有提示加入集群的命令,但token是有时间限制的,可能过一段时间就过期了,可以通过以下命令成生新的命令:

    kubeadm token create --print-join-command
    
    输出类似:
    kubeadm join 100.2.30.203:6443 --token o2h5dk.mtaagmhp2mvbwb75 --discovery-token-ca-cert-hash sha256:448f0f0dd0de4668b55adee70fe7d1c74fe99e285ed35130130347e1aae3489c
    

    在其他节点输入该命令加入集群。

    查看已有 token :

    kubeadm token list

    验证

    kubectl get pod --all-namespaces              #查看所有pods信息
    kubectl get ns                                          #查看所有名称空间
    kubectl get cs                                          #查看健康状况
    kubectl get nodes                                    #查看所有节点信息
    kubectl describe pod -n kube-system XXX   #查看某个容器的具体信息
    

                  

    问题处理

    1、pods状态kube-flannel报错

     

    经查看kube-flannel.yml内的镜像版本跟提前下载点额镜像版本不一致导致的,手动改一下。

    2、pods状态coredns报错

    查看具体报错内容kubectl describe pod -n kube-system XXXX

    node02和node03上没有这两个镜像,提前下载解压一下吧,毕竟是在国内环境。

  • 相关阅读:
    JavaScript——BOM和DOM
    css-2
    Css-1
    storage size of 'xxx' isn't known问题出现的可能原因之一
    解决VS2010中winsock.h与winsock2.h冲突(重复定义)——转载
    SQLite : 解决“找不到请求的 .Net Framework 数据提供程序。可能没有安装”的问题
    使用 VirtualBox 虚拟机在电脑上运行 Android 4.0 系统,让电脑瞬间变安卓平板
    C#连接ACCESS的一个问题
    对硅谷和硅谷科技公司的十四问,全程干货
    nginx源码学习资源
  • 原文地址:https://www.cnblogs.com/jinyuanliu/p/11317013.html
Copyright © 2020-2023  润新知