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

news2024/11/25 11:29:41

安装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-datalvm2


yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


yum makecache fast


yum install docker-ce docker-ce-cli containerd.io

systemctl start docker

systemctl enable docker

docker 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/kubectl

mv 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-node

Thanks 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-nginx
  name: web-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-nginx
  template:
    metadata:
      labels:
        app: web-nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: web-nginx
spec:
  selector:
    app: web-nginx
  type: NodePort
  ports:
    - port: 80
      nodePort: 30080

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

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30080
    hostPort: 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-user
  namespace: kubernetes-dashboard

---

# 将服务账户admin-user绑定到内置的ClusterRole集群角色cluster-admin上, 实现授权
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

---

# 对名为admin-user的服务账户手动创建Secret
apiVersion: v1
kind: Secret
metadata:
  name: admin-user-secret
  namespace: kubernetes-dashboard
  annotations:
    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.coloradmin.cn/o/845123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

门面模式(C++)

定义 为子系统中的一组接口提供一个一致(稳定) 的界面&#xff0c;Facade模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用(复用)。 应用场景 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合&#xff0c;随着外部客户程序和各子…

无锚框原理 TOOD:Task-aligned One-stage Object Detection

无锚框原理 TOOD&#xff1a;Task-aligned One-stage Object Detection 一 摘要二 引言TOOD设计 三 具体设计Task-aligned Head任务对齐的预测器 TAP预测对齐 TAL 任务对齐学习Task-aligned Sample Assignment多任务损失 一 摘要 一阶段目标检测通常通过优化两个子任务来实现&…

计算机毕业设计题目大全(论文+源码)_kaic

图书信息管理系统的设计与实现(论文源码)_kaic 基于Spring Boot的学院宿舍管理系统的设计与实现(论文源码)_kaic 在线考试系统设计与实现(论文源码)_kaic 基于javaee的就业管理系统设计与实现(论文源码)_kaic 基于VUE和SpringBoot的微信小程序商城的设计与实现(论文源码)_kaic …

iOS - 开发者账号续订会员资格更换订阅的账号

文章目录 前言开发环境续订会员资格转让账户持有人验证身份1. 实名认证2. 联系信息 更换订阅的账号最后 前言 公司有一个开发者账号快到期了需要续订会员资格&#xff0c;刚注册时是用我自己的个人账号完成的订阅购买。现在想来有点不妥&#xff0c;于是尝试更换用于订阅的账号…

STM32 CubeMX USB_MSC(存储设备U盘)

