Try   HackMD

RKE2 & rancher install - command

使用的 OS 為 Ubuntu 20.04 LTS

RKE2 中國官方文件

Server (Master) Node

依據 RKE2 官方 HA 文件 說明,含有 master 性質的主機應為奇數,即 1,3,5 等數量。

RKE2 預設安裝的 Node 為 master + worker (即此 Node 可作為 worker 部署服務),若要設定純 master 需要另外在設定檔中加入參數控制。

RKE2 server node (k8s master node) 設定檔可使用參數可參考 官方網站

download rke2 install file

#預設不給 type 就是 server 了,所以不用特地給 type
#curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="server" sh -

curl -sfL https://get.rke2.io --output install.sh
chmod +x install.sh

set config (first node)

sudo mkdir -p /etc/rancher/rke2/
cat <<EOF | sudo tee /etc/rancher/rke2/config.yaml
# 主機名稱
node-name:
  - "rke2-node-01"

# k8s 各主機溝通用的憑證簽章
tls-san:
- rke2-node-01              # node host
- rke2-node-01.mydomain.com # node host domain
- rke2-cluster.mydomain.com # k8s cluster api server domain
- 1.1.1.1                   # k8s cluster api server domain 的 vip,看參考資料多半都有設定

#可以自己指定要用的 token,之後要加入此叢集的主機的 RKE2 設定檔中的 token 都要使用此 token
#token: my-shared-secret

#如果要做純 k8s master 的話可已加入以下設定,RKE2 預設是混和 NODE
#node-taint:
#  - "CriticalAddinsonly=true:NoExecute"

#非必要不需要處理這一塊
#如果沒有要使用 RKE2 內建的 containerd,或是要使用 CRI-O 來作為 k8s CRI 的話,可以這樣設定
#外部的 containerd 設定請參考下一節
# REF: https://gist.github.com/bgulla/3b725f0eea54fdd49f4d7066e16b1d89
# REF: https://github.com/rancher/rke2/issues/3219
#kubelet-arg:
#- "cgroup-driver=systemd"
#container-runtime-endpoint: unix:///run/containerd/containerd.sock

#以下參數所有 master node 都要相同

disable: rke2-ingress-nginx

cni:
- cilium
EOF

external containerd

參考:https://gist.github.com/bgulla/3b725f0eea54fdd49f4d7066e16b1d89

一般來說,不用特別做這件事情!使用 RKE2 自己包好的內容就夠了

如果要使用 OS 原本就裝好的 containerd ,而不是使用 RKE2 自己套件中的 containerd,需要對原本的 containerd 設定檔進行調整。

設定檔位置 /etc/containerd/containerd.toml

找到 cni 設定的位置

如果是使用 containerd 原始預設的設定檔案的話需要針對 cni 進行調整;即有使用 sudo containerd config default | tee /etc/containerd/config.toml 命令去導出預設設定。

原始區段設定

