k8s 部署ETCD ,并且使用.net core 连接获取配置

  1. 创建namespace
sudo kubectl create namespace compose
  1. 部署ETCD
apiVersion: apps/v1
kind: StatefulSet
metadata:name: etcdnamespace: composelabels:app: etcd
spec:serviceName: etcdreplicas: 1selector:matchLabels:app: etcdtemplate:metadata:labels:app: etcdspec:containers:- name: etcdimage: quay.io/coreos/etcd:v3.4.15ports:- containerPort: 2379- containerPort: 2380command:- /usr/local/bin/etcd- --data-dir=/var/lib/etcd- --name=$(POD_NAME)- --listen-peer-urls=http://0.0.0.0:2380- --listen-client-urls=http://0.0.0.0:2379- --advertise-client-urls=http://$(POD_IP):2379- --initial-advertise-peer-urls=http://$(POD_IP):2380- --initial-cluster=$(POD_NAME)=http://$(POD_IP):2380- --initial-cluster-token=etcd-cluster- --initial-cluster-state=newenv:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIPvolumeMounts:- name: etcd-datamountPath: /var/lib/etcdvolumeClaimTemplates:- metadata:name: etcd-dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:name: etcdnamespace: compose
spec:type: NodePortports:- port: 2379name: a-nametargetPort: 2379nodePort: 30379- port: 2380name: b-nametargetPort: 2380nodePort: 30380selector:app: etcd
  1. 进入pod添加root用户
# 使用 etcdctl 创建 root 用户
etcdctl user add root
# 系统会提示输入密码# 创建一个管理员角色
etcdctl role add root# 为 root 角色赋予读写权限
etcdctl role grant-permission root readwrite /# 将 root 用户赋予 root 角色
etcdctl user grant-role root root# 启用 etcd 的认证功能
etcdctl auth enable
  1. 创建普通用户
etcdctl user add user1
# 创建一个自定义角色
etcdctl role add readwrite# 为该角色赋予读写权限,仅对指定路径(如 `/config/`)
etcdctl role grant-permission readwrite readwrite /config/# 将用户赋予这个角色
etcdctl user grant-role user1 readwrite# 以 user1 用户的身份操作 etcd
etcdctl --user=user1:password get /config/appsetting
  1. yaml 启用认证
command:- etcd- --auth-token=simple
  1. 安装dotnet-etcd
> dotnet-etcd                 7.1.1   7.1.1
  1. 声明帮助类
