Kind方式部署k8s单节点集群并创建nginx服务对外访问
资源要求
请准备好doker环境,尽量用比较新的版本。我的docker环境如下
docker 环境: Docker version 20.10.21, build 20.10.21-0ubuntu1~18.04.3
安装kind
kind表现上就是一个二进制程序,下载对应版本并增加执行权限即可:
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
chmod +x ./kind
mv ./kind /usr/bin/kind
kind version
如何通过kind新建k8s集群?
kubectl是与k8s交互的客户端命令工具,因此需要先安装此工具。
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
使用config文件创建k8s集群
extraPortMappings:把K8s容器(相当于K8s所在的服务器)端口暴露出来,这里暴露了30000-30005,可以理解为把docker部署的k8s集群中的服务,通过docker服务将端口映射出来给到宿主机可以访问。
kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:- role: control-planeextraPortMappings:- containerPort: 30000hostPort: 30000protocol: TCP- containerPort: 30001hostPort: 30001protocol: TCP- containerPort: 30002hostPort: 30002protocol: TCP- containerPort: 30003hostPort: 30003protocol: TCP- containerPort: 30004hostPort: 30004protocol: TCP- containerPort: 30005hostPort: 30005protocol: TCP
使用以下命令来创建集群
kind create cluster --name myk8s-01 --config kind-config.yaml
To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:kubeadm join myk8s-01-control-plane:6443 --token <value withheld> \--discovery-token-ca-cert-hash sha256:fc1aad44ac2b0d95ce17a0ed081a336768da10492f8091aeaf6ebfa060a55cf0 \--control-planeThen you can join any number of worker nodes by running the following on each as root:kubeadm join myk8s-01-control-plane:6443 --token <value withheld> \--discovery-token-ca-cert-hash sha256:fc1aad44ac2b0d95ce17a0ed081a336768da10492f8091aeaf6ebfa060a55cf0✓ Starting control-plane 🕹️✓ Installing CNI 🔌✓ Installing StorageClass 💾
Set kubectl context to "kind-myk8s-01"
You can now use your cluster with:kubectl cluster-info --context kind-myk8s-01Thanks for using kind! 😊
root@raypick:/home/raypick/k8s_resource/helen# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b1f30ea4d28 kindest/node:v1.21.1 "/usr/local/bin/entr…" 25 minutes ago Up 25 minutes 0.0.0.0:30000-30005->30000-30005/tcp, 127.0.0.1:41957->6443/tcp myk8s-01-control-plane
root@raypick:/home/raypick/k8s_resource/helen#
创建完成后正常会在宿主机的目录下生成这个文件,/etc/kubernetes/admin.conf,如果没有的话,docker cp,将容器集群中的
/etc/kubernetes/admin.conf文件拷贝出来到宿主机的/etc/kubernetes目录下即可,但是记住拷贝的话需要修改修改其中的server为127.0.0.1,默认是docker网段中的ip地址
执行以下命令,将k8s集群配置加载进环境变量中,之后即可开始后续的内容操作
export KUBECONFIG=/etc/kubernetes/admin.conf
创建资源进行测试
namespace.yaml
apiVersion: v1
kind: Namespace
metadata:name: helen
serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: sa-helennamespace: helen
role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: role-helennamespace: helen
rules:
- apiGroups: [""]resources:- pods- pods/exec- pods/log- services- endpoints- configmaps- secrets- persistentvolumeclaims- serviceaccountsverbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["apps"]resources:- deployments- replicasets- statefulsets- daemonsetsverbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["batch"]resources:- jobs- cronjobsverbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: helen-sa-role-bindingnamespace: helen
subjects:
- kind: ServiceAccountname: sa-helennamespace: helen
roleRef:kind: Rolename: role-helenapiGroup: rbac.authorization.k8s.io
secret-helen.yaml
apiVersion: v1
kind: Secret
metadata:name: helen-secretnamespace: helen
type: Opaque
stringData:MYSQL_PASSWORD: mysql_passSFTP_PASSWORD: sftp_pass
nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentnamespace: helen
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:serviceAccountName: sa-helencontainers:- name: nginximage: nginxports:- containerPort: 80env:- name: MYSQL_PASSWORDvalueFrom:secretKeyRef:name: helen-secretkey: MYSQL_PASSWORD- name: SFTP_PASSWORDvalueFrom:secretKeyRef:name: helen-secretkey: SFTP_PASSWORD
service.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: helen
spec:type: NodePortselector:app: nginxports:- protocol: TCPport: 80targetPort: 80nodePort: 30000 # 你也可以不指定,由系统自动分配
上面的文件依次apply后,即可将nginx服务启动,并通过宿主机ip:30000/进行访问nginx服务。这里的192.168.56.103是我虚拟机的ip
http://192.168.56.103:30000/
使用 ServiceAccount 模拟 kubectl 操作
🔧 步骤 1:获取该 ServiceAccount 的 Token
SECRET_NAME=$(kubectl get sa sa-helen -n helen -o jsonpath='{.secrets[0].name}')kubectl get secret $SECRET_NAME -n helen -o jsonpath='{.data.token}' | base64 -d > /tmp/sa-helen.token
📜 步骤 2:获取当前集群的 CA 和 API Server 地址
# 获取 CA
kubectl get secret $SECRET_NAME -n helen -o jsonpath='{.data.ca\.crt}' | base64 -d > /tmp/ca.crt# 获取 API Server 地址
APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
🧪 步骤 3:生成一个 kubeconfig 文件
cat <<EOF > /tmp/kubeconfig-sa-helen
apiVersion: v1
kind: Config
clusters:
- cluster:certificate-authority: /tmp/ca.crtserver: ${APISERVER}name: kind-cluster
contexts:
- context:cluster: kind-clusteruser: sa-helennamespace: helenname: sa-helen-context
current-context: sa-helen-context
users:
- name: sa-helenuser:token: $(cat /tmp/sa-helen.token)
EOF
✅ 步骤 4:使用这个 kubeconfig 来运行 kubectl
KUBECONFIG=/tmp/kubeconfig-sa-helen kubectl get pods
KUBECONFIG=/tmp/kubeconfig-sa-helen kubectl get secrets或者export KUBECONFIG=/tmp/kubeconfig-sa-helen
如果role-helen 中没有对某资源的权限授权,这时候命令会失败,提示 forbidden。
相关文章:

Kind方式部署k8s单节点集群并创建nginx服务对外访问
资源要求 请准备好doker环境,尽量用比较新的版本。我的docker环境如下 docker 环境: Docker version 20.10.21, build 20.10.21-0ubuntu1~18.04.3 安装kind kind表现上就是一个二进制程序,下载对应版本并增加执行权限即可: cu…...

K个一组链表翻转
目录 1. 题意 2. 解题思路 3. 代码 1. 题意 给一个链表,按 k 进行翻转,也就是 k 2 ,两两进行翻转,如果不够2则不动。 2. 解题思路 首先思考怎么翻转一个链表,反转链表:https://leetcode.cn/problems…...

Python60日基础学习打卡D32
我们已经掌握了相当多的机器学习和python基础知识,现在面对一个全新的官方库,看看是否可以借助官方文档的写法了解其如何使用。 我们以pdpbox这个机器学习解释性库来介绍如何使用官方文档。 大多数 Python 库都会有官方文档,里面包含了函数…...

面向恶劣条件的道路交通目标检测----大创自用(当然你也可以在里面学到很多东西)
全部内容梳理 目标检测的两个任务: 预测标签 边界框 语义分割 实力分割 一个是类别 一个是实例级别 分类任务把每个图像当作一张图片看待 所有解决方法是先生成候选区域 再进行分类 置信度: 包括对类别和边界框预测的自信程度 输出分类和IOU分数的…...

基于Java(SSM)+MySQL实现(Web)具有智能推荐功能的图书销售系统
具有智能推荐功能的图书销售系统 1.绪论 1.1 背景、目的、意义 随着互联网的不断发展,电子商务逐渐代替传统的交易方式。各种类型的电子商务网站层出不穷,但细分之下电子商务网站主要分为 B2B,B2C,C2B,C2C 这四大类…...

