使用的 OS 為 Ubuntu 20.04 LTS
依據 RKE2 官方 HA 文件 說明,含有 master 性質的主機應為奇數,即 1,3,5… 等數量。
RKE2 預設安裝的 Node 為 master + worker (即此 Node 可作為 worker 部署服務),若要設定純 master 需要另外在設定檔中加入參數控制。
RKE2 server node (k8s master node) 設定檔可使用參數可參考 官方網站。
#預設不給 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
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
參考: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
指定版本安裝
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
命令來看一下日誌是不是出了什麼問題
這邊視情況使用
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/
in first master node!!
sudo cat /var/lib/rancher/rke2/server/token
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
RKE2 agent node (k8s worker node) 設定檔可使用參數可參考 官方網站
agent (worker) 在下載安裝擋時,要另外下參數
sudo curl -sfL https://get.rke2.io --output install.sh
sudo chmod +x install.sh
in master node!!
sudo cat /var/lib/rancher/rke2/server/token
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
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
目前為實驗階段,暫不考慮使用,而且有限定 CNI
ubuntu
直接執行 /usr/local/bin/rke2-uninstall.sh
就好,輕鬆愜意,會把所有自訂設定等資料全部清空,所以設定檔記得留備份
centos
直接執行 /usr/bin/rke2-uninstall.sh
就好,輕鬆愜意,會把所有自訂設定等資料全部清空,所以設定檔記得留備份
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/
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
由於前面的 RKE2 設定檔已關閉 nginx-ingress controller 的安裝,所以需要另外安裝 service mesh 相關服務或是自己管理 nginx / service node port。
使用 istio 作為 ingress 的話,可以參考我另外一篇針對 istio ingress 寫的筆記 : rancher istio ingress config
該筆記是我先前安裝 rancher 時,依據此篇安裝筆記後所延續的 istio 安裝設定,但是在撰寫此段補充時我並未再次測試,若有錯誤還請告知。