zoukankan      html  css  js  c++  java
  • centos7使用kubeadm搭建k8s集群(包含解决公网部署的办法)

    1、前言

    本篇内容所参考资料

    本篇文章部署的k8s版本为1.18.0,1.20.x版本以上部署时会略有问题,建议新手不要更换版本安装
    关于公网部署的解决方案,在 3.1.1 小节

    2、所有机器都需要执行的命令(master 和 node 都要执行)

    2.1 关闭防火墙

    systemctl stop firewalld
    

    2.2 关闭 selinux

    setenforce 0 
    

    2.3 关闭 swap

    swapoff -a
    

    2.4 将桥接的IPV4流量传递到iptables 的链

    vi /etc/sysctl.d/k8s.conf
    

    粘贴以下内容

    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    

    2.5 安装docker (如果有docker则可以直接跳过)

    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
    yum -y install docker-ce
    systemctl start docker
    systemctl enable docker
    

    2.6 同步时间

    yum install ntpdate -y
    ntpdate cn.pool.ntp.org
    

    2.7 添加k8s的阿里yum源

    vi /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
    

    2.8 安装 kubeadm 、 kubectl 和 kubelet

    yum makecache fast
    
    yum install -y kubectl-1.18.0 kubeadm-1.18.0 kubelet-1.18.0 --nogpgcheck
    

    3、master机器上执行

    3.1 kubeadm执行初始化

    首先你要先用 ifconfig 命令查看一下自己这台master机器的ip地址是多少

    注意是看 eth0 这块网卡的信息
    然后将ip替换到下列命令当中(只改 ip ,其余的均不用变化)

    kubeadm init --apiserver-advertise-address=192.168.0.4 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
    

    这个过程会比较久,因为这一步需要下载好几个docker镜像,并且运行起来。
    待操作成功后,你能看到如下信息打印就表示成功(这条语句记得复制出来,后面要在node机器上执行他)

    3.1.1 公网部署的办法

    上面3.1执行 kubeadm init 的时候,使用的是局域网 ip。公网部署,就是要把这个ip写成你的公网ip,然后执行 kubeadm init --apiserver-advertise-address=119.29.178.140 ......
    等 kubeadm init 命令执行后出现以下内容时

    这时候去修改一下 etcd.yaml ,改一下监听地址配置
    打开一个新的linux远程窗口,修改一下 etcd.yaml 的配置

    vim /etc/kubernetes/manifests/etcd/yaml
    


    改完之后慢慢等 kubeadm init 命令执行完就好了

    因为etcd.yaml原配置监听的地址是公网地址,所以会导致etcd的容器运行失败,也就会导致kubelet运行错误。但是把etcd.yaml改完之后,这时k8s发现etcd容器启动失败问题后会自动重试,按照修改后的etcd.yaml重新创建新的etcd的容器去运行。

    概括而言,公网部署主要问题就是在于etcd的监听有问题,所以只是需要改一下etcd的配置就行,然后node机器就可以通过公网ip去join master机器。

    3.2 必须执行这几句,不然上面执行的无效

    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 安装flannel

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

    3.4 这时候查看 k8s 的节点信息。因为master节点其实自己也算一个node节点,所以这个时候就已经是能看集群的情况如何

    kubectl get node
    


    看见 Ready 就表示正常,但如果出现了 NoReady ,稍等几分钟,等他自己刷新状态

    4、node节点执行

    node节点加入集群的操作,就是把master节点执行 3.1 部分操作得到的结果,那句 kubeadm join 命令复制到 node 节点执行就可以了
    如果这个命令你忘了,或者是token已经过期,则可以重新再生成一个 (token有效期为24小时,过期就要重新生成)

    4.1 手动生成 kubeamd join 命令(以下操作均在master机器上执行)

    4.1.1 获取有效的 token

    首先可以先查看有没有没过期还能用的token

    kubeadm token list
    


    画红色框框的就是token
    列表里展示的就是还没过期的token,这种情况下,你就不用直接生成新token,可以继续使用
    但是如果没有可以用的token,则可以使用以下命令获取新的token

    kubeadm token create
    


    红色框里的就是新生成出来的 token

    4.1.2 获取ca证书sha256编码hash值
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
    


    红色框中的就是这个 hash 值

    4.1.3 最后把 4.1.1 和 4.1.2 的值拼接到下面这个 kubeadm join 命令中(关于ip填什么,局域ip部署的master就填master机器的局域网ip,公网ip部署的就填master机器的公网ip)

    kubeadm join 这里替换ip:6443 --token 这里替换token --discovery-token-ca-cert-hash sha256:这里替换hash值
    

    4.2 把master机器的 /etc/kubernetes/admin.conf 文件拷贝到 node 节点机器

    命令里替换一下你自己的node机器IP地址,然后在master机器上执行

    scp /etc/kubernetes/admin.conf root@你的node机器ip地址:/etc/kubernetes/
    

    复制文件过去后,接着在node机器执行以下命令

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

    这时候你就可以查看一下node节点是否已经加入到集群

    kubectl get node
    


    如果node节点在里面的状态是 NoReady ,这时候不要慌,等几分钟他刷新好状态后再看

  • 相关阅读:
    流程控制
    数据类型和运算符
    抽奖
    蓝桥杯 第五届
    python下编译py成pyc和pyo
    Django中提示TemplateDoesNotExist?
    Ubuntu16.04 apache2 wsgi 部署django
    Ubuntu 14.04下Django+MySQL安装部署全过程
    LVM原理及PV、VG、LV、PE、LE关系图
    SQLServer2008-镜像数据库实施手册(双机)SQL-Server2014同样适用
  • 原文地址:https://www.cnblogs.com/shapman/p/15095516.html
Copyright © 2011-2022 走看看