浙大团队研发Earth Explorer系统,探索深时演化/地学剖面/科研场景,赋能深时地球科学研究
深时地球科学研究聚焦地球的漫长历史,探寻从数十亿年前到如今的地质演化过程,研究范畴广泛,涵盖了地球内部结构、物质组成、生命演化,以及地球与外部环境的相互作用等关键领域。近年来,地学可视化分析方法对多维时空交…...
docker 启动一个python环境的项目
安装镜像 docker pull python:3.8-slim8902端口 启动容器 tail -f /dev/null 持续监听空文件,保持容器活跃 docker run -it \-p 8902:8902 \--name api_mock2 \-v /home/py/test:/app \-w /app \python:3.8-slim \tail -f /dev/null进入容器 docker exec -it api…...

31-35【动手学深度学习】深度学习硬件
1. CPU和GPU 1.1 CPU CPU每秒钟计算的浮点运算数为0.15,GPU为12。GPU的显存很低,16GB(可能32G封顶),CPU可以一直插内存。 左边是GPU(只能做些很简单的游戏,视频处理),中…...
Linux问题排查-内存使用率高如何分析原因
以下是针对 Linux 系统内存使用率高的分步排查方法,结合用户进程占用、tmpfs 内存占用、内核内存泄漏和黑洞内存等特殊情况进行分析: 第一步:初步观察系统整体内存使用情况 1. 查看系统内存概况 命令:free -h 或 cat /proc/mem…...

