wsl Ubuntu环境 创建 k8s集群

本文介绍了如何在Windows Subsystem for Linux (WSL2)中关闭swap,将服务从service切换到systemd,安装Docker并配置为开机启动,以及部署单节点和多节点Kubernetes集群的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.关闭swap

swapoff  -a

 wsl这个命令没法关闭swap,需要用如下方法

#先cd到c盘,并创建.wslconfig文件
root@timer:/mnt/c/Users/xiaoqi# cat .wslconfig 
[wsl2]
swap=0 # 关闭swap

[network]
generateResolvConf = false # 解决域名解析失败的问题

cmd进入命令行

wsl --shutdown  关闭所有的虚拟机

再bash进入 wsl,swap已关闭

2.service更换成systemd

Ubuntu默认是service启动服务,需要改成systemd方式

首先安装 Systemd 相关的依赖

apt install -yqq fontconfig daemonize

创建一个如下所示的脚本文件

# Create the starting script for SystemD
vi /etc/profile.d/00-wsl2-systemd.sh
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')

if [ -z "$SYSTEMD_PID" ]; then
   sudo /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
   SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
fi

if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
    exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi

上面的脚本放置在 /etc/profile.d 目录下面,所以要让脚本生效,我们需要退出当前 session,重新进入即可,再次登录session,我们会发现系统PID为1的进程已经变成systemd。

 

 这样就成功了

3.安装docker

apt-get install docker.io

如果需要配置为开机启动,可执行以下命令

systemcd enable docker

systemcd start docker

root@timer:~# docker --version
Docker version 20.10.14, build a224086

 这样子的docker就成功了

注意:如果没有源,记得更换国内的源,然后运行下面的命令

apt-get update

apt-get upgrade

4.安装kubelet组件

使得 apt 支持 ssl 传输

apt-get update && apt-get install -y apt-transport-https

下载 gpg 密钥

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

添加 k8s 镜像源

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

更新源列表

apt-get update

安装 kubectl,kubeadm以及 kubelet

apt-get install -y kubelet kubeadm kubectl  --allow-unauthenticated

注意:这时候运行k8s 会运行不起来,如下状态说明已经安装成功了

 

5.使用kind安装k8s集群

下载kind二进制文件

​
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.8.1/kind-$(uname)-amd64
# 标记为可执行文件
chmod +x ./kind
# 移动到 PATH 目录下去
mv ./kind /usr/bin/


创建单节点集群

root@timer:~# kind create cluster --name wsl2-k8s
Creating cluster "wsl2-k8s" ...
 ✓ Ensuring node image (kindest/node:v1.18.2) 🖼 
 ✓ Preparing nodes 📦  
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
Set kubectl context to "kind-wsl2-k8s"
You can now use your cluster with:

kubectl cluster-info --context kind-wsl2-k8s

Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
root@timer:~# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                       NAMES
29aa95a61d87   kindest/node:v1.18.2   "/usr/local/bin/entr…"   3 minutes ago   Up 3 minutes   127.0.0.1:44671->6443/tcp   wsl2-k8s-control-plane
root@timer:~# docker ps |grep "kindest\/node"|awk '{print $1}'
29aa95a61d87
root@timer:~# docker cp 29aa95a61d87:/kind/bin/kubectl /usr/bin/
root@timer:~# kubectl get node
NAME                     STATUS   ROLES    AGE     VERSION
wsl2-k8s-control-plane   Ready    master   4m46s   v1.18.2

kube-apiserver的6443端口暴露到docker宿主机的44671端口

进入到node节点的容器内

 如上所示,一个单节点的kubernetes集群就创建好了,那如何创建多节点kubernetes集群呢

创建多节点kubernetes集群

删除现有集群

# 获取创建的集群名字
kind get clusters
# 删除集群
kind delete cluster --name wsl2-k8s

创建一个3节点集群的配置文件

root@timer:~# cat kind-3nodes.yaml 
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

创建集群

