博客原文
什么是 Kind
Kind
(Kubernetes in Docker) 是一個(gè) Kubernetes
孵化項(xiàng)目,Kind
是一套開箱即用的 Kubernetes
環(huán)境搭建方案。顧名思義,就是將 Kubernetes
所需要的所有組件,全部部署在一個(gè) Docker
容器中,可以很方便的搭建 Kubernetes
集群。
Kind
已經(jīng)廣泛的應(yīng)用于 Kubernetes
上游及相關(guān)項(xiàng)目的 CI
環(huán)境中,官方文檔中也把 Kind
作為一種本地集群搭建的工具推薦給大家。
項(xiàng)目地址:https://github.com/kubernetes-sigs/kind
Kind 可以做什么?
- 快速創(chuàng)建一個(gè)或多個(gè)
Kubernetes
集群 - 支持部署高可用的
Kubernetes
集群 - 支持從源碼構(gòu)建并部署一個(gè)
Kubernetes
集群 - 可以快速低成本體驗(yàn)一個(gè)最新的
Kubernetes
集群,并支持Kubernetes
的絕大部分功能 - 支持本地離線運(yùn)行一個(gè)多節(jié)點(diǎn)集群
Kind 有哪些優(yōu)勢(shì)?
- 最小的安裝依賴,僅需要安裝
Docker
即可 - 使用方法簡單,只需
Kind Cli
工具即可快速創(chuàng)建集群 - 使用容器來模似
Kubernetes
節(jié)點(diǎn) - 內(nèi)部使用
Kubeadm
的官方主流部署工具 - 通過了
CNCF
官方的K8S Conformance
測(cè)試
安裝 docker
讓apt可以支持HTTPS
$ apt install apt-transport-https ca-certificates curl software-properties-common -y
將官方Docker庫的GPG公鑰添加到系統(tǒng)中
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 阿里源
$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
將Docker庫添加到APT里
# 官方源
$ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
# 阿里源
$ add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal stable"
# echo "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal stable" >> /etc/apt/source.list
更新包列表
$ apt update
為了確保修改生效,讓新的安裝從Docker庫里獲取,而不是從Ubuntu自己的庫里獲取,執(zhí)行:
$ apt-cache policy docker-ce
安裝 docker-ce
$ apt install -y docker-ce
配置 docker 阿里源鏡像地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://nol6uuul.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
踩坑: 我用了阿里云的鏡像地址反而無法拉取 kind 的鏡像, 此時(shí)需要?jiǎng)h除阿里源
檢查 docker 運(yùn)行狀態(tài)
$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-01-05 16:02:08 CST; 17min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 241165 (dockerd)
Tasks: 12
Memory: 29.6M
CGroup: /system.slice/docker.service
└─241165 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Jan 05 16:02:08 master1 dockerd[241165]: time="2024-01-05T16:02:08.136300388+08:00" level=info msg="Docker daemon" commit=311b9ff graphdriver=overla>
Jan 05 16:02:08 master1 dockerd[241165]: time="2024-01-05T16:02:08.136351488+08:00" level=info msg="Daemon has completed initialization"
Jan 05 16:02:08 master1 dockerd[241165]: time="2024-01-05T16:02:08.254789219+08:00" level=info msg="API listen on /run/docker.sock"
Jan 05 16:02:08 master1 systemd[1]: Started Docker Application Container Engine.
Jan 05 16:02:46 master1 dockerd[241165]: time="2024-01-05T16:02:46.543587374+08:00" level=warning msg="Error persisting manifest" digest="sha256:2fc>
Jan 05 16:03:38 master1 dockerd[241165]: time="2024-01-05T16:03:38.612170892+08:00" level=info msg="ignoring event" container=6d8d34f0066bde04811038>
Jan 05 16:04:50 master1 dockerd[241165]: time="2024-01-05T16:04:50.406175352+08:00" level=info msg="ignoring event" container=504632135d04b87b5ed83f>
Jan 05 16:05:35 master1 dockerd[241165]: time="2024-01-05T16:05:35.656175212+08:00" level=error msg="Error setting up exec command in container 5046>
Jan 05 16:09:52 master1 dockerd[241165]: time="2024-01-05T16:09:52.944844810+08:00" level=info msg="Layer sha256:a87ab3c028db3c73f360b49c9dcd171e236>
Jan 05 16:09:52 master1 dockerd[241165]: time="2024-01-05T16:09:52.946428917+08:00" level=info msg="Layer sha256:82ae998286b2bba64ce571578647adcabef>
lines 1-21/21 (END)
安裝 kubectl
apt 安裝
# 安裝依賴
apt install apt-transport-https ca-certificates -y
# 編輯鏡像源文件,文件末尾加入阿里云k8s鏡像源配置
echo 'deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main' >> /etc/apt/sources.list
#更新證書
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
#更新源
apt update
apt-get install -y kubectl
二進(jìn)制安裝
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
mv kubectl /usr/bin/
配置命令行自動(dòng)補(bǔ)全(可選)
apt install bash-completion -y
cat << EOF >> ~/.profile
alias k='kubectl'
source <(kubectl completion bash)
complete -F __start_kubectl k
EOF
source ~/.profile
安裝 Kind
首先進(jìn)到 官網(wǎng), 獲取你操作系統(tǒng)的 kind 版本
本教程提供 Linux 下的二進(jìn)制安裝
來自官網(wǎng)的最新安裝腳本:
# For AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
# For ARM64
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
使用 kind 創(chuàng)建集群
搭建一主三從集群 1c3w
1 control plane and 3 worker
cluster.yaml:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 31000 # 將主機(jī) 31000 端口映射到容器的 31000 端口
hostPort: 31000
listenAddress: "0.0.0.0" # Optional, defaults to "0.0.0.0"
protocol: tcp # Optional, defaults to tcp
- role: worker
- role: worker
- role: worker
**注意: ** 因?yàn)?kind 搭建的集群也是容器, 我們要訪問容器的服務(wù), 我們需要把集群的 Service 暴露為 NodePort 類型進(jìn)行訪問, (NodePort 范圍30000~32767)
$ kind create cluster --config cluster.yaml --name 1c3w
Creating cluster "1c3w" ...
? Ensuring node image (kindest/node:v1.27.3) ??
? Preparing nodes ?? ?? ?? ??
? Writing configuration ??
? Starting control-plane ???
? Installing CNI ??
? Installing StorageClass ??
? Joining worker nodes ??
Set kubectl context to "kind-1c3w"
You can now use your cluster with:
kubectl cluster-info --context kind-1c3w
Thanks for using kind! ??
創(chuàng)建 service
# 更換 context
$ kubectl cluster-info --context kind-1c3w
# 創(chuàng)建一個(gè) nginx 的 deploy 測(cè)試服務(wù)
$ k create deploy nginx --image=nginx
# 冗余部署實(shí)現(xiàn)高可用
$ k scale deployment nginx --replicas 3
# 暴露服務(wù)
$ k expose deployment nginx --name nginx --port=80 --target-port=80 --type=NodePort
# 修改 NodePort 端口為 31000 讓主機(jī)能夠訪問
$ k edit deployment nginx
......
ports:
- nodePort: 31000 # 修改
port: 80
protocol: TCP
targetPort: 80
....
$ k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6m5s
nginx NodePort 10.96.91.4 <none> 80:31000/TCP 3m7s
驗(yàn)證服務(wù)
$ curl localhost:31000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a >nginx.org</a>.<br/>
Commercial support is available at
<a >nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
也可在瀏覽器輸入<虛擬機(jī) ip>:31000文章來源:http://www.zghlxwxcb.cn/news/detail-824762.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-824762.html
到了這里,關(guān)于全平臺(tái)通用使用 kind 快速搭建 k8s 開發(fā)環(huán)境,坑已踩(無坑版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!