K8S系列文章之 Kind 部署K8S的 服务发布

安装kind

下载  https://github.com/kubernetes-sigs/kind/releases/download/0.17.0/kind-linux-amd64

执行以下命令: 

mv kind-linux-amd64 /usr/local/bin/kind
chmod 777 /usr/local/bin/kind

之前需要先在本地主机安装好docker 

yum -y install yum-utils device-mapper-persistent-datalvm2yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum makecache fastyum install docker-ce docker-ce-cli containerd.iosystemctl start dockersystemctl enable dockerdocker run hello-world

安装kubectl

kubectl是Kubernetes的命令行工具,可以让我们通过命令访问、操作、管理Kubernetes集群。brew安装方法如下

# 安装 kubectl
curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectlmv kubectl   /usr/local/bin/kubectl

安装完毕后,查看kubectl版本信息,确认安装成功

# 查看kubectl版本信息
kubectl version --client

如下所示,kubectl安装成功

 

使用kind创建kubernetes集群

下面的命令将会创建一个带有默认选项的集群:

kind create cluster

输出内容如下所示:

 

如果我们想要通过kind

创建多个集群怎么办呢?其实kind

也考虑到了这种场景,通过在创建集群命令对的后面增加 name

参数指定集群的标识名就可以了。

kind create cluster --name multi-node

输出内容如下:

$ kind create cluster --name multi-node
Creating cluster "multi-node" ...✓ Ensuring node image (kindest/node:v1.24.0)  ✓ Preparing nodes      ✓ Writing configuration  ✓ Starting control-plane  ️✓ Installing CNI  ✓ Installing StorageClass  ✓ Joining worker nodes  
Set kubectl context to "kind-multi-node"
You can now use your cluster with:kubectl cluster-info --context kind-multi-nodeThanks for using kind!  

默认命令创建的集群名称是

kind

, 如果不指定标识没名称而使用默认命令再次创建,你将得到一个

ERROR

错误提示,大意是集群创建失败,原因名称为kind

的集群已经存在了。输出如下:

$ kind create cluster
ERROR: failed to create cluster: node(s) already exist for a cluster with the name "kind"

搭建单节点集群

一切准备就绪后,我们就可以通过Kind直接使用命令搭建一个K8s集群。此时其是一个单节点的K8s集群

# 创建一个名为 my-k8s-cluster-1 的K8s集群
kind create cluster --name my-k8s-cluster-1

这里补充说明下,在第一次通过Kind创建集群过程中。如果Docker本地没有node镜像会先需要拉取镜像,进而导致该命令执行阻塞时间较长。故此时我们先中止该命令执行,并通过上图红框确定当前使用node镜像信息为kindest/node:v1.24.0。然后利用docker pull命令先拉取该镜像到本地后,再利用Kind创建K8s集群

# 拉取 kindest/node:v1.24.0 的Docker镜像
docker pull kindest/node:v1.24.0

创建多节点的集群

就像你看到的一样,使用不带额外配置的创建集群命令创建出来的集群默认情况只是单节点的集群。如果我们使用如下的配置是可以创建出多节点集群的(你也可以增加不止一个控制面板来模拟高可用):

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

为了使配置生效,需要增加

--config

参数指定配置文件所在路径和名称:

kind create cluster --name multi-node --config=multi-node.yaml

如果现在检查集群中节点的数量,你将会看到如下内容:

$ kubectl get nodes
NAME                       STATUS   ROLES           AGE   VERSION
multi-node-control-plane   Ready    control-plane   73m   v1.24.0
multi-node-worker          Ready    <none>          72m   v1.24.0
multi-node-worker2         Ready    <none>          72m   v1.24.0

检测集群环境

现在你已经知道如何创建单节点和多节点的集群了,是时候测试我们的应用是如何工作的了。例如,如果我们想要使用Docker Hub仓库的镜像测试一个应用该如何做呢?

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: web-nginxname: web-nginx
spec:replicas: 3selector:matchLabels:app: web-nginxtemplate:metadata:labels:app: web-nginxspec:containers:- image: nginxname: nginxports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: web-nginx
spec:selector:app: web-nginxtype: NodePortports:- port: 80nodePort: 30080

我们需要创建一个带有额外参数的集群,目的是暴露我们可以在集群外部访问应用的端口,配置参数如下:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-planeextraPortMappings:- containerPort: 30080hostPort: 30070

以上配置是将主机端口

30070

