!!!一定要先安装好docker和升级WSL2以及支持systemctl

WSL2升级和docker安装以及支持systemctl命令

wsl2升级和支持systemctl命令请看我这篇文章
https://blog.csdn.net/qq_39272466/article/details/131169021

WSL2安装K8S

关闭swap

临时关闭
swapoff -a

永久关闭
1.切换到:C:\Users\【你的用户名】
2.新建一个.wslconfig的配置文件
3.添加下面这写配置

[wsl2]
swap=0 # 关闭swap

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

关闭所有的虚拟机

wsl --shutdown

查看是否关闭了

free
  1. 安装kebuctl

    1.更新apt软件包索引并安装使用Kubernetes apt存储库所需的软件包(linux系统已经换源):

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    

    2.使用阿里云的镜像

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

    3.添加Kubernetes apt存储库:

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

    4.使用新存储库更新apt软件包索引并安装kubectl:

    sudo apt-get update
    sudo apt-get install -y kubectl
    

    5.可以使用 kubectl version验证是否安装成功

    centos安装kubectl

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
           http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    
    setenforce 0
    yum install -y kubectl --disableexcludes=kubernetes
    

安装kind(推荐使用go安装)

之前有安装的话,把之前的重命名吧版本老旧的话会有问题

mv /usr/local/bin/kind /usr/local/bin/oldkind

golang安装

 go install sigs.k8s.io/kind@latest

直接下载二进制文件安装

[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-$(uname)-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
golang安装如果遇到超时问题,可能是golang的代理问题

1.首先开启go module

go env -w GO111MODULE=on     // Windows  export GO111MODULE=on        // macOS 或 Linux

2.配置goproxy:

阿里配置:

go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/       // Windows  
export GOPROXY=https://mirrors.aliyun.com/goproxy/          // macOS 或 Linux

七牛云配置:

go env -w GOPROXY=https://goproxy.cn      // Windows  
export GOPROXY=https://goproxy.cn         // macOS 或 Linux
安装kind之后如果遇到Command ‘kind’ not found, did you mean:问题

检查GOPATH,GOROOT两个环境变量

echo $GOROOT
echo $GOPATH

没有这两个环境变量的话自行去配置

echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> ~/.bashrc

安装单节点k8s

k8s.yaml文件

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP
  - containerPort: 30001
    hostPort: 30001
  - containerPort: 30080
    hostPort: 30080
    protocol: TCP
  - containerPort: 30443
    hostPort: 30443
    protocol: TCP

extraPortMappings:把 K8s 容器(相当于 K8s 所在的服务器)端口暴露出来
node-labels:只允许 Ingress controller 运行在有"ingress-ready=true"标签的 node 上

安装多节点的k8s

kind-3nodes.yaml

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
containerdConfigPatches:
  - |-
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://aa25jngun.mirror.aliyuncs.com"]
nodes:
  - role: control-plane
    kubeadmConfigPatches:
    - |
      kind: InitConfiguration
      nodeRegistration:
        kubeletExtraArgs:
          node-labels: "ingress-ready=true"
    extraPortMappings:
    - containerPort: 30000
      hostPort: 8000
      protocol: TCP
    - containerPort: 30001
      hostPort: 8080
      protocol: TCP
    - containerPort: 30002
      hostPort: 4443
      protocol: TCP
  - role: worker
  - role: worker
kind create cluster --name 3 --config ./kind-3nodes.yaml

出现timed out问题解决

ERRO[15:10:23] timed out waiting for docker to be ready on node kind-control-plane
Error: failed to create cluster: timed out waiting for docker to be ready on node kind-control-plane

如果使用了 --wait 120 之后仍然遇到了 “failed to create cluster: timed out
waiting for docker to be ready on node kind-control-plane”
错误,那么可以尝试以下方法:
确保在 WSL2 中已经安装了 Docker。您可以使用 docker --version 命令来验证 Docker 是否已经正确安装并运行。
确认在 WSL2 中安装了必要的 Linux 内核更新。您可以使用 wsl --status 命令检查是否有可用的更新,使用 wsl --update 命令来安装更新。
检查您的机器上是否存在其他 Kubernetes 工具或者其他容器环境(如 minikube、Docker Desktop 等),这些工具可能会影响 kind create cluster 命令的执行。如果存在这样的工具,可以尝试将其停止或卸载后再次运行 kind
create cluster 命令。
如果您的网络连接缓慢或不稳定,可以尝试连接到其他网络或使用 VPN 来改善连接质量。
确认您的机器配置满足 Kubernetes 的最低要求。例如,Kubernetes 至少需要 2GB 的内存和 2 个 CPU 核心才能运行。
如果上述方法都无法解决问题,您可以尝试使用其他 Kubernetes 工具(如 minikube)或在另一台机器上运行 kind create cluster 命令。

我是因为版本过高

Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.1", GitCommit:"4c9411232e10168d7b050c49a1b59f6df9d7ea4b", GitTreeState:"clean", BuildDate:"2023-04-14T13:21:19Z", GoVersion:"go1.20.3", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v5.0.1

卸载掉之前环境

apt --purge remove kubeadm
apt --purge remove kubelet

出现 Config not found可能是版本问题,你可以安装低版本(1.21.2)或者复制配置到文件解决

W0428 16:47:35.007624   75724 loader.go:222] Config not found: /etc/kubernetes/kubelet.conf
apt --purge remove kubectl
curl -x YOUR_PROXY_SERVER:PORT -LO https://dl.k8s.io/v1.21.2/bin/linux/amd64/kubectl
chmod 755 ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version --client

或者复制配置到文件

cat $KUBECONFIG
复制
vim /etc/kubernetes/kubelet.conf
粘贴
:wq

centos7出现这个问题解决 Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: cgroup namespaces aren’t enabled in the kernel: unknown.

在这里插入图片描述
是因为Kind 0.20.0 没法在内核 RHEL 7 VM (kernel 3.10.0) 中安装
你可以降低kind版本解决问题,我是降低到kind v0.10.0解决的
安装kind v0.10.0版本,怎么安装前文有说,

docker exec进入kind容器之后发现kubectl使用报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?

解决方案设置环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile

查看kind K8s 运行结构

#查看集群
kubectl cluster-info --context kind
#查看node
kubectl get nodes
#查看kube-system空间内运行的pod
kubectl get pods -n kube-system

使用K8S

部署nginx 测试

kubectl create deployment nginx --image=nginx

kubectl expose deployment nginx --port=80 --type=NodePort

kubectl get pod,svc

在这里插入图片描述
重新开一个窗口进入k8s容器内部,因为这个端口你没有暴露出来浏览器访问不了

docker exec -it kind-control-plane /bin/bash
curl http://127.0.0.1:31305

在这里插入图片描述

使用yaml文件部署nginx测试

service.yaml

kind: Service
apiVersion: v1
metadata:
  name: nginx-svc
spec:
  selector:
      app: nginx
  type: NodePort
  ports:
  - port: 80
	targetPort: 80
	nodePort: 30001
kubectl apply -f nginx.yaml

然后你你可以浏览器 http://127.0.0.1:30001访问了(因为30001是暴露了的)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