[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
  //......
    [plugins."io.containerd.grpc.v1.cri".cni]
      bin_dir = "/opt/cni/bin"
      conf_dir = "/etc/cni/net.d"

修改為

[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
  //......
    [plugins."io.containerd.grpc.v1.cri".cni]
      bin_dir = "/var/lib/rancher/rke2/bin"
      conf_dir = "/var/lib/rancher/rke2/agent/etc/cni/net.d"

也可以使用 sed 語法直接改

sudo sed -i 's|bin_dir = "/opt/cni/bin"|bin_dir = "/var/lib/rancher/rke2/bin"|g' /etc/containerd/config.toml
sudo sed -i 's|conf_dir = "/etc/cni/net.d"|conf_dir = "/var/lib/rancher/rke2/agent/etc/cni/net.d"|g' /etc/containerd/config.toml

run install and start rke2 first master node

指定版本安裝

sudo INSTALL_RKE2_CHANNEL=v1.24.7+rke2r1 ./install.sh

export PATH=$PATH:/opt/rke2/bin
sudo systemctl enable rke2-server
sudo systemctl start rke2-server
#這邊會要等一下

執行 systemctl start rke2-server 之後會要稍微等一下,如果超過 10 分鐘還沒好的話,可以 Ctrl + c 跳出來,然後用 journalctl -u rke2-server -f 命令來看一下日誌是不是出了什麼問題

copy kube config (if need)

這邊視情況使用

mkdir .kube
sudo cp /etc/rancher/rke2/rke2.yaml .kube/config

#如果不是用 root 登入的話,需要另外給予權限
#sudo chown rancher .kube/config

sudo cp /var/lib/rancher/rke2/bin/kubectl /usr/local/bin/

get k8s token

in first master node!!

sudo cat /var/lib/rancher/rke2/server/token

set other server (master) node config

sudo mkdir -p /etc/rancher/rke2/
cat <<EOF | sudo tee /etc/rancher/rke2/config.yaml
#如果第一台有指定 token,則這邊使用該 token,不然通常都是輸入用命令查出來的 token
token: my-shared-secret

#這邊 server 有人用第一台主機的 domain,有人用叢集 domain,只要能連上主要的 master 主機並使用 9345 port 即可
#port 的部分 RKE2 預設使用 9345,但是仍有開通 6443 來供一般使用
server: https://rke2-node-01:9345

node-name:
  - "rancher-02"

# tls-san 除了 node 自己的 host / host domain 之外,盡量跟第一台相同
tls-san:
- rke2-node-02              # node host
- rke2-node-02.mydomain.com # node host domain
- rke2-cluster.mydomain.com # k8s cluster api server domain
- 1.1.1.1                   # k8s cluster api server domain 的 vip,看參考資料多半都有設定

#如果要做純 k8s master 的話可已加入以下設定,RKE2 預設是混和 NODE
#node-taint:
#  - "CriticalAddinsonly=true:NoExecute"

#非必要不需要處理這一塊
#如果沒有要使用 RKE2 內建的 containerd,或是要使用 CRI-O 來作為 k8s CRI 的話,可以這樣設定
#外部的 containerd 設定請參考下一節
# REF: https://gist.github.com/bgulla/3b725f0eea54fdd49f4d7066e16b1d89
# REF: https://github.com/rancher/rke2/issues/3219
#kubelet-arg:
#- "cgroup-driver=systemd"
#container-runtime-endpoint: unix:///run/containerd/containerd.sock

# 以下設定都盡量跟第一台 master node 相同
disable: rke2-ingress-nginx

cni:
- cilium
EOF

Agent (Worker) Node

RKE2 agent node (k8s worker node) 設定檔可使用參數可參考 官方網站

download rke2 install file

agent (worker) 在下載安裝擋時,要另外下參數

sudo curl -sfL https://get.rke2.io --output install.sh
sudo chmod +x install.sh

get k8s token

in master node!!

sudo cat /var/lib/rancher/rke2/server/token

set node config

port 9345 是 RKE2 使用的管理 port

sudo mkdir -p /etc/rancher/rke2/
cat <<EOF | sudo tee /etc/rancher/rke2/config.yaml
server: https://<server>:9345 #可用任一 master node 主機網址 + port 9345
token: <token from server node>
node-name:
  - "rke2-node-worker-01"
EOF

start agent

sudo INSTALL_RKE2_TYPE="agent" ./install.sh
#似乎會自己去抓 server 的版本;如果設定檔正確的話
#sudo INSTALL_RKE2_TYPE="agent" INSTALL_RKE2_CHANNEL=v1.24.7+rke2r1 ./install.sh
sudo systemctl enable rke2-agent.service
sudo systemctl start rke2-agent.service

windows agent node setting

目前為實驗階段,暫不考慮使用,而且有限定 CNI

uninstall

ubuntu
直接執行 /usr/local/bin/rke2-uninstall.sh 就好,輕鬆愜意,會把所有自訂設定等資料全部清空,所以設定檔記得留備份

centos
直接執行 /usr/bin/rke2-uninstall.sh 就好,輕鬆愜意,會把所有自訂設定等資料全部清空,所以設定檔記得留備份

Rancher install

install helm

wget https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz
tar zxvf helm-v3.8.2-linux-amd64.tar.gz
sudo cp linux-amd64/helm /usr/local/bin/

install rancher / cert-manager

rancher latest version doc

rancher 官方有說明目前最新版本對於 cert-manager 的版本測試狀況,可依據自己的需求進行相關版本調整

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
kubectl create namespace cattle-system
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.7.1

helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=rancher.myserver.vm --version 2.6.9
#helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=app.192.168.74.133.nip.io --version 2.6.9
#helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=rancher.myserver.vm --version 2.6.7

istio ingress

由於前面的 RKE2 設定檔已關閉 nginx-ingress controller 的安裝,所以需要另外安裝 service mesh 相關服務或是自己管理 nginx / service node port。

使用 istio 作為 ingress 的話,可以參考我另外一篇針對 istio ingress 寫的筆記 : rancher istio ingress config

該筆記是我先前安裝 rancher 時,依據此篇安裝筆記後所延續的 istio 安裝設定,但是在撰寫此段補充時我並未再次測試,若有錯誤還請告知。