映射到集群内容的

30080

端口,当我们访问

http://localhost:30070

时集群的控制面板会将请求转发到集群内容端口为 30080 的容器处理。

通过执行如下命令使端口映射生效:

kind create cluster --config=config-with-port-mapping.yaml

现在就可以使用

docker ps

命令查看容器暴露的端口和对应的映射关系了

$ docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED             STATUS                          PORTS                                                 NAMES
bfbc954b72cb   kindest/node:v1.24.0                "/usr/local/bin/entr…"   About an hour ago   Up About an hour                                                                      multi-node-worker
8dc51065e428   kindest/node:v1.24.0                "/usr/local/bin/entr…"   About an hour ago   Up About an hour                                                                      multi-node-worker2
36e801dafef8   kindest/node:v1.24.0                "/usr/local/bin/entr…"   About an hour ago   Up About an hour                127.0.0.1:62517->6443/tcp, 0.0.0.0:30070->30080/tcp   multi-node-control-plane

执行如下命令启动应用:

kubectl create -f nginx.yaml

现在你就可以通过

http://localhost:30070

访问你本地集群的服务了

部署K8s仪表盘Dashboard

根据下面的配置暴露31000端口,使用kind先创建一个集群 

 kind create cluster  --name my-k8s-cluster-1 --config=config-with-port-mapping.yaml

Kubernetes还提供了一个基于Web的可视化管理页面——Dashboard。通过下述链接下载部署Dashboard的配置文件,并重命名为dashboard.yaml

# 部署 Dashboard 配置文件
https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

然后编写一个名为service-account-secret.yaml的配置文件,用于创建服务账户、绑定角色实现授权。与此同时,由于K8s 1.24版本开始,创建服务账户时,不再自动生成包含Token的Secret对象。故我们也需要在该配置文件一并创建该服务账户的Secret。完整配置文件如下所示

# 在kubernetes-dashboard命名空间下创建名为 admin-user 的服务账户
apiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard---# 将服务账户admin-user绑定到内置的ClusterRole集群角色cluster-admin上, 实现授权
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard---# 对名为admin-user的服务账户手动创建Secret
apiVersion: v1
kind: Secret
metadata:name: admin-user-secretnamespace: kubernetes-dashboardannotations:kubernetes.io/service-account.name: admin-user
type: kubernetes.io/service-account-token

修改下 kubernetes-dashboard.yaml文件 暴露31000端口

确定一下确实暴露31000端口

 

 

 

准备好上述两个配置文件后,依次通过kubectl apply命令应用。命令如下所示

# 部署 Dashboard
kubectl apply -f kubernetes-dashboard.yaml# 创建服务账户并授权、创建Secret
kubectl apply -f service-account-secret.yaml

执行结果如下所示

 

 

 

我们通过service-account-secret.yaml配置文件,给kubernetes-dashboard命名空间下名为admin-user的服务账户手动创建了一个名为admin-user-secret的Secret。现在我们就可以通过该Secret获取相应的Token了。具体地,可以通过kubectl describe、kubectl get两种方式获取。但需要注意的是,前者显示是Token的原文,而后者则是对Token进行了Base64编码。此处我们需要拿到「Token的原文,故推荐前者」。无需进行Base64解码

# 该方式下 Token 为原文
kubectl describe secret admin-user-secret -n kubernetes-dashboard# 该方式下 Token 使用了Base64编码
kubectl get secret admin-user-secret -n kubernetes-dashboard -o yaml

命令结果如下所示

 

现在,我们在本地启动浏览器 访问

fhttps://192.168.59.143:31000/

至此,我们就可利用浏览器打开K8s Dashboard的页面地址了

打开后,选择Token认证方式,并填写我们刚刚获得的Token即可登录进入

 键盘 输入 thisisunsafe

 

DashBoard可视化效果如下所示

 

命令

Kind基本命令

「查看集群列表」

kind get clusters

 

「删除指定集群」

--name选项用于指定欲删除集群的名称

# 删除名为 my-k8s-cluster-2 的集群
kind delete cluster --name my-k8s-cluster-2

 

「删除所有集群」

--all用于指示删除所有集群

# 删除所有集群
kind delete clusters -–all

 

kubectl基本命令

「查看当前上下文」

kubectl用于操作、管理K8s集群。故当存在多个集群的时候,我们需要确定当前操作的是哪个集群。即所谓的Context上下文。具体地,通过下列命令实现

