k8s集群部署

    科技2022-08-26  102

    一、虚拟机配置:

    1、创建三个虚拟机k8s-node1、k8s-node2、k8s-master(需要两个及以上处理器)。

    2、需要配置网卡,网卡1配置为NAT模式。

    NAT模式:相当于宿主机再构建一个局域网,虚拟机无法和本局域网中的其他真实主机进行通讯。只需要宿主机器能访问互联网,那么虚拟机就能上网,不需要再去配置IP地址,子网掩码,网关。虚拟机和主机能够互相ping通。

    3、网卡2配置为桥接模式(或者只有主机网络),为了方便和宿主机进行连接。桥接网络要保证ip地址和主机的ip地址网段一致,否则ping不通。

    桥接模式:桥接模式的虚拟机就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。但是需要我们手动去配置IP地址和网关,IP地址要与主机的无线网的IP段对应,子网掩码,网关,DNS都需要与宿主机保持一致。 4、设置宿主机为bios为非安全模式。

    二、部署K8S集群

    环境配置

    1.关闭swap(这个应该放到最后执行,先执行有可能会导致后续修改/etc/hosts失败)。

    #临时关闭(永久关闭之前先执行) swapoff -a #永久关闭 注释掉etc/fstab中有swap的一行,然后reboot重启即可

    2.关闭防火墙安全规则,并关闭防火墙。

    sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0 systemctl stop firewalld #取消开机启动 systemctl disable firewalld

    3.修改hostname并将对应关系添加到hosts文件中。

    #修改hostname名称 vim /etc/hostname //将名称改成想要的值即可 #将节点ip以及对应的hostname添加到hosts文件中 192.168.1.104 k8s-master 192.168.2.105 k8s-node2 192.168.1.106 k8s-node1

    4.将桥接的ipv4流量传递到iptables的链。

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

    如果修改/etc/hosts/提示是只读文件,运行如下命令(swap关闭会有该提示):

    mount -o remount rw /

    安装docker、kubelet、kubeadm、kubectl

    1、安装docker

    #1、删除系统中存在的docker文件 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、将mapper-device lvm 等docker需要使用的组件进行安装 yum install -y yum-utils device-mapper-persistent-data lvm2 #3、配置阿里云源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #4、更新yum缓存 yum makecache fast #5、安装docker yum -y install docker-ce #6、启动服务并设置开机重启 systemctl start docker systemctl enable docker

    配置docker加速

    { "registry-mirrors": ["https://1xapgjb7.mirror.aliyuncs.com"] }

    2、为k8s添加阿里云yum源:

    $ cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

    3、安装kubelet、kubeadm、kubectl

    yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3

    4、开启kubelet并设置开机启动

    systemctl start kubelet systemctl enable kubelet

    5、初始化master节点(这一步和下一步都是针对master节点)

    #开始之前先执行一个脚本,用于观察初始化进度 ./master-images.sh #初始化master kubeadm init \ --apiserver-advertise-address=192.168.168.133 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.17.3 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=10.244.0.0/16

    上一步执行完会有提示指令创建一些目录以及在将从节点加入集群的命令,跟着操作就好。

    6、建立Flannel网络:

    kucectl apply -f kube-flannel.yml

    7、集群加入从节点(在node1和node2执行):

    kubeadm join 192.168.1.104:6443 --token x3z7ig.4ey4dp0s3c2yagqw --discovery-token-ca-cert-hash sha256:b3ecd425501c2d08e9fb6a50a6af44ddc0effd8b2974ac913d9a1e369f399484

    可能会遇到的问题:

    ​ 1、可能会有每次开启虚拟机ip地址变化的问题

    1.1修改配置文件: vim /etc/sysconfig/network-scripts/ifcfg-ens33 #不一定是ens33,视自己情况而定 1.2、更改如下,以后启动虚拟机都是指定的ip: #静态网络地址配置 NAME=ens33 #指定网络链接的名字为ens33,不固定 DEVICE=ens33 #指定文件管理的网卡名称 BOOTPROTO=static #dhcp动态获取,none和static都表示静态网络 ONBOOT=yes #是否开机启动 IPADDR=192.168.1.104 #设定ip为192.168.1.104 NETMASK=255.0.0.0|PREFIX=8 #子网掩码设置 GATEWAY=198.168.1.2 #网关,必须填,否则上不了网 DNS1=8.8.8.8 #同上,不一定是8.8.8.8

    ​ 2、从节点运行kubectl出现:The connection to the server localhost:8080 was refused - did you specify the right host or port?

    出现这个问题是因为kubectl需要使用kubernetes-admin来运行。解决方法如下:

    #在master节点将/etc/kubernetes/admin.conf文件拷贝到从节点对应的目录: scp /etc/kubernetes/admin.conf root@192.168.1.105:/etc/kubernetes/ #配置环境变量: echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile #使上述配置生效 source ~/.bash_profile #完成以后即可运行kubectl
    Processed: 0.012, SQL: 9