STM32 CubeMX STM32 CubeMX USB_MSC(存储设备U盘&#xff09; STM32 CubeMX前言 《使用内部Flash》——U盘一、STM32 CubeMX 设置USB时钟设置USB使能UBS功能选择FATFS功能 二、代码部分修改代码"usbd_storage_if.c"修改代码"user_diskio.c"main函数初始化插…

CVE-2022-23134(Zabbix setup 访问控制登录绕过)

目录 一、题目 二、进入题目 一、题目 靶标介绍&#xff1a; Zabbix Sia Zabbix是拉脱维亚Zabbix SIA&#xff08;Zabbix Sia&#xff09;公司的一套开源的监控系统。该系统支持网络监控、服务器监控、云监控和应用监控等。 Zabbix 存在安全漏洞&#xff0c;该漏洞源于在初始…

【VSCode】报错:出现段错误解决办法 (Segmentation fault)

VScode报错&#xff1a;Segmentation fault (core dumped)的解决办法 解决Program received signal SIGSEGV, Segmentation fault.的辛酸 Linux环境下段错误的产生原因及调试方法小结 Linux下的段错误Segmentationfault产生的原因及调试方法经典.pdf 解决办法&#xff1a;

C高级第四讲

1、思维导图 2、写一个shell函数&#xff0c;获取用户的uid和gid并使用变量接收 #!/bin/bash function get_id() {uidid -u ubuntugidid -g ubuntu } get_id echo "uid:$uid" echo "gid:$gid"运行结果 3、排序 冒泡排序 /* ------------------------…

【MongoDB】初识、安装MongoDB

目录 一、MongoDB主要应用场景 二、MongoDB简介 三、MongoDB相关特点 四、MongoDB的安装 一、MongoDB主要应用场景 传统的数据库如MySQL在应对三高场景时显得力不从心 三高&#xff1a; High performance 对数据库高并发读写的需求 High Storage 对海量数据的高效率存储和 …

hacksudo3 通关详解

环境配置 一开始桥接错网卡了 搞了半天 改回来就行了 信息收集 漏洞发现 扫个目录 大概看了一眼没什么有用的信息 然后对着login.php跑了一下弱口令 sqlmap 都没跑出来 那么利用点应该不在这 考虑到之前有过dirsearch字典太小扫不到东西的经历 换个gobuster扫一下 先看看g…

全面的可见性是有效检测和响应威胁的基础

当今的企业比以往任何时候都更加依赖技术&#xff0c;因此强大的威胁检测和响应策略至关重要。现代世界中的网络犯罪分子一直在寻找新的创造性方法来入侵组织网络并窃取敏感数据。全面的可见性是一个关键因素&#xff0c;有时很少受到关注&#xff0c;但它是有效威胁检测和响应…

24届近5年江南大学自动化考研院校分析

今天给大家带来的是江南大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、江南大学 学校简介 江南大学&#xff08;Jiangnan University&#xff09;是国家“双一流”建设高校&#xff0c;“211工程”、“985工程优势学科创新平台”重点建设高校&#xff0c;入选…

Xcode升级导致关联库报错

想办法找到对应的库 然后到 Build Phases -- LinkBinary With Libraries中点击&#xff0c;选择对应的framework即可&#xff0c;就像我工程的报错 Undefined symbol: _OBJC_CLASS_$_ADClient _OBJC_CLASS_$_ASIdentifierManager 缺失的库是AdSupport.framework 添加后再次编…

基于 eclipse-temurin 镜像部署spring boot 应用

基于 eclipse-temurin 镜像部署spring boot 应用 使用场景示例项目 使用场景 在CI流程中&#xff0c;一般都会集成 打包&#xff0c;构建镜像&#xff0c;分发&#xff0c;启动容器之类的流程&#xff1b; 这里提供一个示例&#xff0c;进攻参考 示例项目 项目结构如下 run…

【软件工程】5 ATM系统测试

目录 5 ATM系统测试 5.1 单元测试 5.1.1 制定单元测试计划 5.1.2 设计单元测试用例 ​编辑 5.1.3 执行单元测试 5.1.4 单元测试报告 5.2 集成测试 5.2.1 制定集成测试计划 5.2.2 设计集成测试用例 5.2.3 执行集成测试 5.2.4 集成测试总结 5.3 系统测试 5.3.1 制定…

【C++从0到王者】第十六站:stack和queue的使用

文章目录 一、stack的使用1.stack的介绍2.stack的使用 二、queue的使用1.queue的护额晒2.queue的使用 三、stack和queue相关算法题1.最小栈2.栈的压入、弹出序列3.逆波兰表达式4.两个栈实现一个队列5.用两个队列实现栈6.二叉树的层序遍历1.双队列2.用一个变量levelSize去控制 7…

解决 “fatal: Could not read from remote repository.

问题描述&#xff1a; 在使用Git将本地仓库推送到远程仓库或将远程仓库克隆到本地的时候&#xff0c;发生了如下错误&#xff1a;“fatal: Could not read from remote repository.” 原因分析&#xff1a; 出现这错误一般是以下两种原因&#xff1a; 客户端与服务端未生成 …

详解Kafka分区机制原理|Kafka 系列 二

Kafka 系列第二篇&#xff0c;详解分区机制原理。为了不错过更新&#xff0c;请大家将本号“设为星标”。 点击上方“后端开发技术”&#xff0c;选择“设为星标” &#xff0c;优质资源及时送达 上一篇文章介绍了 Kafka 的基本概念和术语&#xff0c;里面有个概念是 分区(Part…

音视频技术开发周刊 | 305

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 大神回归学界&#xff1a;何恺明宣布加入 MIT 「作为一位 FAIR 研究科学家&#xff0c;我将于 2024 年加入麻省理工学院&#xff08;MIT&#xff09;电气工程与计算机科学…

LeetCode 130. 被围绕的区域

题目链接&#xff1a;130. 被围绕的区域 题目描述 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 ‘X’ 和 ‘O’ &#xff0c;找到所有被 ‘X’ 围绕的区域&#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例1&#xff1a; 输入&#xff1a;board [[“…