Kubernetes搭建单master集群

1、环境说明

Linux version 3.10.0-1160.el7.x86_64

mockbuild@x86-vm-26.build.eng.bos.redhat.com

gcc version 4.8.5 20150623

Red Hat 4.8.5-39

2、前期准备

**两台虚拟机:**分别是master节点(168.63.25.162)和node节点(168.63.25.163).

安装过程为了避免麻烦可以尽量使用root来执行命令。(使用命令sudo su).

相关文件准备

  • 将k8s-master-cert.sh、kubeadm-init.yaml、kube-flannel.yml上传至master节点上

  • 将images目录下的tar全部上传至master节点上(如果没有可以通过wget http://168.63.124.50:18088/kubeadm/flannel.tar 下载)

  • 将images目录下的flannel.tar、kube-proxy.tar上传所有node节点上

网络等系统参数准备

  • # 关闭防火墙
    systemctl stop firewalld && systemctl disable firewalld
    # 临时生效
    setenforce 0
    # 永久有效
    sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux
    swapoff -a
    sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
    
  • # 开启路由转发
    touch /etc/sysctl.d/k8s.conf
    cat > /etc/sysctl.d/k8s.conf <<EOF 
    vm.swappiness = 0
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    
    # 加载配置文件
    modprobe br_netfilter
    sysctl -p /etc/sysctl.d/k8s.conf
    ####加载IPVS模块
    cat > /etc/sysconfig/modules/ipvs.modules <<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    
    chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    

3、master节点安装docker(离线)

  • 获取kubeadm-rpm,解压,进入rpm目录,安装container-selinux

    [root@168-63-25-162 ~]# wget http://1.1.1.1:18088/kubeadm/kubeadm-rpm.tar.gz
    tar -xzvf kubeadm-rpm.tar.gz
    rpm -ivh container*.rpm
    

    在这里插入图片描述

  • 之后参考官网操作安装docker操作。

  • 配置docker,目前k8s推荐使用的docker文件驱动是systemd

    mkdir /etc/docker
    cat > /etc/docker/daemon.json <<EOF
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "storage-driver": "overlay2",
      "storage-opts": [
        "overlay2.override_kernel_check=true"
      ]
    }
    EOF
    
  • 启动docker服务

    systemctl daemon-reload
    systemctl start docker.service
    systemctl enable docker.service
    systemctl status docker.service
    
  • 检查docker信息

    [root@168-63-25-162 ~]# docker info
    Containers: 19
     Running: 16
     Paused: 0
     Stopped: 3
    Images: 8
    Server Version: 18.06.1-ce
    Storage Driver: overlay2
     Backing Filesystem: xfs
     Supports d_type: true
     Native Overlay Diff: true
    Logging Driver: json-file
    Cgroup Driver: systemd
    Plugins:
     Volume: local
     Network: bridge host macvlan null overlay
     Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
    Swarm: inactive
    Runtimes: runc
    Default Runtime: runc
    Init Binary: docker-init
    containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e
    runc version: 69663f0bd4b60df09991c08812a60108003fa340
    init version: fec3683
    Security Options:
     seccomp
      Profile: default
    Kernel Version: 3.10.0-1160.el7.x86_64
    Operating System: Red Hat Enterprise Linux Server 7.9 (Maipo)
    OSType: linux
    Architecture: x86_64
    CPUs: 8
    Total Memory: 15.51GiB
    Name: 168-63-25-162
    ID: B5MQ:VRT6:6ZAP:5YGM:BC7G:EYO2:RARR:3ZZD:PCRZ:Z2VZ:ZP7I:QSFH
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    Debug Mode (server): false
    Registry: https://index.docker.io/v1/
    Labels:
    Experimental: false
    Insecure Registries:
     127.0.0.0/8
    Live Restore Enabled: false
    

4、master节点安装kubeadm,kubelet, kubectl(离线)

  • /etc/yum.repos.d/创建kubeadm.repo

    touch kubeadm.repo
    # 写入
    cat > /etc/yum.repos.d/kubeadm.repo <<EOF
    [kubeadm]
    name=centos7
    baseurl=http://168.63.124.50:8080/rpm/
    enabled=1
    gpgcheck=0
    EOF
    
  • 安装三者

    yum install -y kubelet-1.16.3 kubeadm-1.16.3 kubectl-1.16.3
    systemctl enable kubelet
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ME37Bmo-1627554073520)(file:///C:\Users\018467\AppData\Local\Temp\ksohtml16944\wps5.jpg)]

  • 修改上传的kubeadm配置文件中**advertiseAddresscontrolPlaneEndpoint参数值**

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D7wSIuRi-1627554073522)(C:\Users\018467\AppData\Roaming\Typora\typora-user-images\image-20210729140304157.png)]

  • 导入镜像

    docker load -i kubeadm-master.tar
    

  • 初始化master节点(注意将上面的加入集群的命令保存下面,如果忘记保存上面的 token 和 sha256 值的话也不用担心,我们可以使用命令kubeadm token list来查找)

    kubeadm init --config=kubeadm-init.yaml
    

  • 按照上述提示配置环境变量

    mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
    
  • 查看集群状态

    [root@168-63-25-162 ~]# kubectl get csNAME                 AGEcontroller-manager   <unknown>scheduler            <unknown>etcd-0               <unknown>[root@168-63-25-162 ~]# kubectl get pod -n kube-systemNAME                                    READY   STATUS    RESTARTS   AGEcoredns-67c766df46-qtw2l                0/1     Pending   0          2m27scoredns-67c766df46-w5b54                0/1     Pending   0          2m27setcd-168-63-25-162                      1/1     Running   0          102skube-apiserver-168-63-25-162            1/1     Running   0          80skube-controller-manager-168-63-25-162   1/1     Running   0          92skube-proxy-ln5bn                        1/1     Running   0          2m27skube-scheduler-168-63-25-162            1/1     Running   0          108s
    