root@timer:~# kind create cluster --name wsl2-3nodes --config ./kind-3nodes.yaml
Creating cluster "wsl2-3nodes" ...
 ✓ Ensuring node image (kindest/node:v1.18.2) 🖼
 ✓ Preparing nodes 📦 📦 📦  
 ✓ Writing configuration 📜 
 ✓ Starting control-plane 🕹️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️ 
 ✓ Installing CNI 🔌 
 ✓ Installing StorageClass 💾 
 ✓ Joining worker nodes 🚜 
Set kubectl context to "kind-wsl2-3nodes"
You can now use your cluster with:

kubectl cluster-info --context kind-wsl2-3nodes

Have a nice day! 👋

root@timer:~# kubectl get nodes
NAME                        STATUS   ROLES    AGE   VERSION
wsl2-3nodes-control-plane   Ready    master   93s   v1.18.2
wsl2-3nodes-worker          Ready    <none>   51s   v1.18.2
wsl2-3nodes-worker2         Ready    <none>   51s   v1.18.2

root@timer:~# docker ps
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS                       NAMES
67bcbe67747d   kindest/node:v1.18.2   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes                               wsl2-3nodes-worker
b5d9f5a30a98   kindest/node:v1.18.2   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes                               wsl2-3nodes-worker2
74c504c4a04b   kindest/node:v1.18.2   "/usr/local/bin/entr…"   2 minutes ago   Up 2 minutes   127.0.0.1:39877->6443/tcp   wsl2-3nodes-control-plane

以上。

