zoukankan      html  css  js  c++  java
  • K8s主从节点的搭建

        Long time no see,很久没有写文章了,之前搞k8s一直想写的,就一直拖,所以今天来更新一下K8s主从节点的搭建。方便之后忘记了,记忆力真的不太好了。哈哈。

    当然安装k8s的方式有很多,我选择的是 Kubeadm ,之前用过其他方式安装过老版本的k8s,感觉不方便就不写出来了。

    硬件准备: 

    • 两台大于2g内存的服务器或虚拟机。

    首先我们准备两台虚拟机,内存需要大于2g,不然会安装失败的。

    准备好后就可以开始我们的安装工作了。

    第一步:

    我们需要关闭防火墙,SeLinux,以及swap:

    • 关闭防火墙是为了暴露K8s需要用到的端口
    • SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。所以避免k8s进程受到管制导致未知的问题所以关闭它。
    • swap,指的是一个交换分区或文件。关闭swap主要是为了性能考虑。

    关闭防火墙:

    systemctl stop firewalld  停止防火墙
    systemctl disable firewalld 开机不启动防火墙
    systemctl status firewalld 查看防火墙状态是否关闭

    关闭SELinux:

    setenforce 0 临时禁用

    永久禁用:
    vi /etc/selinux/config    
    SELINUX=disabled

    关闭swap:

    swapoff -a  临时关闭

    第二步:

    修改k8s.conf文件:

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

    第三步:

    安装docker:

    1、假如之前有安装过docker可以先卸载掉之前的docker以及依赖:

    sudo yum remove docker 
                      docker-client 
                      docker-client-latest 
                      docker-common 
                      docker-latest 
                      docker-latest-logrotate 
                      docker-logrotate 
                      docker-selinux 
                      docker-engine-selinux 
                      docker-engine

    2、安装必须的包。yum-utils提供了yum-config-manager实用程序,并且device-mapper-persistent-datalvm2需要devicemapper存储驱动程序:

    sudo yum install -y yum-utils 
      device-mapper-persistent-data 
      lvm2

    3、使用以下命令设置稳定存储库。 您始终需要稳定的存储库,即使您也想从边缘或测试存储库安装构建:

    sudo yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo

    4、查看docker版本列表确定你需要安装的是什么版本:

    yum list docker-ce --showduplicates | sort -r

    5、选择你需要的docker版本,一般选择稳定的版本:

    sudo yum install docker-ce-18.06.3.ce

    6:、安装成功后,开启docker:

    systemctl start docker  开启docker
    systemctl status docker 查看docker版本

    然后docker安装就成功了。

    第四步:

    可以开始k8s的安装了。这里可以先修改一下主机名 :

    hostnamectl set-hostname k8s-master   名字可以随意定,表示大致意思就可以了。

    首先修改安装源(下载会快很多)

    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

    然后开始安装:

    yum install -y kubelet-1.16.3-0 kubeadm-1.16.3-0 kubectl-1.16.3-0
    systemctl enable kubelet
    systemctl start kubelet 这里注意kubelet是起不来的,在master节点初始化之前是无法启动的

    接着初始化master节点(注意这里以后的步骤子节点不需安装):

    kubeadm init --kubernetes-version=1.16.3 
    --apiserver-advertise-address=192.168.31.150 
    --image-repository registry.aliyuncs.com/google_containers 
    --service-cidr=10.1.0.0/16 
    --pod-network-cidr=10.244.0.0/16
    
    解释: –kubernetes
    -version: 用于指定k8s版本; –apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。 –pod-network-cidr:用于指定Pod的网络范围; 10.244.0.0/16 –service-cidr:用于指定SVC的网络范围; –image-repository: 指定阿里云镜像仓库地址

    这里指定阿里云镜像仓库是因为国外的无法访问。这里还需要注意的是等待的时间比较久,大约在4、5分钟左右。之后看到:

    Your Kubernetes control-plane has initialized successfully!

    这样就成功了,继续下一步:

    配置kubectl工具,以供我们使用(后面子节点也需要用到):

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

    安装calico(Calico是一个纯三层的协议,为OpenStack虚机和Docker容器提供多主机间通信):

    mkdir k8s
    cd k8s
    wget https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
    
    ## 将192.168.0.0/16修改ip地址为10.244.0.0/16
    sed -i 's/192.168.0.0/10.244.0.0/g' calico.yaml

    kubectl apply -f calico.yaml

    这里如果wget下载不下来就用http代替https:

    http://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

    最后在设置kubelet开机启动就可以了,我们主节点就算安装成功了:

    systemctl enable kubelet

    第五步:

    子节点初始化,可以先改个主机名:

    hostnamectl set-hostname k8s-node1   名字可以随意定,表示大致意思就可以了。

    然后和上面一样,需要关闭防火墙等,安装docker,安装k8s,直到初始化master上面的步骤,这个时候我们就可以把根节点加入到主节点中了。

    重点:首先我们要把master机器上的token获取下来:

    kubeadm token list

    然后找到证书:

    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex |sed 's/^.* //'

      然后就可以加入master了:

    kubeadm join 192.168.202.131:6443 --token f9vc9q.czjexxx 
        --discovery-token-ca-cert-hash sha256:9b48669c620fcxxxx2a0cfa842f8c3950690f43a5d552a7cefef37d1fa31

    刚刚获取的token放在--token之后,注意空格。获取的证书放sha256:之后就可以了。

    假如还是无法加入,那可能是token过期了,重新生成一个token就行了:

    kubeadm token create

    加入成功之后,我们设置开机启动:

    systemctl enable kubelet

    然后在主节点机器上获取nodes发现我们的子节点是not ready的情况,这个问题卡了有点久,我们查看一下主节点的pod情况:

    kubectl get pods -n kube-system

    发现calico-node其中一个pod没有跑起来:

     然后查看这个pod的描述:

    kubectl describe po calico-node-m6442

    发现事件中有报错,节点没有拉取下来这个镜像:

     然后我们在节点机器拉取下来就可以咯:

    docker pull calico/node:v3.10.3

    等几分钟就发现node状态是ready了。这个时候我们可以在子节点机器查看一下节点:

    kubectl get nodes

    此时又发现错误:The connection to the server localhost:8080 was refused - did you specify the right host or port?

    需要在节点机器/root下新建一个目录 .kube:

    mkdir /root/.kube
    cd /root/.kube

    然后新建一个文件config,将master节点中/root/.kube/config 文件下的内容复制到节点中config文件中。内容如下:

     然后重新执行一下:

    这里发现节点node1的角色是none,这个时候需要设置一下节点node1的角色: 

    kubectl label node k8s-node1 node-role.kubernetes.io/node=node

    然后节点的角色变成node了,那么主从节点的安装就大公告成了。

     借鉴博客:http://www.cnblogs.com/stulzq/p/7743073.html  , https://www.cnblogs.com/xiao987334176/p/11899321.html

    感谢上面的博主的文章。

    作者具有所有权,未经作者同意禁止转载。

  • 相关阅读:
    Leetcode 50.Pow(x,n) By Python
    Leetcode 347.前K个高频元素 By Python
    Leetcode 414.Fizz Buzz By Python
    Leetcode 237.删除链表中的节点 By Python
    Leetcode 20.有效的括号 By Python
    Leetcode 70.爬楼梯 By Python
    Leetcode 190.颠倒二进制位 By Python
    团体程序设计天梯赛 L1-034. 点赞
    Wannafly挑战赛9 C-列一列
    TZOJ Start
  • 原文地址:https://www.cnblogs.com/Ivan-Wu/p/12611300.html
Copyright © 2011-2022 走看看