以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!
目录
一、KWOK 简介
KWOK (Kubernetes WithOut Kubelet)是一种工具包,能够在几秒钟内建立起包含数千个节点的集群。在这种场景下,KWOK 使用很少的内存来模拟大量节点和 Pod 的行为,因此资源占用率非常低。
KWOK 项目地址:GitHub - kubernetes-sigs/kwok
KWOK 官网地址:Home | KWOK
二、KWOK 工具下载、安装
KWOK 提供了两个工具,分别是 kwok、kwokctl,本文使用 kwokctl 工具部署集群。
# AMD架构
wget -O /usr/bin/kwokctl https://github.com/kubernetes-sigs/kwok/releases/download/v0.5.1/kwokctl-linux-amd64
chmod +x /usr/bin/kwokctl
# ARM架构
wget -O /usr/bin/kwokctl https://github.com/kubernetes-sigs/kwok/releases/download/v0.5.1/kwokctl-linux-arm64
chmod +x /usr/bin/kwokctl
# 查看版本信息
kwokctl --version
三、KWOK 部署 Kubernetes 集群
1、准备工作
# 关闭防火墙
systemctl disable --now firewalld
# 关闭 selinxu
setenforce 0
sed -i ’s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
# 清空 iptables 规则
iptables -F && iptables -t nat -F
# 禁用 swap 分区
swapoff -a
sed -i '/swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 配置主机间 SSH 免密(详细过程略)
# 安装 docker、kubectl(详细过程略)
2、部署集群
- 方式一(docker run 方式)
# 提前下载所需镜像
docker pull myifeng/registry.k8s.io_kwok_cluster:v0.5.1-k8s.v1.28.0
docker tag myifeng/registry.k8s.io_kwok_cluster:v0.5.1-k8s.v1.28.0 registry.k8s.io/kwok/cluster:v0.5.1-k8s.v1.28.0
# 部署集群
docker run -itd -p 8080:8080 --name kwok registry.k8s.io/kwok/cluster:v0.5.1-k8s.v1.28.0
- 方式二(kwokctl create 方式)
# 提前下载所需镜像
docker pull myifeng/registry.k8s.io_etcd:3.5.11-0
docker tag myifeng/registry.k8s.io_etcd:3.5.11-0 registry.k8s.io/etcd:3.5.11-0
docker pull myifeng/registry.k8s.io_kube-apiserver:v1.29.0
docker tag myifeng/registry.k8s.io_kube-apiserver:v1.29.0 registry.k8s.io/kube-apiserver:v1.29.0
docker pull myifeng/registry.k8s.io_kube-controller-manager:v1.29.0
docker tag myifeng/registry.k8s.io_kube-controller-manager:v1.29.0 registry.k8s.io/kube-controller-manager:v1.29.0
docker pull myifeng/registry.k8s.io_kube-scheduler:v1.29.0
docker tag myifeng/registry.k8s.io_kube-scheduler:v1.29.0 registry.k8s.io/kube-scheduler:v1.29.0
docker pull myifeng/registry.k8s.io_kwok_kwok:v0.5.1
docker tag myifeng/registry.k8s.io_kwok_kwok:v0.5.1 registry.k8s.io/kwok/kwok:v0.5.1
# 部署集群
kwokctl create cluster --name=kwok
🔔 输出如下:
Cluster is creating
cluster=kwok
Cluster is created
elapsed=0.4s cluster=kwok
Cluster is starting
cluster=kwok
Cluster is started
elapsed=1.6s cluster=kwok
You can now use your cluster with:
kubectl cluster-info --context kwok-kwok
Thanks for using kwok!
3、创建节点
# 创建 Node 节点(否则 pod 报错:no nodes available to schedule pods)
kubectl apply -f - <<EOF
apiVersion: v1
kind: Node
metadata:
annotations:
node.alpha.kubernetes.io/ttl: "0"
kwok.x-k8s.io/node: fake
labels:
beta.kubernetes.io/arch: amd64
beta.kubernetes.io/os: linux
kubernetes.io/arch: amd64
kubernetes.io/hostname: kwok-node-0
kubernetes.io/os: linux
kubernetes.io/role: agent
node-role.kubernetes.io/agent: ""
type: kwok
name: kwok-node-0
spec:
taints: # Avoid scheduling actual running pods to fake Node
- effect: NoSchedule
key: kwok.x-k8s.io/node
value: fake
EOF
---------------------------------------------------------
# 去除污点
kubectl taint node --all kwok.x-k8s.io/node-
4、实测结果
Kubernetes 集群组件均以 docker 容器方式运行
09ef5c33405b registry.k8s.io/kube-scheduler:v1.29.0 "kube-scheduler --ku…" 10 minutes ago Up 23 seconds kwok-kwok-kube-scheduler
1b860a04fbf5 registry.k8s.io/kube-controller-manager:v1.29.0 "kube-controller-man…" 10 minutes ago Up 23 seconds kwok-kwok-kube-controller-manager
a8368d53cc66 registry.k8s.io/kwok/kwok:v0.5.1 "kwok --manage-all-n…" 10 minutes ago Up 23 seconds kwok-kwok-kwok-controller
3615b8f84f1a registry.k8s.io/kube-apiserver:v1.29.0 "kube-apiserver --et…" 10 minutes ago Up 23 seconds kwok-kwok-kube-apiserver
四、kwokctl 常用命令
kwokctl --help
kwokctl is a tool to streamline the creation and management of clusters, with nodes simulated by kwok
Usage:
kwokctl [command] [flags]
kwokctl [command]
Available Commands:
completion Generate the autocompletion script for the specified shell
config Manage [reset, tidy, view] default config
create Creates one of [cluster]
delete Deletes one of [cluster]
etcdctl etcdctl in cluster
export Exports one of [logs]
get Gets one of [artifacts, clusters, kubeconfig]
hack [experimental] Hack [get, put, delete] resources in etcd without apiserver
help Help about any command
kubectl kubectl in cluster
logs Logs one of [audit, etcd, kube-apiserver, kube-controller-manager, kube-scheduler, kwok-controller, dashboard, metrics-server, prometheus, jaeger]
scale Scale a resource in cluster
snapshot Snapshot [save, restore, record, replay, export] one of cluster
start Start one of [cluster]
stop Stop one of [cluster]
Flags:
-c, --config strings config path (default [~/.kwok/kwok.yaml])
--dry-run Print the command that would be executed, but do not execute it
-h, --help help for kwokctl
--name string cluster name (default "kwok")
-v, --v log-level number for the log level verbosity (DEBUG, INFO, WARN, ERROR) or (-4, 0, 4, 8) (default INFO)
--version version for kwokctl
Use "kwokctl [command] --help" for more information about a command.
# 查看 kwok 集群,可选项:artifacts, clusters, kubeconfig
kwokctl get clusters
# 切换 kwok 集群
kubectl config use-context kwok-kwok
# 停止 kwok 集群
kwokctl stop cluster --name=kwok
# 启动 kwok 集群
kwokctl start cluster --name=kwok
# 删除 kwok 集群
kwokctl delete cluster --name=kwok
# 执行 etcdctl 命令
kwokctl etcdctl xxx
# 执行 kubectl 命令
kwokctl kubectl xxx
# 查看日志,可选项:etcd, kube-apiserver, kube-controller-manager, kube-scheduler, kwok-controller
kwokctl logs xxx