K8S ? K3S !

K8S ? K3S !

K8S 那麼麻煩爲什麼不用 K3S?
本文適合 :

  • 想擺脫 K8S 複雜安裝又不得不用 K8S 的開發者
  • 服務器配置不夠跑 K8S 的開發者
  • 物聯網開發者
  • 需要最低學習成本使用容器編排的開發者
  • 初學 K8S 的新手

K3S

  • 更輕、更簡單的 K8S
  • 設計給物聯網設備和邊緣側計算使用
  • 邊緣側都能用服務器用了還不直接起飛?- 魯迅

踩坑開始

歪比歪比(奇怪的服務器)

服務器選擇我熟悉的 Centos

內核要求: 3.10.0 也就是阿里雲和騰訊雲的官方 Centos7.7 / Centos7.6

  1. Centos8 不用嘗試了 iptables 的版本太高
  2. 其他內核使用前用 k3s check-config 命令檢查
  3. 所有節點機器要在同一個內網環境下,這是K3S的一個bug,集羣會以 endpoint 進行連接,而云服務器的 endpoint 是內網ip(阿里雲經典網絡應該不是 暫未測試)
  4. 主機名帶下劃線在 k3s 異常
export K3S_NODE_NAME=${HOSTNAME//_/-}

將下劃線替換成中劃線提供給 k3s 安裝腳本

K3S內置 Containerd 但是!作爲一個服務器使用自然是要用常見的一點的容器 Docker

curl https://download.daocloud.io/docker/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
curl -fsSL https://get.daocloud.io/docker | bash -s docker --mirror Aliyun
  • Docker 安裝和配置加速器(國內源):
  • containerd.io 版本低:
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
  • 加速器配置:
sudo mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["http://f1361db2.m.daocloud.io"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
  • 開機啓動
sudo systemctl enable docker

歪比巴卜(K3S 的勝利)

K3S Server 安裝

就這麼寫!都是一點一點查到的經驗!

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 https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
  • --docker使用docker
  • --kube-apiserver-arg service-node-port-range=1-65000節點端口範圍1-65000
  • --no-deploy traefik不安裝traefik (後續用 rancher )
  • --write-kubeconfig ~/.kube/config --write-kubeconfig-mode 666設置kube配置文件到~/.kube/config(和 k8s 路徑一致後續會少出問題)

安裝 nfs

所有機器:

#所有 node 節點安裝 nfs 客戶端
yum -y install nfs-utils
systemctl start nfs && systemctl enable nfs

nfs主機:

#master節點安裝nfs
yum -y install nfs-utils

#創建nfs目錄
mkdir -p /nfs/data/

#修改權限
chmod -R 777 /nfs/data

#編輯export文件
tee /etc/exports <<-'EOF'
/nfs/data *(rw,no_root_squash,sync)
EOF

#配置生效
exportfs -r

#啓動rpcbind、nfs服務
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs

K3S Server 信息

agent 加入集羣需要使用

echo "export K3S_TOKEN=$(cat /var/lib/rancher/k3s/server/node-token)"
echo "export K3S_URL=https://$(ifconfig eth0 |grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"):6443"

K3S agent

同 server 安裝參數,需要先獲取到 server 的 K3S_TOKEN 和 K3S_URL

export K3S_TOKEN=XXXXXX
export K3S_URL=XXXXXX
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 https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

一大波殭屍即將來襲( rancher 安裝)

rancher 版本: Rancher2.3+

docker run -d -v /data/docker/rancher-server/var/lib/rancher/:/var/lib/rancher/ --restart=unless-stopped --name rancher-server -p 9443:443 rancher/rancher:stable
echo https://$(curl http://ip.cip.cc/):9443
  • 主機 9443 端口代理 rancher https 使用的 443 端口
  • rancher 界面直接導入 K3S 集羣, 把 K3S 集羣當成 K8S 使用

Docker + K3S + nfs 客戶端 一鍵安裝腳本

#!/bin/sh
set -e
# 在線安裝腳本

# k3s 不建議安裝swap 系統內存小的時候沒有swap會卡死
if [ ! -f "/var/swap" ];then
    echo "create swap"
    dd if=/dev/zero of=/var/swap bs=1024 count=8192000
    mkswap /var/swap
    mkswap -f /var/swap
    swapon /var/swap
    echo  "/var/swap swap swap defaults 0 0" >>  /etc/fstab
fi

# 判斷是否安裝 docker
if [ `command -v docker` ];then
    echo 'docker has installed'
else
    echo 'install docker'
    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
    # centos7 的內核經過 k3s 檢查都有這個問題
    grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
fi
# 添加加速源
sudo mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["http://f1361db2.m.daocloud.io"]
}
EOF
# 啓動
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

# 判斷是否安裝k3s
if [ `command -v k3s` ];then
    echo 'k3s has installed'
else
    # 本地安裝k3s其他參數通過外部傳入
    # 下劃線節點名不被支持
    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 https://docs.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
fi

#所有node節點安裝nfs客戶端
yum -y install nfs-utils
systemctl start nfs && systemctl enable nfs
echo 'finish'
echo 'need reboot'
echo "export K3S_TOKEN=$(cat /var/lib/rancher/k3s/server/node-token)"
echo "export K3S_URL=https://$(ifconfig eth0 |grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"):6443"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章