• K8S搭建教程及部署脚本


    部署环境:


    1:系统配置(ALL HOST)

      1.1:SELINUX配置

        首先获取selinux的状态

    [root@localhost ~]# sestatus

     

         可以看到当前的状态是启用的,此状态更改有两种方式:

      1:临时关闭

    [root@localhost ~]# setenforce 0  #临时关闭

      2:永久关闭(修改配置文件)

        selinux配置文件涉及到两个,如下

    /etc/selinux/config 
    /etc/sysconfig/selinux 

        用vi命令分别修改这两个配置文件的SELINUX参数为disabled

    SELINUX=disabled

        也可以使用sed命令替换

    sudo sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
    sudo sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux

        修改完成如下

    [root@localhost ~]# vi /etc/selinux/config 
    # This file controls the state of SELinux on the system.
    # SELINUX=disabled
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    SELINUX=disabled
    # SELINUXTYPE= can take one of three values:
    #     targeted - Targeted processes are protected,
    #     minimum - Modification of targeted policy. Only selected processes are protected. 
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted 

        配置文件修改之后需要重启系统才能生效,但是可以先使用相关指令临时关闭,无需浪费时间,至此,SELINUX配置完成

    1.2:防火墙配置

    [root@localhost ~]# systemctl disable firewalld #禁止防火墙开机自启
    [root@localhost ~]# systemctl stop firewalld #关闭防火墙

        关闭之后,查看服务状态

    [root@localhost ~]# systemctl status firewalld #查看防火墙当前运行状态

     

         可以看到当前状态为dead #不活跃的,所以防火墙配置完成

     

    1.3:关闭swap 

    sudo swapoff -a

     

         可以看到,当前的分区挂载是存在有swap的,关闭的方法很简单,在swap这一行前面加入一个  {#}    即可,或者执行下面的指令

    sudo sed -i '/swap/s/^(.*)$/#1/g' /etc/fstab #永久 

     

     

         至此,swap配置完成

    1.4:配置K8S虚拟网络路由转发

    sudo echo -e "net.bridge-nf-call-ip6tables = 1
    net.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1" > /etc/sysctl.conf

        上面的命令就是将下面三个参数写入sysctl.conf配置文件,修改之后执行生效指令

    sysctl -p

        结果如下,其中的报错信息暂时不管,至此,转发配置完成

     

     

     

    2:配置阿里源,docker源,kubelet源(ALL HOST)

            (众所周知,国内使用一些国外系统的时候总会遇到一些网络问题,故此我们在安装任何服务前先配置一下软件仓库服务器)

    1:备份源

    rm -rf /yum_bak&&mkdir -p /yum_bak
    mv /etc/yum.repos.d/* /yum_bak/&&ls

    2:添加阿里源,docker源,kubelet源

    sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #添加阿里源
    sudo
    curl -o /etc/yum.repos.d/Docker-ce.repo
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #添加docker-ce源
    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
    ##源配置完成
    setenforce 0
    #临时关闭selinux

    sudo yum clean all #清除缓存

    sudo yum makecache -y  #创建索引

    sudo yum repolist  #包统计

        结果如下:

     

         可以看到,源配置已经成功

    3:服务安装(all host)

    3.1:安装docker

    首先查看当前仓库已启用的docker-ce仓库有哪些

    yum repolist all | grep docker

     

    可以看到,当前启用的仓库为稳定版,其他类型均为禁用状态,下一步查看当前可安装的docker版本

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

     

     当前源可获取的最新版本为第一个,也就是

     

     

     所以,现在如果执行服务安装命令,则会安装此版本,现在我们先安装指定版本(低版本)

    sudo yum install -y docker-ce-18.06.3.ce-3.el7

    然后启动看看

    sudo systemctl start docker

     

     查看docke信息

    docker info

     

     现在我又想安装最新版了,那么也简单,执行安装/更新指令即可

    sudo yum update -y docker-ce

     

     然后再次查看docker信息

    sudo systemctl restart docker
    sudo docker info

     

     docker安装到此结束

     

    3.2:安装kubelet(k8s)

    首先查看可安装版本

    yum list kubelet --showduplicates|sort -r

     

     这次就直接安装最新版吧

    sudo yum install -y kubelet

     

     然后继续按照其他组件(可一起安装)

    sudo yum install -y  kubeadm kubectl

    至此,服务安装部分结束

    4:服务配置

    4.1:docker 配置(all host)

    docker一般情况下只需要配置一点即可(镜像地址),命令如下:

    sudo mkdir -p /etc/docker
    echo -e "{    "registry-mirrors": ["https://r61ch9pn.mirror.aliyuncs.com"] }" > /etc/docker/daemon.json
    cat /etc/docker/daemon.json

     

     

     配置之后重启docker服务,查看docker信息,查看镜像地址是否成功改变

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    sudo docker info

     

     

     查看镜像地址(docker info反馈的下面)

     

     

     至此,docker配置完成

     

    4.2:K8S配置(ALL Host)

    所有节点部分:

          首先为了区分开来,先对主机进行命名及主机解析

    4.2.1:主机名配置:

     

    hostnamectl set-hostname master  #其他主机分别把master换成自己的主机名即可
    su
    hostname

     

     

     

     4.2.2:主机解析(所有节点一致)

    先查看当前配置

    cat /etc/hosts

     

     

     当前配置则是默认设置,所以现在需要追加主机映射配置

    vi /etc/hosts

    追加以下参数

    10.5.1.10 master
    10.5.1.11 node1
    10.5.1.12 node2 etcd

    效果如下:

     

     

     然后将此文件分派给其他节点:

    scp /etc/hosts node1:/etc/
    scp /etc/hosts node2:/etc/

     

     

     

     

     

     至此,主机解析配置完成!

    4.3:初始化k8s(Master)

    获取k8s版本

    ver=`kubeadm version|awk '{print $5}'|sed "s/[^0-9|.]//g"|awk 'NR==1{print}'`

    获取MASTER主机IP

    ip=`cat /etc/hosts|grep master|awk '{print $1}'|awk 'NR==1{print}'`

    验证信息

    echo -e "k8s version is v${ver}
    master ip is ${ip}"

     

     

     出现以上信息之后就可以执行初始化操作了:初始化master节点

    kubeadm init --apiserver-advertise-address=${ip} 
        --image-repository registry.aliyuncs.com/google_containers 
        --kubernetes-version v${ver} 
        --service-cidr=10.1.0.0/16 
        --pod-network-cidr=10.244.0.0/16

    然后遇到问题

     

     

     首先解决第一个:防火墙配置

    sudo systemctl stop firewalld&&sudo systemctl disable firewalld

     

     

     然后到第二个:设置docker服务开机自启

    sudo systemctl enable docker

     

     

    第三个暂不解决,这个问题不影响主要功能

    第四个:设置k8s开机自启

    sudo systemctl enable docker kubelet

     

     

     第五个:关闭swap

    sudo swapoff -a #临时关闭
    sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab #永久

    现在继续初始化:

     

     

     此时可以看到显示镜像正在拉取中........

    然后初始化成功,提示有三个关键信息,前面两个直接在master执行

     

     

     按照提示执行相关指令:

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

    然后执行下一个指令

    kubectl apply -f https://xypj-1252147235.cos.ap-guangzhou.myqcloud.com/kube-flannel.yaml

      

     

     

     

    第三条执行分别在node节点执行,此指令涉及的uid属于随机性,如过期请在master节点执行下面的命令重新生成

    kubeadm token create --print-join-command

    至此,master节点初始化完成!

     

    5:Node节点加入并验证

     首先,在master节点执行注册命令创建,然后复制到node节点进行注册

     

     

     

     然后把这段复制下来(随机的,不要复制我的)

    kubeadm join 10.1.1.2:6443 --token 32sevm.0l5rmz0q8v8kgfzv     --discovery-token-ca-cert-hash sha256:25cd4612de2097d41e0bf49bd8f97ba45971d61b50fb4a768f28d49741d52e5b

    然后到node节点执行

     

     

     可以看到此时有一个错误,一个意外,但是不要慌,稳住!首先解决第一个意外

     

     

     可以看到,此时的驱动程序是cgroup,并不是system,那么就改一下!

    echo -e "{
    	"exec-opts": ["native.cgroupdriver=systemd"],
    	"registry-mirrors": ["http://hub-mirror.c.163.com"]
    }" > /etc/docker/daemon.json

    然后验证一下

     此时,文件已经修改完成,然后继续解决下一个错误

    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

     全部解决完成之后,只需要重新启动docker即可

     已经解决两个问题了,然后重新注册试试

     

     此时显示已经加入成功,然后去master节点查看

     

     可以看到,node节点已经加入了,但是状态属于未准备,并且rule(角色)为空!不要慌,稳住,下面先解决最简单的角色

    kubectl label nodes node node-role.kubernetes.io/node=

    //nodes接着的“node”属于节点主机名;

    //最后一个node属于角色属性(另外还可以设置的角色为master)

    验证一下!

     

     此时,角色已经改好了,现在看一下node节点到底咋了。

    在node节点查看容器运行情况

     

     可以看到,有一个容器是退出状态的,这时候可以判断很大程度上是这个容器导致的,那就看看这个容器到底咋了

     

     emmmm,居然看不到日志,然后我发现已经可以了

     莫名其妙,但是可以看的出的是,之前是使用tag进行运行容器的,现在是用镜像ID,既然可以了那就先不管了

     

    好啦!到此结束

  • 相关阅读:
    1.两数之和 力扣,水题
    525.连续数组 力扣 (前缀和)
    [LeetCode]56. Group Anagrams变位词分组
    界面布局注意(一)
    docker常用命令
    docker常用批量操作命令
    Golang package之math/rand
    (三)虚拟机与Linux新尝试——20155306白皎
    洛谷 P1383 codevs 3333 高级打字机
    BZOJ 1013 cogs 1845 [JSOI2008]球形空间产生器sphere
  • 原文地址:https://www.cnblogs.com/liuyi778/p/12109034.html
Copyright © 2020-2023  润新知