美文网首页
k3s单机版安装部署 附一键安装脚本

k3s单机版安装部署 附一键安装脚本

作者: SRE运维博客 | 来源:发表于2021-11-10 11:18 被阅读0次

    作者:SRE运维博客

    博客地址: https://www.cnsre.cn/

    文章地址:https://www.cnsre.cn/posts/211109907029/

    相关话题:https://www.cnsre.cn/tags/k3s/


    双十一各大云厂商纷纷撒种子种韭菜(抢用户),良心云 也是一如既往的良心,新用户更是通过某宝 148 就可以买到三年 2C4G8M 的轻量应用服务器。于是我也出售薅了羊毛入手了一台。
    但是对于各种组件本身就对资源消耗比较大的 k8s 来说,跑起来还是有点费力的,于是我打算将这台实例部署一台轻量级的 Kubernetes: k3s

    k8s VS k3s

    k3s 是 Rancher 推出的轻量级 k8s。k3s 本身包含了 k8s 的源码,而二进制包却只有 60M 但是本质上和 k8s 没有区别。但为了降低资源占用,k3s 和 k8s 还是有一些区别的,主要是:

    • 使用了相比 Docker 更轻量的 containerd 作为容器运行时(Docker 并不是唯一的容器选择)。
    • 去掉了 k8s 的 Legacy, alpha, non-default features。
    • 用 sqlite3 作为默认的存储,而不是 etcd。
    • 其他的一些优化,最终 k3s 只是一个 binary 文件,非常易于部署。、

    所以 k3s 适用于边缘计算,IoT 等资源紧张的场景。同时 k3s 也是非常容易部署的,官网上提供了一键部署的脚本

    k3s的优点

    • k3s将安装Kubernetes所需的一切打包进仅有60MB大小的二进制文件中,并且完全实现了Kubernetes API。为了减少运行Kubernetes所需的内存,Rancher删除了很多不必要的驱动程序,并用附加组件对其进行替换。
    • k3s是一款完全通过CNCF认证的Kubernetes发行版,这意味着你可以编写YAML来对完整版的Kubernetes进行操作,并且它们也将适用于k3s集群。
    • 由于它只需要极低的资源就可以运行,因此它能够在任何512MB RAM以上的设备上运行集群,换言之,我们可以让pod在master和节点上运行。

    k3s的缺点

    • 首先,当前k3s的版本(k3s v0.8.1)仅能运行单个master,这意味着如果你的master宕机,那么你就无法管理你的集群,即便已有集群要继续运行。但是在k3s v0.10的版本中,多主模式已经是实验性功能,也许在下一个版本中能够GA。
    • 其次,在单个master的k3s中,默认的数据存储是SQLite,这对于小型数据库十分友好,但是如果遭受重击,那么SQLite将成为主要痛点。但是,Kubernetes控制平面中发生的更改更多是与频繁更新部署、调度Pod等有关,因此对于小型开发/测试集群而言,数据库不会造成太大负载。

    结论

    K8s和k3s各有优劣,使用场景也有所区别,因此不能一概而论。如果你要进行大型的集群部署,那么我建议你选择使用K8s;

    如果你像我一样只是为了开发或者测试,那么选择k3s则是性价比更高的选择。

    安装 k3s

    确保你是一台干净的 CentOS7 服务器。
    按照惯例先更新,更新前顺便把源换为国内的yum源。

    # 改国内yum源
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    # 更新
    yum update -y
    

    修改主机名

    hostnamectl  set-hostname  k3s-master
    

    修改完毕后,断开重连一下。
    {{< alert theme="warning" dir="ltr" >}}
    ⚠️ 注意
    K3s 默认将使用 containerd 作为容器环境,请在下边选择 使用Docker安装 或者使用Containerd安装
    {{< /alert >}}
    {{< tabs 使用docker安装 使用containerd安装>}}
    {{< tab >}}

    使用 docker 安装

    # 安装 docker-ce
    yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
    yum install -y yum-utils
    yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
    yum install -y docker-ce docker-ce-cli containerd.io
    # 解决内核检查问题 重启生效
    grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
    systemctl enable docker
    systemctl start docker
    # 修改 docker 源
    cat << EOF > /etc/docker/daemon.json
    {
        "registry-mirrors":["https://3laho3y3.mirror.aliyuncs.com"]
    }
    EOF
    systemctl daemon-reload
    systemctl restart docker
    # 安装 docker 结束
    # 关 firewalld 防火墙
    systemctl stop firewalld
    systemctl disable firewalld
    # 安装 k3s
    curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --docker
    

    {{< /tab >}}
    {{< tab >}}

    使用 containerd 安装

    curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
    

    {{< /tab >}}
    {{< /tabs >}}

    安装完检查

    安装完成后,可以执行以下命令进行主机检查。

    # 运行配置检查
    k3s check-config
    # 查看节点状态以及 k3s 版本
    [root@k3s-master ~]# kubectl get node
    NAME             STATUS   ROLES                  AGE   VERSION
    vm-16-8-centos   Ready    control-plane,master   52m   v1.21.5+k3s2
    # 查看所有 pod 信息
    [root@k3s-master ~]# kubectl get pods -A
    NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
    kube-system   local-path-provisioner-5ff76fc89d-bbps4   1/1     Running     0          52m
    kube-system   coredns-7448499f4d-42v9x                  1/1     Running     0          52m
    kube-system   metrics-server-86cbb8457f-xqlrg           1/1     Running     0          52m
    kube-system   helm-install-traefik-crd-9wk9v            0/1     Completed   0          52m
    kube-system   helm-install-traefik-d8llf                0/1     Completed   3          52m
    kube-system   svclb-traefik-jqxvf                       2/2     Running     0          49m
    kube-system   traefik-97b44b794-wv6zv                   1/1     Running     0          49m
    

    截止到这里 k3s 已经安装完毕。

    安装 nfs

    安装 nfs 服务

    yum -y install nfs-utils
    systemctl start nfs && systemctl enable nfs
    

    创建nfs目录

    mkdir -p /home/k8s/nfs
    

    修改权限

    chmod -R 755 /home/k8s/nfs
    

    编辑export文件

    cat >>/etc/exports << EOF
    /home/k8s/nfs *(rw,no_root_squash,sync)
    EOF
    

    配置生效

    exportfs -r
    

    启动rpcbind、nfs服务

    systemctl restart rpcbind && systemctl enable rpcbind
    systemctl restart nfs && systemctl enable nfs
    

    到这里 k3s 以及 nfs 已经安装完成,下面就可以去体验了。
    如果想以上都比较麻烦,你可以用下面的一键安装脚本来执行

    一键安装 k3s 脚本

    #!/bin/bash
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    export PATH
    LANG=en_US.UTF-8
    
    RD="\033[31m"      # 错误消息
    GR="\033[32m"      # 成功消息
    YL="\033[33m"      # 告警消息
    BL="\033[36m"      # 日志消息
    PL='\033[0m'
    
    clear
    echo -e "${YL}##################################################${PL}"
    echo -e "${YL}#${PL} ${GR}脚本名称${PL}: 一键安装 k3s 脚本                    ${YL}#${PL}"
    echo -e "${YL}#${PL} ${GR}作    者${PL}: sre运维博客                          ${YL}#${PL}"
    echo -e "${YL}#${PL} ${GR}网    址${PL}: https:www.cnsre.cn                   ${YL}#${PL}"
    echo -e "${YL}#${PL} ${GR}文章地址${PL}: https://cnsre.cn/posts/211109907029/ ${YL}#${PL}"
    echo -e "${YL}##################################################${PL}"
    sleep 0.5
    
    set -e
    echo  
    echo 
    echo
    echo -e "${RD}是否确定安装 dockerb版本的 k3s? ${PL}"
    read -r -p "确定请按 y 任意键则退出!请选择:[y/n]" input
        if [[ $input != "y" ]]; then
            exit 1
        else 
            echo -e "$GR正在开始安装 dockerb版本的 k3s$PL"
        fi
    
    if [ `command -v docker` ];then
        echo -e "${YL}docker 已经安装,正在添加docker加速源${PL}"
    else
        echo -e "${GR}install docker${PL}"
        curl https://download.daocloud.io/docker/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
        yum -y install https://download.daocloud.io/docker/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
        curl -fsSL https://get.daocloud.io/docker | bash -s docker --mirror Aliyun
    fi
    
    sudo mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["http://f1361db2.m.daocloud.io"]
    }
    EOF
    grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
    
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    sudo systemctl enable docker
    
    
    if [ `command -v k3s` ];then
        echo -e "${YL}k3s 已经安装${PL}"
        exit 1
    else
        export K3S_NODE_NAME=${HOSTNAME//_/-}
        export INSTALL_K3S_EXEC="--docker --kube-apiserver-arg service-node-port-range=1-65000 --no-deploy traefik --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666"
        curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
    fi
    
    echo -e "${GR}export K3S_TOKEN=$(cat /var/lib/rancher/k3s/server/node-token)${PL}"
    echo -e "${GR}export K3S_URL=https://$(ip addr | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -E -v "^127\.|^255\.|^0\." | head -n 1):6443${PL}"
    echo -e "${GR}安装结束,请重启服务器${PL}"
    read -r -p "确定请按 y 任意键则退出!请选择:[y/n]" input
        if [[ $input != "y" ]]; then
            reboot
        else 
            exit 1
        fi
    

    作者:SRE运维博客

    博客地址: https://www.cnsre.cn/

    文章地址:https://www.cnsre.cn/posts/211109907029/

    相关话题:https://www.cnsre.cn/tags/k3s/


    相关文章

      网友评论

          本文标题:k3s单机版安装部署 附一键安装脚本

          本文链接:https://www.haomeiwen.com/subject/awvbzltx.html