k3s 部署

  1. K3S 部署

K3S 部署

首先在时间的发展过程中,k8s 经过了多个时间节点,经过了多次改进,比如现在 k8s 采用 container 而非 docker 作为镜像部署。所以需要最新的部署过程请参考官方的资料文档。

在实际操作测试过程中,也不一定部署 k8s 的节点,实际上 k8s 的节点非常重,可以采用 k3s 来代替,以 Ubuntu-22.04 的云服务器作为例子:

  1. 初始化 ubuntu 节点,更新系统

    sudo apt update && sudo apt upgrade -y
    sudo apt dist-upgrade -y
    
  2. 安装基础工具

    sudo apt install -y \
        curl \
        wget \
        git \
        vim \
        nano \
        htop \
        tmux \
        unzip \
        net-tools \
        iproute2 \
        dnsutils \
        lsof \
        rsync \
        software-properties-common \
        apt-transport-https \
        ca-certificates \
        gnupg \
        lsb-release
    
  3. 配置时区和时间同步

    # 设置时区(例如上海)
    sudo timedatectl set-timezone Asia/Shanghai
    
    # 安装并启用 NTP 时间同步
    sudo apt install -y chrony
    sudo systemctl enable --now chrony
    
  4. 创建普通用户

    # 替换 youruser 为你自己的用户名
    sudo adduser youruser
    sudo usermod -aG sudo youruser
    
  5. 清理

    sudo apt autoremove -y
    sudo apt clean
    
  6. 如果多节点是基于公网而非内网进行的通信,需要建立一个虚拟内网让所有节点进行联通,否则 k3s 集群默认还是使用内网节点进行的通信(如果是内网则不用)

    在 master 和 node 上都安装 Tailscale

    curl -fsSL https://tailscale.com/install.sh | sh
    
    # 登录(按提示操作),会给一个 url,在浏览器上登录账号之后授权这个设备,之后 Tailscale 才会给一个虚拟 ip
    sudo tailscale up
    
    # 获取 Tailscale 分配的 IP(如 100.x.y.z)
    tailscale ip
    
  7. 部署 k3s 集群

    如果是公网通信,那么强制使用 Tailscale IP 作为节点通信地址,使用 --flannel-backend=wireguard-native 可以让 Flannel 直接走 WireGuard(K3s 内置支持),性能更好且 NAT/防火墙友好

    在 master 上执行,设置 644 是让普通用户也可以使用 kubectl 命令,如果是生产环境不建议

    而且使用 https://rancher-mirror.rancher.cn/k3s/k3s-install.sh 国内镜像高速安装,官方地址应该是 https://get.k3s.io

    在 master 上启动(假设 Tailscale IP 是

    curl -#fL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
    INSTALL_K3S_MIRROR=cn \
    sh -s - \
        server \
        --node-ip=<master-ip> \
        --advertise-address=<master-ip> \
        --flannel-backend=wireguard-native \
        --write-kubeconfig-mode 644
    

    查看 master 上的 token

    sudo cat /var/lib/rancher/k3s/server/node-token
    

    在 nodes 上执行,假设 master 的 Tailscale IP 是

    curl -#fL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
    K3S_URL=https://<master-ip>:6443 \
    K3S_TOKEN=<token> \
    INSTALL_K3S_MIRROR=cn \
    INSTALL_K3S_EXEC="--node-ip=<node-ip> --flannel-iface=tailscale0" \
    sh -
    

    如果是内网通信,则不需要使用虚拟内网进行节点通信地址

    在 master 上执行

    curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
    INSTALL_K3S_MIRROR=cn \
    sh -s - \
        server \
        --flannel-backend=wireguard-native \
        --write-kubeconfig-mode 644        
    K3S_TLS_SAN="$(curl -s ifconfig.me)" \
    sh -s - --write-kubeconfig-mode 644
    

    查看 master 上的 token

    sudo cat /var/lib/rancher/k3s/server/node-token
    

    在 nodes 上执行,这里的 就是内网 ip 即可

    curl -#fL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | K3S_URL=https://<SERVER-IP>:6443 K3S_TOKEN=<TOKEN> INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--node-ip=100.122.211.71 --flannel-iface=tailscale0" sh -
    
  8. 给 master、nodes 节点全都给加下载镜像的代理,具体 docker 镜像网址参考 https://mirror.kentxxq.com/image

    # 创建目录
    sudo mkdir -p /etc/rancher/k3s
    
    # 写入镜像配置(使用中科大等国内源)
    sudo tee /etc/rancher/k3s/registries.yaml <<EOF
    mirrors:
        docker.io:
            endpoint:
            - "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com"
            - "https://docker.1ms.run"
            - "https://docker.kejilion.pro"
            - "https://docker.m.ixdev.cn"
            - "https://hub.mirrorify.net"
            - "https://d.yydy.link:2023"
            - "https://docker.etcd.fun"
            - "https://hub3.nat.tf"
            - "https://proxy.vvvv.ee"
            - "https://dockerproxy.net"
    
        gcr.io:
            endpoint:
            - "https://gcr.mirrors.ustc.edu.cn"
        k8s.gcr.io:
            endpoint:
            - "https://gcr.mirrors.ustc.edu.cn"
        ghcr.io:
            endpoint:
            - "https://ghcr.mirrors.ustc.edu.cn"
    EOF
    

    master 重启 k3s sudo systemctl restart k3s

    nodes 重启 agent sudo systemctl restart k3s-agent


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。