# Kubeadm ❌ SingleNode ❌ CentOS --- ###### tags: `Kubeadm` `CentOS` `K8S` `Cluster` --- |環境|值|備註| |----|----|----| |Role|Master|control-plane| |FQDN|10.0.3.15| |IP|192.168.10.110| |OS|CentOS 7| |RAM|2G| |CPU|2| |硬碟|32G|建議是先開好開滿一開始只用8G Pull Image 一直失敗| --- > 2022/10/24 官方範例目前缺很多環境上的設定,建議照上方文章作即可。 實作後還是有要調整的 因為範例是 centos8 本機是 centos7 有額外套件要裝 (`epel-release` & `dnf`) ``` # 為了要可以 使用 dnf 要先額外裝 yum install epel-release yum install dnf # 確認安裝完畢後 # 再安裝 config-manager sudo yum install dnf-plugins-core ``` ---- [有教怎摸安裝 MasterNode & Worker Node](https://www.youtube.com/watch?v=DesrtN9UR1s) - 影片是參考文章實作 https://upcloud.com/resources/tutorials/install-kubernetes-cluster-centos-8 ``` ** 以下就可以開始一路照著文章開始裝 ** 會卡住地方 # 3. 要把 --nobest 拿掉 dnf install docker-ce -y ``` 7. Docker version (可以先執行 dnf upgrade -y 才會是新版的 containerd) ![](https://i.imgur.com/f8i2d1D.png) ``` # 執行會出現錯誤訊息 kubeadm config images pull kubeadm init # [ERROR CRI]: container runtime is not running: output: E0929 13:52:02.814493 22678 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService" time="2022-09-29T13:52:02+08:00" level=fatal msg="getting status of runtime: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService" , error: exit status 1 [preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...` # 解法 vi /etc/containerd/config.toml # 註解下方參數 # disabled_plugins = ["cri"] # 重啟 Containerd systemctl restart containerd ``` # Firewall 相關 ``` sudo systemctl start firewalld firewall-cmd --zone=public --permanent --add-port={6443,2379,2380,10250,10251,10252}/tcp # 注意!! 這邊要調整 ule family=ipv4 source address={就是主機的 ifconfig 的ip } firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address=192.168.10.110/32 accept' firewall-cmd --zone=public --permanent --add-rich-rule 'rule family=ipv4 source address=172.17.0.0/16 accept' #額外 (為了要讓 VM 可以再本機連線用) kubectl proxy --address='0.0.0.0' --disable-filter=true sudo firewall-cmd --zone=public --add-port=8001/tcp --permanent sudo firewall-cmd --reload ``` ``` # Create Cluster kubeadm init --pod-network-cidr 172.16.0.0/16 # 當作是讓 Kubectl 可以找到 Cluster export KUBECONFIG=/etc/kubernetes/admin.conf #成功執行會看到一整排 created (注意這是為了可以正常 Pull Image下來所以要執行) kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml # 刪除 kubectl delete node {node name} kubeadm reset ``` ![](https://i.imgur.com/nySbhqG.png) 到這一步算是已經完成 ``` # WorkerNode Join Token 資料被洗掉 沒關係可以再產生一次 kubeadm token create --print-join-command # 這個時候其實已經有 node跑出來了(但是狀態是 Not Ready 要等一下才會變Ready) kubectl get node ``` --- # Single Node > 如果環境想要試試看MaterNode + WorkerNode 在同一台主機上,調整如下調整如下 ``` # 看自己的環境 "汙點"(是否開放安裝 pod 在該Cluster上) kubectl get no -o yaml | grep taint -A 5 # 一開始會是 NoSchedule taints: - effect: NoSchedule key: node-role.kubernetes.io/control-plane status: addresses: - address: 192.168.10.110 # 調整 taint 開啟 Single-node 功能,注意下方的 Key要調整成自己的環境 kubectl taint nodes --all node-role.kubernetes.io/control-plane- # 執行後會發現 Taints : <none> kubectl describe node localhost.localdomain | grep Taints # 蠻奇怪的是我本機 ROLES 不是 Master 而是 control-plane kubectl get nodes NAME STATUS ROLES AGE VERSION localhost.localdomain Ready control-plane 62m v1.25.2 ``` --- # 錯誤訊息區 https://zhuanlan.zhihu.com/p/470612981 ``` # 現在只要 VM 重啟就會出現這個錯誤 The connection to the server 192.168.10.110:6443 was refused - did you specify the right host or port? #基本上就是透過看錯誤訊息找解答 journalctl -f -u kubelet # 看到 swap 字眼就要記得關掉 swapoff -a # 重新匯出 就可以了之後有遇到再補 export KUBECONFIG=/etc/kubernetes/admin.conf # 目前本機測試關係 執行上面兩組之後還是失敗可以reset kubeadm reset kubeadm init --pod-network-cidr 172.16.0.0/16 export KUBECONFIG=/etc/kubernetes/admin.conf ``` ## The node was low on resource: ephemeral-storage. ``` 可以先用 df -h 看看主機 使用量 (當初狀況已經 99%滿了) 使用 VsCode 看 Pod 為什麼一直Pull 失敗,查了原因大概是因為容量不夠了 當初測試只開 8G, 2022/09/30 調整為 32G 可以先刪掉 Cluster,因為作「擴充」也要一點容量 # 可以照著這篇作 https://etsaycood.wordpress.com/2020/10/19/%E6%93%B4%E5%A4%A7%E7%A3%81%E7%A2%9F%E7%A9%BA%E9%96%93/ lvextend -L +xxxx /dev/mapper/centos-root 最後 /dev/mapper/centos-root 成功擴大 [root@localhost ~]# df -h 檔案系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 26G 6.0G 20G 24% / 調整完 CentOS要執行 reboot == 之後各種順利 == ``` --- # 產生 kubconfig ``` # 官方教學 執行完會在 cmder 根目錄看到 admin.conf (再把他匯到VSCode or Lens 中) # 設定過 VM SSH 所以可以用 scp root@127.0.0.1:/etc/kubernetes/admin.conf . scp root@192.168.10.110:/etc/kubernetes/admin.conf . kubectl --kubeconfig ./admin.conf get nodes # 用這種方式產生 包含 完整 certificate-authority-data & client-certificate-data & client-key-data 的 kubconfig 檔 kubectl config view --raw #設定 Proxy 2022-09-30 產生完整 config 後是可以用設定Proxy http://192.168.10.110:6443 ``` # Windows Kubconfig 放在 `C:\Users\user` > .kube --- 開始裝其他東西確認功能 ``` # 額外補充(裝dashboard) kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.1/aio/deploy/recommended.yaml # 這樣才看的到所有的pods kubectl get pods -o wide --all-namespaces kubectl create serviceaccount dashboard-admin-sa ``` --- # 官方的範例 > 注意時做起來會卡在 kubeadm init 所以建議還是照著上面的方式走一遍 https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ ![](https://i.imgur.com/gxmOOBO.png) 做完後 `kube init` 會出現錯誤 ![](https://i.imgur.com/h4Km6l2.png) 看一下錯誤訊息可以看到如下,但下面的文件看似都有解法了,所以照著下面文件就可以 ``` [WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly [WARNING Swap]: swap is enabled; production deployments should disable swap unless testing the NodeSwap feature gate of the kubelet error execution phase preflight: [preflight] Some fatal errors occurred: # 解法 swapoff -a [ERROR CRI]: container runtime is not running: output: time="2022-09-29T17:57:03+08:00" level=fatal msg="unable to determine runtime API version: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\"" , error: exit status 1 [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 ``` --- 這個也是可以參考參考 但是 2022-09-30 實作起來是會一直卡在安裝套件失敗 [可以參考這篇](https://www.youtube.com/watch?v=v6Jh2sZClDY) - https://github.com/justmeandopensource/kubernetes/blob/master/docs/install-cluster-centos-7.md 前提是 MasterNode 主機 & WorkerNode 主機 都已經基本建置好 且可以 SSH 他們了