SpringMVC2
一、springmvc 接收请求 类上、方法上 RequestMapping GetMapping PostMapping package com.hl.springmvc02.web; import jdk.nashorn.internal.objects.annotations.Getter; import org.springframework.web.bind.annotation.*; RestController RequestMapping(&qu…...

【每日一题丨2025年5.12~5.18】排序相关题
个人主页:Guiat 归属专栏:每日一题 文章目录 1. 【5.12】P1068 [NOIP 2009 普及组] 分数线划定2. 【5.13】P5143 攀爬者3. 【5.14】P12366 [蓝桥杯 2022 省 Python B] 数位排序4. 【5.15】P10901 [蓝桥杯 2024 省 C] 封闭图形个数5.【5.16】P12165 [蓝桥…...
ElasticSearch性能优化
ES基础概念介绍: 索引:类似于MySQL中的表,它是具有相同特征的一个数据集。文档:格式为JSON格式,类似于MySQL中的一条数据,它是数据存储的基本数据单元,每一条文档都有一个唯一的ID。查询&#x…...

Typora + PicGo + GitHub 配置图床——图片自动上传 详细教程
文章目录 一、创建 GitHub 仓库二、添加私人令牌三、下载 PicGo四、配置 PicGo五、测试 一、创建 GitHub 仓库 进入 Github 官网 注册一个属于自己的账号,点击创建仓库。 2. 创建自己的新仓库。仓库设置为公开,方便上传图片(你设置私有也可以…...

QT+Visual Studio 配置开发环境教程
一、QT架构 Qt Creator 是一个轻量级、跨平台的 IDE,专为 Qt 开发量身打造,内置对 qmake/CMake 的深度支持、Kits 配置管理、原生 QML 调试器以及较低的资源占用维基百科。 而在 Windows 环境下,Visual Studio 配合 Qt VS Tools 扩展则可将 Q…...

缺乏经验的 PCB 过孔建模方法
您是一名背板设计人员,被指派设计一种新的高速、多千兆位串行链路架构,从多个线卡到背板上的多个交换矩阵交换卡。这些链路必须在第一天以 6GB/s 的速度运行,并且为 10GB/s (IEEE 802.3KR) 做好产品演进的准备。时间表很紧,您需要提出一个背板架构,以允许程序的其余部分…...
layui 介绍
layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。其风格简约轻盈,而组件优雅丰盈,从源代码到使用…...
【漫话机器学习系列】265.普拉托变换的相关问题(Issues With Platt Scaling)
Platt Scaling 的相关问题详解 | 模型校准中的隐患分析 在机器学习模型中,模型预测的“置信度”并不一定等于真实的概率。为了提高模型预测结果的可解释性和实用性,我们通常会使用一种后处理的概率校准方法——Platt Scaling(普拉托变换&…...

【Linux高级全栈开发】2.2.1 Linux服务器百万并发实现2.2.2 Posix API与网络协议栈
【Linux高级全栈开发】2.2.1 Linux服务器百万并发实现2.2.2 Posix API与网络协议栈 高性能网络学习目录 基础内容(两周完成): 2.1网络编程 2.1.1多路复用select/poll/epoll2.1.2事件驱动reactor2.1.3http服务器的实现 2.2网络原理 百万并发…...

LlamaIndex
1、大语言模型开发框架的价值是什么? SDK:Software Development Kit,它是一组软件工具和资源的集合,旨在帮助开发者创建、测试、部署和维护应用程序或软件。 所有开发框架(SDK)的核心价值,都是降低开发、维护成本。 大语言模型开发框架的价值,是让开发者可以更方便地…...

springboot使用xdoc-report包导出word
背景:项目需要使用xdoc-report.jar根据设置好的word模版,自动填入数据 导出word 框架使用 我的需求是我做一个模板然后往里面填充内容就导出我想要的word文件,问了下chatgpt还有百度,最后选用了xdocreport这个框架,主…...
leetcode 3356. 零数组变换 II 中等
给定一个长度为 n 的整数数组 nums 和一个二维数组 queries,其中 queries[i] [li, ri]。 对于每个查询 queries[i]: 在 nums 的下标范围 [li, ri] 内选择一个下标 子集。将选中的每个下标对应的元素值减 1。 零数组 是指所有元素都等于 0 的数组。 …...

重拾GMP
目录 GMP总结 线程协程三家对比GMP调度模型 mgp过一遍流程 g 一个G的生命周期 mpschedt全局队列g0视角看看G的调度流程 四大调度类型 主动调度被动调度正常调度抢占调度 宏观的调度流程上面流程的具体细节 schedule()findRunnable()execute()gosched_m()park_m()与ready()goe…...

实验分享|基于千眼狼sCMOS科学相机的流式细胞仪细胞核成像实验
实验背景 流式细胞仪与微流控技术,为细胞及细胞核成像提供新的路径。传统流式细胞仪在细胞核成像检测方面存在检测通量低,荧光信号微弱等局限,故某光学重点实验室开发一种基于高灵敏度sCMOS科学相机并集成在自组荧光显微镜的微流控细胞核成像…...
C++学习:六个月从基础到就业——C++11/14:其他语言特性
C学习:六个月从基础到就业——C11/14:其他语言特性 本文是我C学习之旅系列的第四十四篇技术文章,也是第三阶段"现代C特性"的第六篇,主要介绍C11/14中引入的其他重要语言特性。查看完整系列目录了解更多内容。 引言 在前…...

【Linux笔记】——线程池项目与线程安全单例模式
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹: 【Linux笔记】——简单实习一个日志项目 🔖流水不争,争的是滔滔不息 一、线程池设计二…...
数据驱动的社会舆情监测与分析——用算法洞察世界脉动
数据驱动的社会舆情监测与分析——用算法洞察世界脉动 在信息爆炸的时代,社会舆情的变化可以在极短时间内产生深远影响。从企业品牌到公共政策,社交媒体和新闻平台上的讨论能够直接影响决策者的策略制定。因此,数据驱动的舆情监测与分析 逐渐成为政府、企业以及社会机构的重…...
OD 算法题 B卷 【最佳植树距离】
文章目录 最佳植树距离 最佳植树距离 在直线的公路上种树,给定坑位数量和位置,及需要种多少棵树苗;树苗之间的最小距离是多少时,可以保证种的最均匀(树苗之间的最小距离最大); 输入描述&#…...

ZooKeeper 原理解析及优劣比较
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 引言 在分布式系统中,服务注册、配置管理、分布式锁、选举等场景都需要一个高可用、一致性强的协调服务。Apache ZooKeeper 凭…...
实战5:个性化数字艺术生成与销售
盈利思路 数字艺术销售: 平台销售:将生成的数字艺术作品上传到像OpenSea、Foundation等NFT平台进行售卖。每一件独特的艺术品可以通过NFT技术保证其唯一性,吸引收藏家和投资者。 定价策略:根据作品的复杂度、创意性以及市场需求来…...

是德科技 | 单通道448G未来之路:PAM4? PAM6? PAM8?
内容来源:是德科技 随着数据中心规模的不断扩大以及AI大模型等技术的兴起,市场对高速、大容量数据传输的需求日益增长。例如,AI训练集群中GPU等设备之间的互联需要更高的传输速率来提升效率。在技术升级方面,SerDes技术的不断进步…...