iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0

接下來就來準備本機練習 kubernetes 的環境吧!
因個人練習通常不會有多台機器能部署,社群上有不少工具提供給開發者建置本機 kubernetes 環境:

這邊我使用 k3d,k3d 全名是 k3s in docker,能在 docker 中運行單一節點 (node) 或多節點的 k3s cluster,方便開發者在本機上使用 kubernetes。
k3s 是輕量級的 Kubernetes,由 Rancher Labs 發佈及維護。k3s 運行所需的資源較少,與 kubernetes 相比刪除了部分功能 (5個項目),因此才稱為 k3s。

以下使用 ubuntu 22.04 的環境安裝,如果是 windows 用戶在 k3d 的部分透過 wsl 安裝步驟一樣:

Docker 安裝

k3d 是 k3s in docker,在這之前要先有 docker 才行
安裝可參考官網文件。若是 windows / mac ,可安裝 docker desktop。(若 windows 使用 wsl 安裝 docker 需開啟 Hyper-V & Windows SubSystem 功能然後可能還有些坑要解…)

安裝完後將 user 加入 docker group,讓 non-root user 也能使用 docker command

sudo usermod -aG docker $USER && newgrp docker

$USER : current user
newgrp : 如果 user 屬於兩個或以上的 group,透過 newgrp 可切換組別,在這邊就不需要重新登出登入

測試是否安裝成功,看到 “Unable to find image ‘hello-world:latest’ locally……Hello from Docker ! “的訊息即代表安裝成功

docker run hello-world

K3D 安裝

安裝最新版本

wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

# or

curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

看到以下畫面就代表安裝成功
https://ithelp.ithome.com.tw/upload/images/20230917/20162795OaIM1XFhNj.png

建立 default Cluster

建立 cluster,如果沒有指定 cluster name 則會是 k3s-default

# k3d cluster create <cluster name>
k3d cluster create

預設的 cluster 會有 1 個 server node,並裝好 Load Balancer,可用 k3d cluster list 列出 clustershttps://ithelp.ithome.com.tw/upload/images/20230917/20162795wB0QbiOumq.png
執行 k3d node list 列出目前的 node
https://ithelp.ithome.com.tw/upload/images/20230917/201627954yBCONeOXD.png
前面提到 k3d 是以 docker 的方式來運行 k3s ,也可以透過 docker command docker ps 來觀察,有一個 Load Balancer 跟一個 Server。因這邊只有單節點,如果有多節點就會多幾個 Container。
https://ithelp.ithome.com.tw/upload/images/20230917/20162795vNgpScD3um.png

Kubectl 安裝

接下來該怎麼操作 cluster 呢? 前面提到可使用 CLI 的方式與 API server 溝通,因此這邊要先安裝 kubectl 。透過 kubectl 指令可以部署應用程式、管理 cluster 資源、看 log etc。
Kubectl 安裝 - Install kubectl on Linux

# download the latest release based on architecture (ARM or x86)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl"

# validate, expect to see 'kubectl: OK'
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl.sha256"
echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check

# install
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

安裝完後透過 kubectl version 指令可檢查是否安裝成功https://ithelp.ithome.com.tw/upload/images/20230917/20162795seOG1IvkWJ.png
Note: 過去建立完 cluster 後還需要將 k3d kubeconfig 與 kubectl kubeconfig 連接 (export KUBECONFIG="$(k3d kubeconfig write k3s-default),但現在下 k3d cluster create 指令時已經會 merge k3d kubeconfig file 進 default kubeconfig file

安裝完 kubectl 後就能用 kubectl cluster-info 來看集群的資訊了
https://ithelp.ithome.com.tw/upload/images/20230917/20162795arvAXYxZdn.png

建立 multi-server clusters

k3d cluster create 有多個 options 可以下,可指定有多少 agent & server、映射 host port 至 container port

k3d cluster create demo -p "8080:80@loadbalancer" --agents 2

-p : 映射主機的 port 到 container port,這邊會是將 host 8080 port 映射到 loadbalancer 80 port,因在 kubernetes cluster 中 pod 是運行在內部虛擬網路中,host 沒有辦法直接訪問,透過 host port mapping 可以利用 localhost:8080 來訪問在 k8s 上跑的 app
--agents : agents number
--servers : servers number
更多 options 可參考官方文件: https://k3d.io/v5.6.0/usage/commands/k3d_cluster_create/

Kubectl 指令簡化

最後來讓生活更簡單一些,跟著 kubectl cheat sheet 設定 autocomplete & alias

  • autocomplete
# bash
# set up autocomplete in bash into the current shell, bash-completion package should be installed first.
source <(kubectl completion bash)
# add autocomplete permanently to your bash shell.
echo "source <(kubectl completion bash)" >> ~/.bashrc 
  • alias
alias k=kubectl
complete -o default -F __start_kubectl k

echo "alias k=kubectl" >> ~/.bashrc
echo "complete -o default -F __start_kubectl k" >> ~/.bashrc

測試
https://ithelp.ithome.com.tw/upload/images/20230917/20162795ulaNkFhP9s.png

Kubernetes Version

這邊安裝的 k3d 版本是 v5.6.0、k3s 版本是 v1.27.4+k3s1,查一下 k3s release 資訊 https://github.com/k3s-io/k3s/releases 可看到其中 kubernetes 版本用的是 v1.27.5。
現在 kubernetes 最新版本是 v1.28.2,很粗略的掃一下 changelog ,看起來上面提到的 options 或是 kubernetes object 我都沒用過哈哈哈,所以後面貼文件連結就還是直接貼最新版的。但正式環境通常會是較舊的版本,有些 spec 寫法或功能要注意版本差異。


練習的環境就這樣啦,搭配前面提到的 cluster architecure,安裝時其實有不少疑問 - control plane 上的元件不需要自己安裝、kubernetes cluster 中的網路是怎麼設定的、kube-system namespace 中已經在運行的 pod 各是在做些什麼 …
以上問題可能這次文章寫完都還不會有解答…..,如果後面內容有關係到再來試著回答 QQ


上一篇
Day 1 前言 & Kubernetes 架構介紹
下一篇
Day 3 First Pod & Kubernetes Dashboard
系列文
可能會迷路的航行 - 菜雞的kubernetes學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言