wsl Ubuntu环境 创建 k8s集群

简介: wsl Ubuntu环境 创建 k8s集群

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

以上。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1天前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
14天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
12天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
52 12
|
14天前
|
JSON Ubuntu 开发者
ubuntu 22安装lua环境&&编译lua cjson模块
通过上述步骤,可以在 Ubuntu 22.04 系统上成功安装 Lua 环境,并使用 LuaRocks 或手动编译的方式安装 lua-cjson 模块。本文详细介绍了每一步的命令和操作,确保每一步都能顺利完成,适合需要在 Ubuntu 系统上配置 Lua 开发环境的开发者参考和使用。
65 13
|
16天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
32 2
|
28天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
Kubernetes Ubuntu Docker
Kubernetes的离线部署(Ubuntu)方法试验
为了在内网上使用Kubernetes,有时候因为网络原因,需要离线进行部署。 裸机安装 我这里使用Ubuntu进行试验,需要解决几个问题: Ubuntu的离线安装。下载,安装时选择不联网可以正常完成,没有问题。
2839 0
|
Kubernetes Ubuntu Docker
Kubernetes的离线部署(Ubuntu)方法试验
为了在内网上使用Kubernetes,有时候因为网络原因,需要离线进行部署。 裸机安装 我这里使用Ubuntu进行试验,需要解决几个问题: Ubuntu的离线安装。下载,安装时选择不联网可以正常完成,没有问题。
2921 0
|
2月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
83 1
|
3月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
下一篇
开通oss服务