• 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

    感谢上面的博主的文章。

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

  • 相关阅读:
    羊皮卷的故事第三章
    羊皮卷的故事第五章
    羊皮卷的故事第八章羊皮卷之一
    羊皮卷的故事第十一章羊皮卷之四
    羊皮卷的故事第四章
    羊皮卷的故事第十章羊皮卷之三
    羊皮卷的故事第九章羊皮卷之二
    羊皮卷的故事第十二章羊皮卷之五
    POJ3264 Balanced Lineup RMQ
    HDUPattern and Text 枚举
  • 原文地址:https://www.cnblogs.com/Ivan-Wu/p/12611300.html
Copyright © 2020-2023  润新知