# 查看 当前上下文信息
kubectl config current-context

 

「查看上下文列表」

通过下述命令,可以查看全部的上下文列表

# 查看上下文列表、当前上下文信息
kubectl config get-contexts

效果如下所示。其中 CURRENT 列中标记为*星号的行,即为当前上下文。即正在操作的K8s集群;而NAME则表示上下文的名称

 

「切换上下文」

如果期望操作其他的集群。则只需将上下文切换到该集群的上下文即可

# 切换当前上下文
kubectl config use-context [上下文的名称]

效果如下所示

 

「重命名上下文名称」

同时还可以对上下文的名称进行重命名

# 将指定的上下文 修改为 新名称
kubectl config rename-context [上下文的原名称] [上下文的新名称]

效果如下所示

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/80701.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode Google代码风格设置无效解决

1. 采用第一个方法设置google代码设置风格 2. 安装了clangd后需要在格式化风格做选择 vscode 安装 clang-format插件 $ code /home/tony/.config/Code/User/settings.json 这就能解决google风格设置无效的问题了&#xff0c;原来根因在于使用的格式化插件没有生效导致&#xf…

MemFire教程|FastAPI+MemFire Cloud+LangChain开发ChatGPT应用-Part2

基本介绍 上篇文章我们讲解了使用FastAPIMemFire CloudLangChain进行GPT知识库开发的基本原理和关键路径的代码实现。目前完整的实现代码已经上传到了github&#xff0c;感兴趣的可以自己玩一下&#xff1a; https://github.com/MemFire-Cloud/memfirecloud-qa 目前代码主要…

VIM 编辑器: Bram Moolenaar

VIM 用了很长时间&#xff0c; 个人的 VIM 配置文件差不多10年没有更新了。以前写程序的时候&#xff0c; 编辑都用这个。 linux kernel&#xff0c; boost规模的代码都不在话下。现在虽然代码写的少了&#xff0c;依然是我打开文件的首选。 现在用手机了&#xff0c;配个蓝牙键…

UE中低延时播放RTSP监控视频解决方案

第1章 方案简介 1.1 行业痛点 在各种智慧城市、智慧社区、智慧水利、智慧矿山等数字孪生项目中&#xff0c;经常使用通UE来开发三维可视化场景。在这些场景中通常都需要把现场的各种监控视频在UE的可视化场景中接入&#xff0c;主要包含海康威视、大华、宇视、华为等众多监控…

腾讯云-宝塔添加MySQL数据库

1. 数据库菜单 2. 添加数据库 3. 数据库添加成功 4. 上传数据库文件 5. 导入数据库文件 6. 开启数据库权限 7. 添加安全组 (宝塔/腾讯云) 8. Navicat 连接成功

小白到运维工程师自学之路 第六十五集 (docker-compose)

一、概述 Docker Compose 的前身是 Fig&#xff0c;它是一个定义及运行多个 Docker 容器的工具。可以使用YAML文件来配置应用程序的服务。然后&#xff0c;使用单个命令&#xff0c;您可以创建并启动配置中的所有服务。Docker Compose 会通过解析容器间的依赖关系&#xff08;…

网络编程——深入理解TCP/IP协议——OSI模型和TCP/IP模型:构建网络通信的基石

TCP/IP协议— 一、简介 TCP/IP协议&#xff0c;即传输控制协议/互联网协议&#xff0c;是一组用于在计算机网络中实现通信的协议。它由两个主要的协议组成&#xff1a;TCP&#xff08;传输控制协议&#xff09;和IP&#xff08;互联网协议&#xff09;。TCP负责确保数据的可靠…

一、安全世界观

文章目录 1、 Web安全简史1.1 中国黑客简史1.2 黑客技术的发展历程1.3 web安全的兴起 2、黑帽子、白帽子3、安全的本质4、安全三要素5、如何实施安全评估5.1 资产等级划分5.2 威胁分析5.3 风险分析5.4 设计安全方案 6、白帽子兵法6.1 Secure By Default6.2 纵深防御原则6.3 数据…

iOS永久签名工具 - 轻松签使用教程

轻松签是一款IOS端免费的IPA签名和安装工具&#xff0c;最新版可以不用依赖证书对ipa永久签名&#xff0c;虽然现在用上了巨魔&#xff08;TrollStore&#xff09;- 是国外iOS开发人员opa334dev发布的一款工具&#xff0c;可以在不越狱的情况下&#xff0c;安装任何一款APP。 …

