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.hqwc.cn/news/57271.html

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

相关文章

【ArcGIS Pro二次开发】(58):数据的本地化存储

在做村规工具的过程中&#xff0c;需要设置一些参数&#xff0c;比如说导图的DPI&#xff0c;需要导出的图名等等。 每次导图前都需要设置参数&#xff0c;虽然有默认值&#xff0c;但还是需要不时的修改。 在使用的过程中&#xff0c;可能会有一些常用的参数&#xff0c;希望…

将整数,结构体,结构体数组,链表写到文件

在之前的学习中&#xff0c;忘文件中写的内容都是字符串或字符&#xff0c;本节学习如何写入其他各种类型的数据。 回看write和read函数的形式&#xff1a; ssize_t write(int fd, const void *buf, size_t count); ssize_t read(int fd, void *buf, size_t count); 其中&a…

decimal类型在MySQL中的正确使用 (长度和小数点)

1. MySQL(decimal) 对应 Java(BigDecimal) 2. decimal(16,2) MySQL中类型的设置, 长度16, 保留2位小数 3. 如果长度小于14, 则会出现没小数位的情况

html 计算器界面

其他链接&#xff1a; https://www.freecodecamp.org/news/how-to-build-an-html-calculator-app-from-scratch-using-javascript-4454b8714b98/ https://codepen.io/pen/tour/welcome/start 下面展示一些 内联代码片。 <!DOCTYPE html> <html lang"en">…

Docker 快速安装 MinIO

概述 MinIO 是一款基于Go语言的高性能对象存储服务&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 拉取docker镜像 docker pull minio/minio创建宿主机数据目录&#xff08;共享数据卷&#xff09; 此…

Kotlin基础(十一):反射和注解

前言 本文主要讲解kotlin反射和注解。 Kotlin文章列表 Kotlin文章列表: 点击此处跳转查看 目录 1.1 kotlin反射 1.1.1 kotlin反射概念和常见使用场景 在Kotlin中&#xff0c;反射是一种能够在运行时动态地获取、检查和操作类、属性、方法等结构的能力。Kotlin为反射提供了一…

工业以太网交换机-SCALANCE X200 环网组态

1.概述 SCALANCE X200 系列交换机自从2004年8月推入市场&#xff0c;当时交换机只能接入环网&#xff0c;不能做环网管理器。在各个工业现场得到了广泛的应用。2007年5月发布了X200系列新的硬件版本平台&#xff0c;普通交换机可以用HSR&#xff08;高速冗余&#xff09;方法做…

p7付费课程笔记6:CMS GC

目录 前言 工作步骤 缺点 问题 前言 上一章节我们讲了串/并行GC&#xff0c;这一章节说下CMS GC。看前思考一个问题&#xff0c;并行GC与CMS GC的区别在哪里。 什么是CMS收集器 CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于…

【肺炎分类数据集】数据量非常充足的新冠肺炎分类数据共享

一、肺炎数据集介绍&#x1f349;&#xff1a; 1.1 格式&#x1f388; 按照标准的格式分为了①训练集train&#xff08;134138575198张&#xff09;&#xff0c;②验证集val&#xff08;8816张&#xff09;&#xff0c;③测试集test&#xff08;234390624张&#xff09;&#…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业 tbms

​ 功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查…

Qt5.14.2的安装教程

Qt5.14.2的安装教程 qt creator是qt桌面开发必备的软件&#xff0c;最近重新下载了一份&#xff0c;本文介绍一下Qt的安装过程。 找安装包 本文找到安装包&#xff0c;网址链接 qt5.14.2安装包官网&#xff1a; https://download.qt.io/archive/qt/5.14/5.14.2/ 这个官网下载速…

Mid journey V5.2 终极指南

MidJourney 是迄今为止最高质量的人工智能文本到图像生成器之一。我想你们中的大多数人都可以创建一些简单的提示&#xff0c;例如“留着胡子的男人”或“森林里的狼”&#xff0c;并能够在那里生成一些相当不错的图像......但是...... 如果你想用Midjourney创造出杰出的艺术&a…