5、master节点安装集群网络(离线)

  • 根据初始化提示,安装flannel

    kubectl apply -f kube-flannel.yml 
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JqSkMd9Q-1627554073525)(C:\Users\018467\AppData\Roaming\Typora\typora-user-images\image-20210729142237254.png)]

  • 之后集群状态中有关coredns的状态将会改变,如下所示:

    kubectl get pod -n kube-system
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xrfBCQiu-1627554073526)(C:\Users\018467\AppData\Roaming\Typora\typora-user-images\image-20210729142440038.png)]

6、node节点安装docker(离线)

  • 同master节点安装步骤

7、 node节点导入基础镜像,安装kubelet,kubeadm,kubectl

  • 导入基础镜像kube-proxy

    docker load -i kube-proxy.tar
    
  • /etc/yum.repos.d/创建kubeadm.repo

    touch kubeadm.repo# 写入cat > /etc/yum.repos.d/kubeadm.repo <<EOF[kubeadm]name=centos7baseurl=http://168.63.124.50:8080/rpm/enabled=1gpgcheck=0EOF
    
  • 安装kubelet,kubeadm,kubectl

    yum install -y kubelet-1.16.3 kubeadm-1.16.3 kubectl-1.16.3systemctl enable kubelet
    
  • 根据master中kubeadm初始化提示,在master节点中,运行以下指令,将master节点中的证书和公钥复制到node节点中

    scp /etc/kubernetes/pki/ca.* root@168.63.25.163:/etc/kubernetes/pki/scp /etc/kubernetes/pki/sa.* root@168.63.25.163:/etc/kubernetes/pki/scp /etc/kubernetes/pki/front-proxy-ca.* root@168.63.25.163:/etc/kubernetes/pki/scp /etc/kubernetes/pki/etcd/ca.* root@168.63.25.163:/etc/kubernetes/pki/etcd/
    
  • 在node节点运行添加指令,加入集群

    kubeadm join 168.63.25.162:6443 --token abcdef.0123456789abcdef     --discovery-to1d1152e6ad1f3bf     --control-plane
    

8、检查node节点状态

  • kubectl get nodes
    在这里插入图片描述

9、菜坑大合集

  • kubeadm init时出现下面错误
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7F12wpnF-1627554073529)(file:///C:\Users\018467\AppData\Local\Temp\ksohtml16944\wps4.jpg)]

    原因是:交换分区没有关闭,可以使用永久关闭指令消除错误(如第2节所述)

  • kubeadm init时出现下面错误

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mnvVQuoY-1627554073530)(file:///C:\Users\018467\AppData\Local\Temp\ksohtml16944\wps6.jpg)]

    原因:1、由于docker和k8s都需要配置cgroup driver,在docker中使用如下指令就可以知道,但是k8s中推荐使用的是systemd,如果没有配置docker,就会有上述问题。

    docker info |grep CgroupCgroup Driver: cgroupfs
    

    可以通过如下方式找到配置文件所在位置,然后修改其中的10-kubeadm.conf中的cgroup项即可。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MZ6aJvsk-1627554073531)(file:///C:\Users\018467\AppData\Local\Temp\ksohtml16944\wps8.jpg)]

    2、同第一个坑。

  • Failed to start containerd: exec: “containerd”: executable file not found in $PATH

    解决方案:重装。。。。。

  • kubeadm reset之后,重新init提示端口被占用,kill掉就行 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pFPvy0uk-1627554073532)(file:///C:\Users\018467\AppData\Local\Temp\ksohtml16944\wps19.jpg)]

  • Unable to connect to the server: x509: certificate signed by unknown authority

    原因:下面命令创建一个目录,并复制几个配置文件,重新创建集群时,这个目录还是存在的,解决方法就是在执行这几个命令前执行此命令:rm -rf $HOME/.kube 删除这个目录。

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

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2qcoPogs-1627554073533)(file:///C:\Users\018467\AppData\Local\Temp\ksohtml16944\wps20.jpg)]

  • 节点状态是notReady。

    原因:可能的原因是网络问题,如下所示:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FxNsgy7y-1627554073533)(file:///C:\Users\018467\AppData\Local\Temp\ksohtml16944\wps24.jpg)]
    ​ 解决,现在是ready了
    ​	                                                   [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8K17FtpD-1627554073534)(file:///C:\Users\018467\AppData\Local\Temp\ksohtml16944\wps25.jpg)]

  • 证书没有发放
    ​                                           [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K5ki2hPQ-1627554073535)(file:///C:\Users\018467\AppData\Local\Temp\ksohtml16944\wps26.jpg)]

    解决方法:证书在这里,然后把证书复制过去即可。
    在这里插入图片描述

  • master主节点初始化报错 /proc/sys/net/ipv4/ip_forward contents are not set to 1

    处理方法:echo 1 > /proc/sys/net/ipv4/ip_forward

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值