科大讯飞分类算法挑战赛2023的一些经验总结

引言: ResNet是he kaiming大佬的早年神作&#xff0c;当年直接刷榜各大图像分类任务。ResNet是一种残差网络&#xff0c;咱们可以把它理解为一个子网络&#xff0c;这个子网络经过堆叠可以构成一个很深的网络&#xff0c;而ResNext在其基础上&#xff0c;进行了一定修改完善&am…

【vim 学习系列文章 4 - vim与系统剪切板之间的交互】

文章目录 背景1.1.1 vim支持clipboard 检查1.1.2 vim的寄存器 上篇文章&#xff1a;【vim 学习系列文章 3 - vim 选中、删除、复制、修改引号或括号内的内容】 背景 从vim中拷贝些文字去其它地方粘贴&#xff0c;都需要用鼠标选中vim的文字后&#xff0c;Ctrlc、Ctrlv&#x…

集成学习:机器学习模型如何“博采众长”

前置概念 偏差 指模型的预测值与真实值之间的差异&#xff0c;它反映了模型的拟合能力。 方差 指模型在不同的训练集上产生的预测结果的差异&#xff0c;它反映了模型的稳定性。 方差和偏差对预测结果所造成的影响 在机器学习中&#xff0c;我们通常希望模型的偏差和方差都…

c++11 标准模板(STL)(std::basic_fstream)(一)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_fstream : public std::basic_iostream<CharT, Traits> 类模板 basic_fstream 实现基于文件的流上的高层输入/输出。它将 std::basic_i…

2023牛客暑期多校训练营6 A-Tree (kruskal重构树))

文章目录 题目大意题解参考代码 题目大意 ( 0 ≤ a i ≤ 1 ) , ( 1 ≤ c o s t i ≤ 1 0 9 ) (0\leq a_i\leq 1),(1 \leq cost_i\leq 10^9) (0≤ai​≤1),(1≤costi​≤109) 题解 提供一种新的算法&#xff0c;kruskal重构树。 该算法重新构树&#xff0c;按边权排序每一条边…

【IMX6ULL驱动开发学习】01.IMX6ULL驱动开发_编写第一个hello驱动(不涉及硬件操作)

目录 一、驱动程序编写流程 二、代码编写 2.1 驱动程序hello_drv.c 2.2 测试程序 2.3 编写驱动程序的Makefile 三、上机实验 3.1 NFS 挂载 3.2 测试示例 一、驱动程序编写流程 构造file_operations结构体 在里面填充open/read/write/ioctl成员 注册file_operations结…

使用IDEA操作Mysql数据库

idea中自带了关于数据库的连接 首先要确保你的MySQL正在运行中 打开idea找到database&#xff08; view —> Tool Windows —> database&#xff09;&#xff0c;大家也可以定个快捷键&#xff0c;方便以后日常操作 就是这个样子&#xff0c;然后点加号 然后就可以编写执…

HCIA---TCP/UDP协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 文章目录 一.UDP协议简介 UDP协议的特点&#xff1a; 二.TCP协议简介 TCP协议特点 三.TCP和UDP的区别 四.TCP/IP结构详解 五.TCP运输连接的阶段 ​编…

删除这4个文件夹,流畅使用手机无忧

在现代社会中&#xff0c;手机已经成为我们生活中不可或缺的一部分。然而&#xff0c;随着使用时间的增长&#xff0c;我们可能会遇到手机卡顿和内存不足的问题&#xff0c;让我们感到十分困扰。手机卡顿不仅影响使用体验&#xff0c;还可能导致应用程序运行缓慢&#xff0c;甚…

ChatGPT已闯入学术界,Elsevier推出AI工具

2022年11月&#xff0c;OpenAI公司发布了ChatGPT&#xff0c;这是迄今为止人工智能在现实世界中最重要的应用之一。 当前&#xff0c;互联网搜索引擎中出现了越来越多的人工智能&#xff08;AI&#xff09;聊天机器人&#xff0c;例如谷歌的Bard和微软的Bing&#xff0c;看起来…

war和war exploded

war和war exploded的区别 war模式&#xff1a;将WEB工程以包的形式上传到服务器 &#xff1b; war exploded模式&#xff1a;将WEB工程以当前文件夹的位置关系上传到服务器&#xff1b;>> war包是自己打包生成的&#xff0c;如pom文件中<packaging>war</packag…