• 使用 Kind 创建1.20.7 版本的 K8s 一主二从集群


    Kind 是 Kubernetes In Docker 的缩写,顾名思义是使用 Docker 容器作为 Node 并将 Kubernetes 部署至其中的一个工具。官方文档中也把 Kind 作为一种本地集群搭建的工具进行推荐。

    1.安装 kind

    # 建议下载最新版本的 kind
    go get sigs.k8s.io/kind@v0.11.1
    cp $(go env GOPATH)/bin/kind /usr/local/bin
    

    2.使用 kind 搭建k8s集群

    2.1 创建3结点集群的配置文件

    vim ~/k8s-3nodes.yaml, 添加下述内容:

    # three node (two workers) cluster config
    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    nodes:
    - role: control-plane
    - role: worker
    - role: worker
    

    2.2 创建集群:

    使用kind创建集群之前首先要确保 ~/.kube 目录存在,如果不存在,要先使用 mkdir ~/.kube 创建 .kube 目录。(防止后续非 root 用户使用 kubectl 查看 Kind 创建的集群需要加sudo的问题)

    mkdir ~/.kube
    

    创建指定版本,指定节点的集群:

    kind create cluster --config ~/k8s-3nodes.yaml --image kindest/node:v1.20.7@sha256:cbeaf907fc78ac97ce7b625e4bf0de16e3ea725daf6b04f930bd14c67c671ff9
    
    • 如果不指定--config,默认创建单master集群;
    • 使用--image参数可以指定创建的k8s版本,kind v0.11.1版本可以使用的node镜像可以在这里面找到:https://github.com/kubernetes-sigs/kind/releases/tag/v0.11.1
    • 不手动使用 --name 指定集群名称的时候,集群默认名为 kind
      注:镜像后面的@sha256的这一串token最好加上。

    这样集群就创建好了,如下图所示:
    image

    2.3 注意事项

    1.如果结点一直处于NotReady,有可能是kind的版本问题。
    2.由于前面只创建了一个集群,如果创建了很多个集群的话(使用--name可以指定集群名称,所以可以创建很多不同名称的集群),那么使用Kubectl命令的时候要使用 --context 指定集群名称

    查看集群信息
    ❯ kubectl  cluster-info --context kind-kind
    Kubernetes master is running at https://127.0.0.1:41801
    KubeDNS is running at https://127.0.0.1:41801/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    

    可以看到我们 k8s master 地址和 dns 的地址,注意一般情况下我们只创建一个集群不需要指定 --context cluster name 但是创建了多个集群时这个基本就是必须的一个命令了。如果不加这个参数可能会报下面的错误

    The connection to the server localhost:8080 was refused - did you specify the right host or port?
    

    这是因为 kubectl默认连接的 apiserver 地址是 localhost:8080但是我们的 apiserver 地址不是这个所以报错。

    为什么我们使用 --context cluster-name 就可以了呢?

    这是因为 kind 在创建集群的时候会修改 $HOME/.kube/config 的配置,将集群的 apiserver 地址,证书等相关信息都自动写入进去了

    每次命令都要加上这个参数好麻烦怎么办?

    我们可以使用 kubectl config use-context context-name 来进行设置,设置好了之后我们后续就不用每次都加上 –-context 的参数了,同时还可以通过 kubectl config current-context 查询我们当前默认操作的集群是哪一个

    3. 登录 k8s 结点

    3.1 登录结点

    由于 Node 是 docker 容器,则可以使用 docker ps 命令查看当前运行的容器:
    image
    可以看到,3个结点对应3个 docker 容器,那么使用如下命令就可以登录结点了,以master结点为例:

    docker exec -it kind-control-plane bash
    

    image

    3.2 查看结点中已经下载的镜像

    可以使用 crictl 命令操作 kind 结点中的镜像:

    # 查看镜像
    crictl images
    

    3.3 结点中安装 vim 编辑器

    但是进入结点后,会发现没有 vim 命令,所以无法编辑文件。使用

    kubectl describe node kind-control-plane
    

    或者直接在此链接中可以发现,v0.11.1版本的kind中node的底层操作系统镜像是 Ubuntu 21.04,因此可以使用 apt 来安装vim命令。

    # 这条 update 命令是必须的,否则会提示 Unable to locate package vim
    apt-get update
    apt-get install vim
    

    这样就安装好了 vim 。

    参考文章

    https://kind.sigs.k8s.io/docs/user/quick-start/

    https://github.com/kubernetes-sigs/kind/releases/tag/v0.11.1

    Kind: 如何快速搭建本地 K8s 开发环境? - Mohuishou (lailin.xyz)

    使用 Kind 搭建你的本地 Kubernetes 集群 - SegmentFault 思否

    Docker---(6)问题:bash: vi: command not found_IT云清-CSDN博客

  • 相关阅读:
    Python修饰符实践
    回文
    Linux下安装Qt
    Linux下安装PyQT
    Python闭包实践
    杂乱
    windows下脚本转到linux下,文件保存格式要转换
    lua table.sort的bug
    shell截取某段
    coredump
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/15408380.html
Copyright © 2020-2023  润新知