文章目錄
Windows 慣用者如何在 Ubuntu Server 16.04 LTS 上使用 kubeadm 架設 Kubernetes (K8s)
原本是想將 Kubernetes 架設在 Ubuntu Server 17.10 上,但需要透過一些小手法才能順利執行 container,為了避免忘記如何架設,決定先退而求其次的使用 Ubuntu Server 16.04 LTS 紀錄一下先,網路上有許多文章在介紹如何安裝 Kubernetes,我相信我不會寫得比網路上的大大來得好,但我想站在一個 Windows 環境慣用者的角度來紀錄該如何使用 Ubuntu 及安裝 Kubernetes,主要就是因為我自己在實際安裝時就遇到不少操作上問題XD
Kubernetes - K8s 是用於自動部署、擴展和管理容器化(containerized)應用程式的開源系統,前身為 Borg (節錄自 Kubernetes - 維基百科,自由的百科全書 - Wikipedia)
近來 Kubernetes 漸漸有擺脫其他 Orchestration 工具(像是 docker swarm,Mesos… )的態勢,功能發展及業界關注度明顯較為熱絡,雖然一直相當看好 docker 的後續發展但也仍在觀望到底該選擇什麼樣的 Orchestration tool,近來覺得應該可以先試試 Kubernetes ,就來看看該如何在 Ubuntu Server 16.04 LTS 上架設 Kubernetes 吧
開始安裝前的小提醒
指令常需要以
root
(類似 Windows 的系統管理員角色) 執行在每個指令前加上
sudo
來執行切換成
root
使用者切換前需先為
root
設定密碼,否則切換時會一直遇到認證失敗 (Authentication failure)使用
sudo passwd
設定密碼實際切換為
root
su root
或
su
安裝 Docker
記得執行指令前加上
sudo
或是切換為root
更新套件
apt-get 是 Ubuntu 內建的應用程式管理工具,作用等同於 Windows 的 Chocolatey ,只是在 Windows 上 Chocolatey 需要自行安裝
apt-get update
直接從 Ubuntu repository 安裝 Docker
apt-get install -y docker.io
確認安裝成功
docker version
安裝 Kubernetes
記得執行指令前加上
sudo
或是切換為root
更新套件
apt-get update
安裝讓 apt 支援 ssl 的套件
apt-transport-https
apt-get install -y apt-transport-https
從遠端下載 key 並加入 APT 信任清單中
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
將 apt 來源位置覆蓋至 kubernetes.list
這邊要留意一下從 Windows 貼上因為換行符號與 linux 不同,可能會有問題
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF
更新套件
apt-get update
安裝
kubelet
,kubeadm
,kubectl
kubelet
安裝於 cluster 所有機器上的元件,用來啟動 pod 跟 container
kubeadm
是 Kubernetes 官方提供的快速安裝和初始化 Kubernetes cluster 的工具
kubectl
Kubernetes 的命令列工具
apt-get install -y kubelet kubeadm kubectl
確認安裝成功
kubeadm version
關閉系統 Swap
Swap 類似 Windows 中的虛擬記憶體,從 Kubernetes 1.8 開始要求關閉系統的 Swap
關閉 Swap
swapoff -a
修改
/etc/fstab
,避免Swap
自動掛載sed -e '/swap/ s/^#*/#/' -i /etc/fstab
確認關閉
free -m
建立 cluster
初始化 master
--pod-network-cidr
是為後面的 Pod 網路套件 (flannel
) 做準備kubeadm init --pod-network-cidr=10.244.0.0/16
確保有權限執行
kubectl
非 root user
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
root user
export KUBECONFIG=/etc/kubernetes/admin.conf
啟用 bash 自動完成
apt-get install -y bash-completion echo "source /etc/bash_completion" >> ~/.bashrc echo "source <(kubectl completion bash)" >> ~/.bashrc source <(kubectl completion bash)
安裝 Pod 網路套件
這邊以
flannel
為例kubectl apply --namespace kube-system -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
加入其他 Node
- 新的 Node 上需先完成前面的
安裝 Docker
,安裝 Kubernetes
,關閉系統 Swap
執行 join 指令
指令內容會在 master 執行
kubeadm init
時產生kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
加入成功
至 master 上確認
kubectl get nodes
心得
Kubernetes 整個架構設計相當具有擴充性,也因為如此讓 Kubernetes 變得複雜,在學習上有不小的門檻,加上我本身平常使用的是 Windows 環境,常常卡在 linux 相關設定或是語法上,但也是透過這樣的機會才能試著學習 linux 上的操作以及觀念
雖然今天初步完成了 Kubernetes cluster 的架設,不過許多設定都還不清楚,甚至名詞的掌握度也不高,除此之外 Windows node 的介接或是實際的部署都是挑戰呀,希望接下來有機會可以實際應用在工作上
參考資訊
文章作者 Yowko Tsai
上次更新 2021-10-14
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。