using dotnet_etcd;
using Etcdserverpb;
using Google.Protobuf;
using Grpc.Core;namespace coreETCD
{public class ETCDHelper{private readonly EtcdClient etcdClient;private AuthenticateResponse authenticateResponse;public ETCDHelper(){etcdClient = new EtcdClient("http://192.168.214.133:30379", configureChannelOptions: (options =>{options.Credentials = ChannelCredentials.Insecure;}));authenticateResponse = etcdClient.Authenticate(new Etcdserverpb.AuthenticateRequest(){Name = "ellis",Password = "ellis",});}public async Task<PutResponse> PutConfig(string key, string value){return await etcdClient.PutAsync(key, value, new Grpc.Core.Metadata() {new Grpc.Core.Metadata.Entry("token",authenticateResponse.Token)});}public async Task<string> GetConfig(string key){return await etcdClient.GetValAsync(key, new Grpc.Core.Metadata() {new Grpc.Core.Metadata.Entry("token",authenticateResponse.Token)});}public async Task<Dictionary<string,string>> GetRange(string key){RangeResponse result =  await etcdClient.GetRangeAsync(key, new Grpc.Core.Metadata() {new Grpc.Core.Metadata.Entry("token",authenticateResponse.Token)});Dictionary<string, string> dict = new Dictionary<string, string>();// 遍历并输出键值对foreach (var kv in result.Kvs){dict.Add(kv.Key.ToStringUtf8(), kv.Value.ToStringUtf8());}return dict;}public async Task<DeleteRangeResponse> DeleteKey(string key){return await etcdClient.DeleteAsync(key, new Grpc.Core.Metadata() {new Grpc.Core.Metadata.Entry("token",authenticateResponse.Token)});}}
}
  1. DI
builder.Services.AddScoped<ETCDHelper>();
  1. controller
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;namespace coreETCD.Controllers
{[Route("api/[controller]/[action]")][ApiController]public class ETCDController : ControllerBase{private readonly ETCDHelper _etcdHelper;public ETCDController(ETCDHelper etcdHelper){_etcdHelper = etcdHelper;}[HttpGet]public async Task<IActionResult> GetValue([FromQuery] string key){var value = _etcdHelper.GetConfig(key).Result;return Ok(value);}[HttpGet]public async Task<IActionResult> GetRangeValue([FromQuery] string key){var value = _etcdHelper.GetRange(key).Result;return Ok(value);}[HttpGet]public async Task<IActionResult> PutValue([FromQuery] string key,[FromQuery] string value){var result = _etcdHelper.PutConfig(key,value).Result;return Ok(result);}[HttpDelete]public async Task<IActionResult> DeleteKey([FromQuery] string key){var result = _etcdHelper.DeleteKey(key).Result;return Ok(result);}}
}
  1. 罗列etcd已经存储的配置
etcdctl --user=username:password get "" --prefix --keys-only

参考

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

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

相关文章

git add成功后忘记commit的文件丢了?

本文目标&#xff1a;开发人员&#xff0c;在了解git fsck命令用法的条件下&#xff0c;进行git add成功但由于误操作导致丢失的文件找回&#xff0c;达到找回丢失文件的程度。 文章目录 1 痛点2 解决方案3 总结/练习 1 痛点 开发过程中&#xff0c;分支太多&#xff08;基线分…

CREO教程——2 绘制标准图纸

CREO教程——2 绘制标准图纸 说明&#xff1a;继承第一章设置好的配置文件&#xff0c;这一章进行学习分享如何定制自己的图纸图框&#xff0c;参考国家标准距&#xff0c;定制属于设计师或单位的通用图框。 1.设置工作目录 1.1设置工作目录 1.打开软件设置工作目录&#x…

u盘格式化怎么恢复数据?四款工具来救急!

工作中真的没少碰到过那些让人头疼的数据丢失问题&#xff0c;特别是U盘里的宝贝数据一不小心就“蒸发”了&#xff0c;简直让人欲哭无泪。不过别担心&#xff0c;我作为一个数据恢复的新手小白&#xff0c;最近可是亲测了几款超给力的数据恢复软件&#xff0c;今天就来跟大家分…

19c-TNS-12541: TNS:no listener

有套19c单机&#xff0c;没应用任何的补丁&#xff0c;使用lsnrctl status查看监听是异常的&#xff0c;但是lsnrctl start发现监听已运行&#xff0c;当前业务连接都正常&#xff0c; orcl:/home/oracledb> lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Pro…

打造灵活DateTimePicker日期时间选择器组件:轻松实现时间的独立清除功能

element ui中日期和时间选择器&#xff08;DateTimePicker&#xff09;是一个常见且重要的组件。它允许用户轻松地选择日期和时间&#xff0c;极大地提升了用户体验。然而&#xff0c;在某些场景下&#xff0c;用户可能需要更细粒度的控制&#xff0c;例如单独清除已选择的时间…

下载与安装|Inventor 2025百度云资源分享附教程

如大家所了解的&#xff0c;Inventor是一款专业的三维可视化实体建模软件&#xff0c;主要用于各类二维机械制图、三维制图的设计和开发等操作&#xff0c;可以广泛地应用于零件设计、钣金设计、装配设计等领域。 不同领域的应用证明了Inventor具有强大的兼容性&#xff0c;基…

监控易监测对象及指标之:全面监控Oracle ODBC数据库

在数字化时代&#xff0c;数据库作为存储和管理企业核心数据的基石&#xff0c;其稳定性和性能直接关系到业务的连续性和效率。Oracle数据库以其强大的功能和稳定性&#xff0c;广泛应用于各行各业。为了确保Oracle数据库的稳定运行和高效性能&#xff0c;对其进行全面监控显得…

备战软考Day04-计算机网络

1、计算机网络的分类 2、七层网络体系结构 3、网络的设备与标准 4、TCP/IP协议族 TCP/IP作为Internet的核心协议&#xff0c;被广泛应用于局域网和广域网中&#xff0c;目前已成为事实上的国际标准 1、TCP/IP分层模型 TCP/IP协议是Internet的基础和核心&#xff0c;和OSI参考…

git命令将已经commit的代码push到其他分支

文章目录 一&#xff1a;对于多分支的代码库&#xff0c;将提交记录从一个分支转移到另一个分支是常见需求方法1&#xff1a;撤销commit操作方法2&#xff1a;实用命令git cherry-pick 来移动commit 二、不小心revert导致代码消失的问题 一&#xff1a;对于多分支的代码库&…

【Diffusion分割】FDiff-Fusion:基于模糊学习的去噪扩散融合网络

FDiff-Fusion: Denoising diffusion fusion network based on fuzzy learning for 3D medical image segmentation 摘要&#xff1a; 近年来&#xff0c;去噪扩散模型在图像分割建模中取得了令人瞩目的成就。凭借其强大的非线性建模能力和优越的泛化性能&#xff0c;去噪扩散模…

好用的todolist待办清单软件下载推荐

在快节奏的现代生活中&#xff0c;时间管理变得尤为重要。todolist待办清单管理软件&#xff0c;作为一种高效的任务管理工具&#xff0c;它帮助我们记录、跟踪和管理日常任务&#xff0c;从而提升个人效率。 在众多的待办软件中&#xff0c;敬业签以其出色的用户体验脱颖而出…

Vue2电商项目(四) Detail模块

文章目录 一、配置Detail路由1. 将Detail组件配置为路由组件2. 将路由配置文件拆分3. 声明式导航跳转到Detail跳转时存在的问题&#xff1a;页面滚动条还在下边 二、配置API及vuex三、放大镜及下方轮播图1. Detail组件传递放大镜数据2. 读取vuex数据的经典错误undefined3. 放大…

力扣234 回文链表 Java版本

文章目录 题目描述代码 题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 示例 2&…

【集合拆分+多线程并行处理,拿来即用】

文章目录 一.业务场景二.拆分流程三. 简单上个List拆分的demo四.测试结果五.小结 一.业务场景 节假日后第一天&#xff0c;上完班有点累&#xff0c;回到家稍微写点简单的东西。 我们项目里面有这样一业务场景&#xff0c;要计算全公司所有人某几个月内每天的考勤机打卡加班工时…

docker从0到1运行mysql(最详细且绝对成功版)

前置环境 CentOS7.8 安装docker yum install -y docker 启动docker并检查docker状态 systemctl start docker systemctl status docker 这样即正常 设置镜像加速 修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值 vim /etc/docker/daemon.json …

set的使用

序列式容器和关联式容器 序列式容器&#xff1a; 前⾯我们已经接触过STL中的部分容器如&#xff1a;string、vector、list、deque、array、forward_list等&#xff0c;这些容器统称为序列式容器&#xff0c;因为逻辑结构为线性序列的数据结构&#xff0c;两个位置存储的值之间…

监控和维护 Linux 系统的健康状态:从服务启动故障到操作系统查询

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

启动 Ntopng 服务前需先启动 redis 服务及 Ntopng 常用参数介绍

启动Ntopng服务之前需要先启动redis服务&#xff0c;因为Ntopng服务依赖于redis服务的键值存储。 服务重启 服务启动 Ntopng常用参数&#xff1a; -d 将 Ntopng 进程放入后台执行。默认情况下&#xff0c;Ntop 在前台运行。 -u 指定启动Ntopng执行的用户&#xff0c;默认为…

C++ SLT标准模板简介

STL全称是standard template libaray 标准模板库&#xff0c;这个库是C库中十分重要的一部分&#xff0c;里面涵盖可复用的组件库&#xff0c;而且是一个包罗了数据结构与算法的软件框架。 STL各主要版本 stl库最初是由Alexander Stepanov、Meng Lee在惠普工作室中完成的原始…

Multisim简体中文版百度云下载(含安装步骤)

如大家所熟悉的&#xff0c;Multisim是一款基于电路仿真的软件&#xff0c;可用于电子工程师、电子爱好者和学生进行电路设计、分析和调试。Multisim具有完整的电路设计和仿真功能&#xff0c;可支持模拟电路、数字电路&#xff0c;以及混合电路。 Multisim可以模拟不同电路的…