Kubectl & K3d
博主有幸低价购得一点台二手高配的腾讯云轻量(虽然只有 4C4G8M,但是在国内这绝对可以算是高配了……),最重要的一点是腾讯云轻量可以直接装 K3s、Docker 这种,不管怎么搞砸,总能一键重装,而且 Docker 基础镜像还能直接通过网页控制台作简易操作(启动、重启、停止和加端口的这种简易……真要操作容器还是直接登服务器输命令吧)。但是因为腾讯自带的 K3s 版本太低了(1.20.7)无法正常使用,所以博主还是安装了 Docker,然后就发现了 K3d(K3s in docker)这种好东西。
K3d 简单点理解就是在一台服务器上,将 K3s 的 Server 和 Agent 以 Docker 的方式进行部署,一个 Docker 代表一个节点。结合腾讯云轻量 Docker 基础镜像的功能,在安装完 K3d 之后便可以通过网页控制台操作各个 Docker(Server/Agent),简直完美适配。(P.S. 腾讯云可以考虑和 K3d 来一波联名~)
k3d is a lightweight wrapper to run k3s (Rancher Lab’s minimal Kubernetes distribution) in docker.
k3d makes it very easy to create single- and multi-node k3s clusters in docker, e.g. for local development on Kubernetes.
——摘自 K3d 官网 What is k3d?
安装 Kubectl
博主在安装 K3d 时发现,并未同步安装 Kubectl,而后的很多命令都需要 Kubectl,所以博主建议在安装 K3d 前,先安装 Kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" # 下载 Kubectl 最新发行版
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256" # 下载 Kubectl 校验和文件
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check # 基于校验和文件,验证 Kubectl 的可执行文件
# 验证通过时,输出为:kubectl: OK
# 验证失败时,sha256 将以非零值退出,并打印如下输出:kubectl: FAILED
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl # 安装 Kubectl
kubectl version --client # 执行测试,以保障你安装的版本是最新的
kubectl version --client --output=yaml # 使用此命令来查看版本的详细信息
K3d 单服务器节点
wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash # 安装当前最新版本
k3d cluster create mycluster # 创建一个仅以单个服务器节点命名的群集:mycluster
kubectl get nodes # 将新集群与 Kubectl 结合使用
k3d cluster delete mycluster # 删除 mycluster 集群
好了,现在应该可以在腾讯云轻量网页控制台看到单 Server 和单 Agent 的容器了。
K3d 高可用部署
k3d cluster create mycluster --api-port 127.0.0.1:6443 --servers 3 --agents 2 --port '8080:80@loadbalancer' # 创建三个 Server 节点和两个 Agent 节点,并将 api server 的 6443 端口映射到 localhost,将 8080 端口映射到 loadbalancer 的 80 端口
经过漫长的等待,窗口会输出如下内容,代表所有 Docker 都运行起来了,在腾讯云网页控制台上也可以看到有六个容器都正在运行,分别是三个 Server、两个 Agent 和一个 LoadBalancer
INFO[0000] portmapping '8080:80' targets the loadbalancer: defaulting to [servers:*:proxy agents:*:proxy]
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-mycluster'
INFO[0000] Created image volume k3d-mycluster-images
INFO[0000] Creating initializing server node
INFO[0000] Creating node 'k3d-mycluster-server-0'
INFO[0000] Starting new tools node...
INFO[0000] Pulling image 'docker.io/rancher/k3s:v1.22.7-k3s1'
INFO[0002] Pulling image 'ghcr.io/k3d-io/k3d-tools:5.4.1'
INFO[0004] Creating node 'k3d-mycluster-server-1'
INFO[0005] Creating node 'k3d-mycluster-server-2'
INFO[0005] Creating node 'k3d-mycluster-agent-0'
INFO[0005] Creating node 'k3d-mycluster-agent-1'
INFO[0005] Creating LoadBalancer 'k3d-mycluster-serverlb'
INFO[0010] Pulling image 'ghcr.io/k3d-io/k3d-proxy:5.4.1'
INFO[0110] Starting Node 'k3d-mycluster-tools'
INFO[0315] Using the k3d-tools node to gather environment information
INFO[0315] HostIP: using network gateway 172.18.0.1 address
INFO[0315] Starting cluster 'mycluster'
INFO[0315] Starting the initializing server...
INFO[0315] Starting Node 'k3d-mycluster-server-0'
INFO[0317] Starting servers...
INFO[0317] Starting Node 'k3d-mycluster-server-1'
INFO[0339] Starting Node 'k3d-mycluster-server-2'
INFO[0351] Starting agents...
INFO[0352] Starting Node 'k3d-mycluster-agent-0'
INFO[0352] Starting Node 'k3d-mycluster-agent-1'
INFO[0360] Starting helpers...
INFO[0360] Starting Node 'k3d-mycluster-serverlb'
INFO[0366] Injecting records for hostAliases (incl. host.k3d.internal) and for 6 network members into CoreDNS configmap...
INFO[0369] Cluster 'mycluster' created successfully!
INFO[0369] You can now use it like this:
kubectl cluster-info