<think>嗯,用户想本地部署Kubernetes集群做实验,需要推荐合适的笔记本。首先,我得了解部署k8s的基本硬件需求。Kubernetes本身资源消耗较大,尤其是运行多个节点的时候。每个节点至少需要2GB内存,而控制平面(control plane)可能需要更多,比如2-4GB。如果用户想在本机上用虚拟机模拟多节点集群,比如使用Minikube、kubeadm或者Kind,资源需求会更高。 接下来,考虑用户可能的使用场景。本地部署可能涉及到运行多个虚拟机或者容器,这需要较强的CPU和足够的内存。比如,如果用户打算运行三个节点(一个master,两个worker),每个节点分配2GB内存,那么至少需要6GB,再加上宿主机系统的开销,可能需要16GB以上的内存。CPU方面,多核处理器会更有利于虚拟化和并行任务,比如Intel的i5或i7,或者AMD的Ryzen 5或7系列。 存储方面,SSD是必须的,因为IO性能会影响虚拟机和容器的启动速度。至少256GB的SSD,但如果有更多预算,512GB或1TB更好,方便存储镜像和持久化数据。 网络部分,虽然本地部署对网络要求不高,但好的无线网卡或者有线连接能保证稳定性。另外,如果需要从外部访问集群,可能要考虑笔记本的网络性能。 操作系统兼容性也很重要。用户可能使用Linux、macOS或Windows。LinuxDocker和Kubernetes支持较好,Windows可能需要WSL2,而macOS则通常通过Docker Desktop。因此,笔记本需要兼容这些系统,尤其是如果用户选择Linux,可能需要较好的硬件驱动支持,比如无线网卡、显卡等。 品牌和型号方面,联想的ThinkPad系列通常可靠,散热好,适合长时间运行。戴尔的XPS系列性能强劲,屏幕好,适合开发。苹果的MacBook Pro M1/M2芯片性能优秀,但需要注意ARM架构可能带来的兼容性问题,尤其是某些Docker镜像可能需要ARM版本。游戏本如华硕ROG或戴尔G系列,虽然较重,但CPU和内存配置高,散热好,适合高负载。 预算方面,如果用户预算有限,可以选择中等配置的笔记本,16GB内存,512GB SSD,i5/Ryzen 5。预算充足的话,32GB内存,1TB SSD,i7/Ryzen 7会更顺畅。 还需要考虑扩展性,比如是否支持内存和存储升级。有些笔记本内存是焊死的,无法扩展,所以最好选择可以升级的型号,或者直接买高配。 另外,散热也很关键,长时间运行虚拟机可能会导致发热,良好的散热系统能保证稳定性。游戏本通常散热设计更好,但可能噪音大。商务本则可能更安静,但散热能力有限。 最后,用户是否需要便携性?如果需要经常携带,轻薄本可能更合适,但性能可能受限。如果主要是放在固定地方使用,游戏本或工作站类型的笔记本更好。 总结下来,推荐配置至少是16GB内存,四核以上CPU,SSD,良好的散热,品牌如ThinkPad、XPS、MacBook Pro(注意架构),或者游戏本。同时提醒用户如果资源有限,可以使用轻量级工具如Minikube或Kind,它们对资源需求较低,或者考虑云端的k8s服务。</think>以下是为本地部署Kubernetes集群选择笔记本电脑的逐步指南,结合性能、兼容性和成本效益: --- ### **一、核心硬件需求分析** 1. **CPU** - **推荐配置**:至少4核8线程(如Intel i5-11300H或AMD Ryzen 5 5600H) - **原因**:Kubernetes节点需运行多个容器,多线程CPU能更好处理并行任务,虚拟化技术(如VirtualBox/KVM)也需要CPU支持VT-x/AMD-V。 2. **内存** - **最低要求**:16GB(单节点实验) - **推荐配置**:32GB(多节点集群,如1个Control Plane + 2 Worker Nodes) - **计算公式**: $$ \text{总内存} = (\text{宿主机占用} \approx 4\text{GB}) + \sum_{i=1}^{n}(\text{单节点内存} \times \text{节点数}) $$ 例如:3节点(每个2GB)需至少 $4 + 3 \times 2 = 10\text{GB}$,推荐16GB预留余量。 3. **存储** - **类型**:NVMe SSD(读写速度需 > 2000MB/s) - **容量**:512GB起步(容器镜像、ETCD数据库等占用较大) 4. **网络** - **网卡**:支持千兆有线/Wi-Fi 6,避免跨节点通信瓶颈。 --- ### **二、操作系统兼容性** 1. **Linux优先**(如Ubuntu 22.04 LTS) - 原生支持容器运行时(containerd/Docker),内核级虚拟化效率更高。 2. **Windows/macOS方案** - Windows需通过WSL2 + Docker Desktop部署,占用额外内存; - macOS需注意M1/M2芯片的ARM架构兼容性(部分x86镜像需转译)。 --- ### **三、推荐笔记本型号** #### **1. 性价比方案(预算6000-8000元)** - **联想ThinkPad T14/P14s** - 配置:AMD Ryzen 7 PRO 6850U(8核16线程)+ 32GB DDR5 + 512GB SSD - 优势:商务本稳定性,支持双硬盘扩展。 - **戴尔Latitude 5430** - 配置:Intel i7-1265U(10核12线程)+ 32GB DDR4 + 1TB SSD - 优势:军工级散热,长续航。 #### **2. 高性能方案(预算8000-12000元)** - **苹果MacBook Pro 14寸(M2 Pro芯片)** - 配置:M2 Pro(12核CPU/19核GPU) + 32GB统一内存 + 1TB SSD - 注意:需验证工具链对ARM架构的支持(如Kind/Minikube已适配)。 - **华硕ROG幻16** - 配置:Intel i7-12700H(14核20线程)+ 32GB DDR5 + 1TB PCIe 4.0 SSD - 优势:散热强劲,适合长时间高负载。 --- ### **四、优化部署建议** 1. **轻量化工具选择** - 单节点实验:Minikube(需2核4GB)或Kind(直接基于Docker,资源占用更低)。 - 多节点模拟:kubeadm + Vagrant(自动化创建虚拟机集群)。 2. **资源分配示例** ```bash # 使用Kind创建3节点集群的配置示例 kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane memory: 4GB # 控制平面分配4GB - role: worker memory: 2GB # Worker节点各分配2GB - role: worker memory: 2GB ``` 3. **避免常见问题** - 关闭笔记本休眠模式,防止集群状态中断; - 优先使用有线网络,减少虚拟网卡性能损耗。 --- ### **五、替代方案** 若笔记本配置不足,可考虑: - **云服务**:AWS EKS/Azure AKS提供免费层或低成本实验环境; - **旧硬件复用**:用闲置PC搭建Proxmox虚拟化平台,通过PXE批量部署节点。 --- 通过以上配置,可流畅运行包括Istio、Prometheus等中间件的完整k8s生态实验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术蜜糖罐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值