惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
量子位
G
Google Developers Blog
J
Java Code Geeks
N
Netflix TechBlog - Medium
博客园 - 聂微东
宝玉的分享
宝玉的分享
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
月光博客
月光博客
The Cloudflare Blog
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
雷峰网
雷峰网
M
MIT News - Artificial intelligence
T
Tailwind CSS Blog
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
kind 实用指南
微信公众号 · 2024-02-05 · via 陈少文的网站

Please enable Javascript to view the contents

1. 项目简介

kind 是使用容器管理 Kubernetes 集群的工具。项目地址 https://github.com/kubernetes-sigs/kind

主要用在:

  • 本地开发环境
  • 学习时的临时环境
  • 自动化测试

2. 安装 kind

  • macOS
  • Linux
1
2
curl -Lo /usr/local/bin/kind https://kind.sigs.k8s.io/dl/v0.21.0/kind-linux-amd64
chmod +x /usr/local/bin/kind

3. 创建 kind 集群

如果你本地配置有 PROXY,在创建之间建议重新设置一下环境变量:

1
2
export https_proxy=http://x.x.x.x:7890
export http_proxy=http://x.x.x.x:7890

本地代理通常设置为 http://127.0.0.1:7890,但 kind 访问不到,需要改成当前主机的 IP 地址 http://x.x.x.x:7890 。否则在部署应用时,会报错拉取不到镜像。

3.1 单节点

  • 创建单节点集群
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
kind create cluster --image=kindest/node:v1.23.6 --name=dev

Creating cluster "dev" ...
 ✓ Ensuring node image (kindest/node:v1.23.6) 🖼
 ✓ Preparing nodes 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
Set kubectl context to "kind-dev"
You can now use your cluster with:

kubectl cluster-info --context kind-dev

Have a nice day! 👋
  • 查看集群
1
2
3
4
kubectl get node

NAME                STATUS   ROLES                  AGE   VERSION
dev-control-plane   Ready    control-plane,master   71s   v1.23.6

3.2 多节点

  • 编辑配置文件 dev-multi-node.yaml
1
2
3
4
5
6
7
8
9
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    image: kindest/node:v1.23.6
  - role: worker
    image: kindest/node:v1.23.6
  - role: worker
    image: kindest/node:v1.23.6
  • 创建多节点集群
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
kind create cluster --config dev-multi-node.yaml --name=dev-multi-node

Creating cluster "dev-multi-node" ...
 ✓ Ensuring node image (kindest/node:v1.23.6) 🖼
 ✓ Preparing nodes 📦 📦 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
 ✓ Joining worker nodes 🚜
Set kubectl context to "kind-dev-multi-node"
You can now use your cluster with:

kubectl cluster-info --context kind-dev-multi-node

Thanks for using kind! 😊
  • 查看集群
1
2
3
4
5
6
kubectl get node

NAME                           STATUS   ROLES                  AGE     VERSION
dev-multi-node-control-plane   Ready    control-plane,master   2m45s   v1.23.6
dev-multi-node-worker          Ready    <none>                 2m23s   v1.23.6
dev-multi-node-worker2         Ready    <none>                 2m23s   v1.23.6

4. kind 集群生命周期管理

  • 查看集群
1
2
3
4
kind get clusters

dev
dev-multi-node
  • 切换集群

注意这里的 context 的 kind-{集群名} 的格式。

1
kubectl cluster-info --context kind-dev
  • 删除集群
1
kind delete cluster --name dev-multi-node

5. 端口映射到主机

1
2
3
4
5
6
7
8
9
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    extraPortMappings:
      - containerPort: 30000
        hostPort: 8000
        listenAddress: "0.0.0.0"
        protocol: tcp

在创建 kind 集群时,添加 extraPortMappings 参数,指定容器端口映射到主机端口。这里就是将 kind 集群的 30000 端口映射到本机 8000 端口。

6. 加载镜像到集群

1
kind load docker-image test:v1 --name dev

将本地构建的镜像,加载到 kind 集群中。

7. 配置网络

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  ipFamily: ipv4
  apiServerPort: -1
  apiServerAddress: 127.0.0.1
  podSubnet: "10.244.0.0/16"
  serviceSubnet: "10.96.0.0/16"
  disableDefaultCNI: false
  kubeProxyMode: "iptables"
  dnsSearch:
    - cluster.local

8. 配置运行时

1
2
3
4
5
6
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
containerdConfigPatches:
  - |-
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry-1.docker.io"]
      endpoint = ["https://docker.nju.edu.cn"]    

这里给 containerd 配置了国内的镜像仓库 mirror 。

9. 开启 FeatureGates

1
2
3
4
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
featureGates:
  "AdmissionWebhookMatchConditions": true

参考 https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/ 开启 FeatureGates 。

10 挂载主机目录到集群

1
2
3
4
5
6
7
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraMounts:
    - hostPath: /Users/shaowenchen/kind-host
        containerPath: /host

将主机的目录 /Users/shaowenchen/kind-host 挂载到 kind 集群指定节点的 /host

11. 参考


微信公众号