美文网首页
kubeadm 在线搭建k8s环境

kubeadm 在线搭建k8s环境

作者: 把爱放下会走更远 | 来源:发表于2019-08-07 17:22 被阅读0次

    1.各相关组件及主机环境

    centos、docker-ce、kubernetes1.12

    集群主机环境

    主机ip 主机名 角色
    10.57.31.22 k8s-master master
    10.57.31.23 k8s-node-1 node1
    10.57.31.24 k8s-node-2 node2

    将上面的主机配置添加到master和node上的/etc/hosts中

    2.主机系统环境设置

    1. 关闭防火墙服务
    systemctl stop firewalld.service iptables.service
    systemctl disable firewalld.service
    systemctl disable iptables.service
    
    1. 关闭并禁用SELinux

    setenforce 0

    //彻底禁用SELinux
    sed -i 's@^(SELINUX=).*@\1disabled@' /etc/sysconfig/selinux

    1. 禁用swap设备(可选)
    swapoff -a
    

    而后编辑/etc/fstab配置文件,注释用户挂载swap设备的所有行

    3.docker安装

    master和node上都需要安装

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

    如果安装中出现Transaction check error:错误,说明之前安装过docker未清理干净,需要执行下 sudo yum erase docker-common-2:1.13.1-96.gitb2f74b2.el7.centos.x86_64(根据报错是什么版本后面就写什么 );安装下载不成功,执行yum clean all试试

    kubeadm构建集群的过程中需要到gcr.io获取docker镜像,所以需要配置能够访问的http代理,或者从自己的Registry仓库拉取镜像,代理的方法是在[service]配置端中添加类似如下格式的配置项:Environment="HTTP-PROXY=http://IP:PORT"或Environment="HTTPS-PROXY=https://IP:PORT,(后面我们会介绍另外一种拉取gcr.io镜像的方法)

    docker自1.13起自动设置iptables的FORWARD默认策略为DROP,这会影响k8s的报文转发,因此,需要早docker启动后,更改为ACCEPT;方式为修改/usr/lib/systemd/system/docker.service文件,在"ExecStat=/usr/bin/dockerd"一行之后新增一行如下内容:

    EexcStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

    温馨提示:docker的镜像下载慢,需要更改daemon.json,在/etc/docker/daemon.json文件(没有则创建),文件内容为
    {
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
    }
    后面的地址可以使用别的快的,国内的;这里是中国科技大学的镜像加速服务

    然后重启下docker

    systemctl daemon-reload
    systemctl start docker.service
    systemctl enable docker.service
    

    4.安装kubelet及kubeadm

    采用阿里云仓库中rpm方式安装;还有其他方式自行研究下

    4.1配置yum仓库

    编辑配置文件/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

    4.2然后执行命令安装程序包

    master上安装kubelet、kubeadm、kubectl
    node上安装kubelet、kubeadm

     yum install kubelet kubeadm kubectl
    

    4.3

    关闭下kubelet需要强制关闭swap的需求,编辑/etc/sysconfig/kubelet,设置参数:

    KUBELET_EXTRA_ARGS="--fail-swap-on=false"
    然后

    systemctl restart kubelet.service
    systemctl enable kubelet.service
    

    4.4提前下载下gcr.io的镜像

    先看下需要哪些镜像,kubeadm config images list


    image.png

    我们通过 docker.io/mirrorgooglecontainers 中转一下
    脚本如下:

    //下载镜像
    kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#docker.io/mirrorgooglecontainers#g' |sh -x
    //打tag
     docker images |grep mirrorgooglecontainers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#mirrorgooglecontainers#k8s.gcr.io#2' |sh -x
    //移除mirrorgooglecontainers的镜像
    docker images |grep mirrorgooglecontainers |awk '{print "docker rmi ", $1":"$2}' |sh -x
    //coredns需要单独下载
    docker pull coredns/coredns:1.3.1
    docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
    docker rmi coredns/coredns:1.3.1
    

    可惜的是最新版本的1.15.2在中转站里面没有,我只下载到了这些:


    image.png

    还剩下controller-manager和scheduler需要下载,采取另外一种方式手动下载这两个,参考我的另外一片文章https://www.jianshu.com/p/447130682e08
    (也可以使用其他能够下到镜像的方式)

    最后我们把镜像重新docker tag成kubeadm需要的镜像,最终结果


    image.png

    5.集群初始化(master)

    采用命令行方式
    说明:

    --kubernetes-version: 正在使用的k8s的版本号,可以看下相关docker镜像的版本
    --pod-network-cidr: Pod网络的地址范围;
    --service-cidr:的网路地址范围
    --apiserver-advertise-address: Apiserver对外服务的地址,一般为master的ip

    kubeadm init --kubernetes-version=v1.15.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=10.57.31.22 --ignore-preflight-errors=Swap
    

    输出结果末尾有类似:kubeadm join 10.57.31.22:6443 --token ecc3mr.wdbc1ptao2ep6h95
    --discovery-token-ca-cert-hash sha256:40045492e5e0c54ddb9b2645b989337bb29ea76e7025f38ef7465caa477dcd8e 这样的命令,记录下来用来后续添加node到集群中

    5.1设定kubectl的配置文件

    kubeadm会自动生成一个/etc/kubernetes/admin.conf;然后kubectl默认会使用$HOME/.kube/config作为凭据,所以我们执行

    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    

    查看下状态

    //获取组件状态
    kubectl get cs
    //获取节点状态,(not ready 因为还没有安装网络插件)
    kubectl get nodes
    

    6.部署网络插件Flannel

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

    完成之后稍微等一会再通过kubectl get nodes就能看到Ready的master节点了

    7.添加Node到集群中

    使用kubeadm init输出末尾的命令,加上个--ignore-preflight-errors=Swap;到Node节点上执行命令:

    kubeadm join 10.57.31.22:6443 --ignore-preflight-errors=Swap --token ecc3mr.wdbc1ptao2ep6h95  --discovery-token-ca-cert-hash sha256:40045492e5e0c54ddb9b2645b989337bb29ea76e7025f38ef7465caa477dcd8e
    

    相关文章

      网友评论

          本文标题:kubeadm 在线搭建k8s环境

          本文链接:https://www.haomeiwen.com/subject/xxbwdctx.html