Go语言开发k8s-05-ConfigMap操作

2024-03-12 03:20

本文主要是介绍Go语言开发k8s-05-ConfigMap操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 结构体
    • 1.1 ConfigMapList
    • 1.2 ConfigMap
    • 1.3 TypeMeta
    • 1.4 ObjectMeta
    • 1.7 对照yml文件示例
    • 1.5 Immutable
    • 1.6 Data
    • 1.7 BinaryData
  • 2. Create configMap
    • 语法
    • 完整示例
  • 3. Get ConfigMapList
    • 语法
    • 完整示例
  • 4. Get ConfigMap
    • 语法
    • 完整示例
  • 5. Update ConfigMap
    • 语法
    • 完整示例
  • 6. Delete ConfigMap
    • 语法
    • 完整示例

1. 结构体

1.1 ConfigMapList

所在包:“k8s.io/api/core/v1”

type ConfigMapList struct {v1.TypeMeta `json:",inline"`v1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`Items           []ConfigMap `json:"items" protobuf:"bytes,2,rep,name=items"`
}

Items中每个ConfigMap结构体如下:

1.2 ConfigMap

所在包:“k8s.io/api/core/v1”

type ConfigMap struct {v1.TypeMeta   `json:",inline"`v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`Immutable         *bool             `json:"immutable,omitempty" protobuf:"varint,4,opt,name=immutable"`Data              map[string]string `json:"data,omitempty" protobuf:"bytes,2,rep,name=data"`BinaryData        map[string][]byte `json:"binaryData,omitempty" protobuf:"bytes,3,rep,name=binaryData"`
}

其成员说明如下:

1.3 TypeMeta

所在包:“k8s.io/apimachinery/pkg/apis/meta/v1”

type TypeMeta struct {Kind       string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"`APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,2,opt,name=apiVersion"`
}

对应在k8s上创建service的yml文件的如下部分:

apiVersion: v1
kind: ConfigMap

1.4 ObjectMeta

所在包:“k8s.io/apimachinery/pkg/apis/meta/v1”

type ObjectMeta struct {Name                       string               `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"`GenerateName               string               `json:"generateName,omitempty" protobuf:"bytes,2,opt,name=generateName"`Namespace                  string               `json:"namespace,omitempty" protobuf:"bytes,3,opt,name=namespace"`SelfLink                   string               `json:"selfLink,omitempty" protobuf:"bytes,4,opt,name=selfLink"`UID                        types.UID            `json:"uid,omitempty" protobuf:"bytes,5,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"`ResourceVersion            string               `json:"resourceVersion,omitempty" protobuf:"bytes,6,opt,name=resourceVersion"`Generation                 int64                `json:"generation,omitempty" protobuf:"varint,7,opt,name=generation"`CreationTimestamp          Time                 `json:"creationTimestamp,omitempty" protobuf:"bytes,8,opt,name=creationTimestamp"`DeletionTimestamp          *Time                `json:"deletionTimestamp,omitempty" protobuf:"bytes,9,opt,name=deletionTimestamp"`DeletionGracePeriodSeconds *int64               `json:"deletionGracePeriodSeconds,omitempty" protobuf:"varint,10,opt,name=deletionGracePeriodSeconds"`Labels                     map[string]string    `json:"labels,omitempty" protobuf:"bytes,11,rep,name=labels"`Annotations                map[string]string    `json:"annotations,omitempty" protobuf:"bytes,12,rep,name=annotations"`OwnerReferences            []OwnerReference     `json:"ownerReferences,omitempty" patchStrategy:"merge" patchMergeKey:"uid" protobuf:"bytes,13,rep,name=ownerReferences"`Finalizers                 []string             `json:"finalizers,omitempty" patchStrategy:"merge" protobuf:"bytes,14,rep,name=finalizers"`ManagedFields              []ManagedFieldsEntry `json:"managedFields,omitempty" protobuf:"bytes,17,rep,name=managedFields"`
}

对应在k8s上创建service的yml文件的如下部分:

metadata:name: nginxconfnamespace: test

1.7 对照yml文件示例

附原生k8s集群上一个configMap信息,大家可以对照理解一下以上结构体

apiVersion: v1
data:nginx.conf: |2-worker_processes  1;events {worker_connections  1024;}http {include       mime.types;default_type  application/octet-stream;client_max_body_size 50m;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;root   /usr/share/nginx/html;location / {index  index.html index.htm;}}}
kind: ConfigMap
metadata:creationTimestamp: "2022-10-14T06:53:14Z"name: nginxconfnamespace: liubeiresourceVersion: "23364643"selfLink: /api/v1/namespaces/liubei/configmaps/nginxconfuid: cbe236fb-b86b-47f5-bf13-696fada4e400

1.5 Immutable

bool值的指针

  • true,不可更改
  • 否则可以随时更改

1.6 Data

map[string]string类型,对应yaml文件中的data字段,每一个成员对应一个键值对,即一个要挂载的配置文件

1.7 BinaryData

map[string][]byte类型,和Data类似,只不过传入的字串变成了[]byte

2. Create configMap

语法

func (ConfigMapInterface) Create(ctx context.Context, configMap *v1.ConfigMap, opts v1.CreateOptions) (*v1.ConfigMap, error)
  • 语法示例
configMapInfo,err = clientSet.CoreV1().ConfigMaps(namespaceName).Create(context.TODO(),configMap,metaV1.CreateOptions{})

完整示例

  • 之前一个k8s上nginx服务的configmap如下
apiVersion: v1
kind: ConfigMap
metadata:name: nginxconfnamespace: test
data:nginx.conf: |worker_processes  1;events {worker_connections  1024;}http {include       mime.types;default_type  application/octet-stream;client_max_body_size 50m;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;root   /usr/share/nginx/html;location / {index  index.html index.htm;}}}
  • 创建函数
package crowK8Simport ("context"coreV1 "k8s.io/api/core/v1"metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/client-go/kubernetes"
)func CreateConfigMap(clientSet *kubernetes.Clientset,namespaceName string,configMapName string,dataInfo string)(configMapInfo *coreV1.ConfigMap,err  error)  {configMap := &coreV1.ConfigMap{ObjectMeta: metaV1.ObjectMeta{Name: configMapName,},Data: map[string]string{"nginx.conf" : dataInfo,},}configMapInfo,err = clientSet.CoreV1().ConfigMaps(namespaceName).Create(context.TODO(),configMap,metaV1.CreateOptions{})if err != nil {return configMapInfo,err}return configMapInfo,nil
}
  • 调用函数
package mainimport ("fmt""go-k8s/crowK8S"
)func main()  {clientSet,err := crowK8S.ConnectK8s()if err !=nil {fmt.Println(err)}var dataInfo stringdataInfo = "    worker_processes  1;\n    events {\n        worker_connections  1024;\n    }\n    http {\n        include       mime.types;\n        default_type  application/octet-stream;\n        client_max_body_size 50m;\n        sendfile        on;\n        keepalive_timeout  65;\n        server {\n            listen       80;\n            server_name  localhost;\n            root   /usr/share/nginx/html;\n            location / {\n               index  index.html index.htm;\n            }\n        }\n    }"configMapInfo,err := crowK8S.CreateConfigMap(clientSet ,"liubei","nginxconf",dataInfo)fmt.Println(configMapInfo)
}
  • k8s上查看结果如下
[root@crust-m01 ~]# kubectl describe -n liubei configmaps nginxconf
Name:         nginxconf
Namespace:    liubei
Labels:       <none>
Annotations:  <none>Data
====
nginx.conf:
----worker_processes  1;events {worker_connections  1024;}http {include       mime.types;default_type  application/octet-stream;client_max_body_size 50m;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;root   /usr/share/nginx/html;location / {index  index.html index.htm;}}}
Events:  <none>

3. Get ConfigMapList

语法

  • 语法

完整示例

  • 定义函数
package crowK8Simport ("context"coreV1 "k8s.io/api/core/v1"metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/client-go/kubernetes"
)func GetConfigMapList(clientSet *kubernetes.Clientset,namespaceName string)(configMapList *coreV1.ConfigMapList,err error)  {configMapList,err = clientSet.CoreV1().ConfigMaps(namespaceName).List(context.TODO(), metaV1.ListOptions{})if err != nil{return nil, err}return configMapList, err
}
  • 使用函数
package mainimport ("fmt""go-k8s/crowK8S"
)func main()  {clientSet,err := crowK8S.ConnectK8s()if err !=nil {fmt.Println(err)}configMapList,err := crowK8S.GetConfigMapList(clientSet ,"liubei")if err != nil {fmt.Println(err)}fmt.Println(configMapList)
}
  • 结果打印
&ConfigMapList{ListMeta:{/api/v1/namespaces/liubei/configmaps 22893420  <nil>},Items:[]ConfigMap{ConfigMap{ObjectMeta:{kube-root-ca.crt  liubei /api/v1/namespaces/liubei/configmaps/kube-root-ca.crt ecb54dbb-3082-4caa-9055-8061e5d9d7b6 19106476 0 2022-09-28 13:23:29 +0800 CST <nil> <nil> map[] map[] [] [] [{kube-controller-manager Update v1 2022-09-28 13:23:29 +0800 CST FieldsV1 {"f:data":{".":{},"f:ca.crt":{}}} }]},Data:map[string]string{ca.crt: -----BEGIN CERTIFICATE-----
MIIC6TCCAdGgAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
cm5ldGVzMCAXDTIyMDcxMjA4NDExNFoYDzIxMjIwNjE4MDg0MTE0WjAVMRMwEQYD
VQQDEwprdWJlcm5ldGVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
85IYxSiow4zNifU1yqMK6knWrJIErQXD6zHUgpAk2Z/c3XfpwONCkTObLEhXJKeN
9wjqOAxx9OLFSqZdefnOjSKw6jZJFC6APLM/bdsX4ECnlg32edQ05iUZxPYZjpdS
BhpbdK4jCirB/XMgdmJizxoR1NHBZNHGbnH0rabfF/PrVrZQdUJpLpoAvOyT3bWr
+HPSHA7mzODAko/RtVGyGoZClBZbFds7f1cyY2JGOB6GqrJMmLVf3xBVGwUO3KLA
0lZ/rfPrS9fEzAD6y1pqke7wr9agrFXWhFZLtwIVqGrt6Zzrq0jxamwPqZsYAXPm
jA3LYX0VnseIJTGX0S9HKQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0T
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
hvcNAQELBQADggEBANgTtUROUKrLcihbTJXrhZKo94Q/WX7AeRVz7HlWTEqWFsX1
eZyFNMPeFoswLwGe4nwuS2Nd+WvE+WPZ/0CF+q8/0oGE6B87zdTnJJELTnIqnWIm
k+ac7gMokk7EaCv30FBDX239E++zVooWsHj3Tc1dmn2AY+whgNXnxT9TGNst9o2z
DTlzI2VWg8kay3IhZS0NjsKk1YMbd8c+5uLQZwWEtGa7HlD8ooOF/emOINVIbRH4
T7LiVjQH3JJPZtYSWnl88IMtXlW360oABkVdKY4Z1nNzrNWBCGOFQ4Y75XmFY6Qi
2c0f8L2WtTFdrXgbbHCbOaIj9rruEH5wKxjxBg8=
-----END CERTIFICATE-----
,},BinaryData:map[string][]byte{},Immutable:nil,},ConfigMap{ObjectMeta:{nginxconf  liubei /api/v1/namespaces/liubei/configmaps/nginxconf 395535db-1df7-408a-9976-18e6ded1207e 22854355 0 2022-10-12 17:21:03 +0800 CST <nil> <nil> map[] map[] [] [] [{___go_build_main_go.exe Update v1 2022-10-12 17:21:03 +0800 CST FieldsV1 {"f:data":{".":{},"f:nginx.conf":{}}} }]},Data:map[string]string{nginx.conf:     worker_processes  1;events {worker_connections  1024;}http {include       mime.types;default_type  application/octet-stream;client_max_body_size 50m;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;root   /usr/share/nginx/html;location / {index  index.html index.htm;}}},},BinaryData:map[string][]byte{},Immutable:nil,},},}

4. Get ConfigMap

语法

  • 语法
func (ConfigMapInterface) Get(ctx context.Context, name string, opts v1.GetOptions) (*v1.ConfigMap, error)
  • 语法示例
configmapInfo,err = clientSet.CoreV1().ConfigMaps(namespaceName).Get(context.TODO(),configMapName,metaV1.GetOptions{})

完整示例

  • 创建函数
package crowK8Simport ("context"coreV1 "k8s.io/api/core/v1"metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/client-go/kubernetes"
)func GetConfigMap(clientSet *kubernetes.Clientset,namespaceName string,configMapName string)(configmapInfo *coreV1.ConfigMap,err error)  {configmapInfo,err = clientSet.CoreV1().ConfigMaps(namespaceName).Get(context.TODO(), configMapName,metaV1.GetOptions{})if err != nil{return nil, err}return configmapInfo, err
}
  • 调用
package mainimport ("fmt""go-k8s/crowK8S"
)func main()  {clientSet,err := crowK8S.ConnectK8s()if err !=nil {fmt.Println(err)}configmapInfo,err := crowK8S.GetConfigMap(clientSet ,"liubei","nginxconf")if err != nil {fmt.Println(err)}fmt.Println(configmapInfo)
}
  • 结果
&ConfigMap{ObjectMeta:{nginxconf  liubei /api/v1/namespaces/liubei/configmaps/nginxconf 395535db-1df7-408a-9976-18e6ded1207e 22854355 0 2022-10-12 17:21:03 +0800 CST <nil> <nil> map[] map[] [] [] [{___go_build_main_go.exe Update v1 2022-10-12 17:21:03 +0800 CST FieldsV1 {"f:data":{".":{},"f:nginx.conf":{}}} }]},Data:map[string]string{nginx.conf:     worker_processes  1;events {worker_connections  1024;}http {include       mime.types;default_type  application/octet-stream;client_max_body_size 50m;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;root   /usr/share/nginx/html;location / {index  index.html index.htm;}}},},BinaryData:map[string][]byte{},Immutable:nil,}

5. Update ConfigMap

语法

  • 语法
func (ConfigMapInterface) Update(ctx context.Context, configMap *v1.ConfigMap, opts v1.UpdateOptions) (*v1.ConfigMap, error)
  • 语法示例
configmapInfo,err = clientSet.CoreV1().ConfigMaps(namespaceName).Update(context.TODO(),configmapInfo,metaV1.UpdateOptions{})

完整示例

  • 创建函数
package crowK8Simport ("context"coreV1 "k8s.io/api/core/v1"metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/client-go/kubernetes"
)func ApplyConfigMap(clientSet *kubernetes.Clientset,namespaceName string,configMapName string,fileName string,configMapData string)(configmapInfo *coreV1.ConfigMap,err error)  {configmapInfo,err = clientSet.CoreV1().ConfigMaps(namespaceName).Get(context.TODO(), configMapName,metaV1.GetOptions{})if err != nil{return nil, err}configmapInfo.Data[fileName] = configMapDataconfigmapInfo,err = clientSet.CoreV1().ConfigMaps(namespaceName).Update(context.TODO(),configmapInfo,metaV1.UpdateOptions{})if err !=nil {return configmapInfo,err}return configmapInfo,nil
}
  • 调用
func main()  {clientSet,err := crowK8S.ConnectK8s()if err !=nil {fmt.Println(err)}configMapInfo,err := crowK8S.ApplyConfigMap(clientSet ,"liubei","nginxconf","nginx.conf","hello world")fmt.Println(configMapInfo)}
  • 结果打印
&ConfigMap{ObjectMeta:{nginxconf  liubei /api/v1/namespaces/liubei/configmaps/nginxconf 395535db-1df7-408a-9976-18e6ded1207e 22901163 0 2022-10-12 17:21:03 +0800 CST <nil> <nil> map[] map[] [] [] [{___go_build_main_go.exe Update v1 2022-10-12 17:21:03 +0800 CST FieldsV1 {"f:data":{".":{},"f:nginx.conf":{}}} }]},Data:map[string]string{nginx.conf: hello world,},BinaryData:map[string][]byte{},Immutable:nil,}
  • k8s上查看结果
[root@crust-m01 ~]# kubectl describe -n liubei configmaps nginxconf
Name:         nginxconf
Namespace:    liubei
Labels:       <none>
Annotations:  <none>Data
====
nginx.conf:
----
hello world
Events:  <none>

6. Delete ConfigMap

语法

  • 语法
func (ConfigMapInterface) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
  • 语法示例
err = clientSet.CoreV1().ConfigMaps(namespaceName).Delete(context.TODO(),configMapName,metaV1.DeleteOptions{})

完整示例

  • 创建函数
package crowK8Simport ("context"coreV1 "k8s.io/api/core/v1"metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/client-go/kubernetes"
)
func DeleteConfigMap(clientSet *kubernetes.Clientset,namespaceName string,configMapName string)(err error)  {err = clientSet.CoreV1().ConfigMaps(namespaceName).Delete(context.TODO(),configMapName,metaV1.DeleteOptions{})if err != nil {return err}return nil
}
  • 调用
package mainimport ("fmt""go-k8s/crowK8S"
)func main()  {clientSet,err := crowK8S.ConnectK8s()if err !=nil {fmt.Println(err)}err = crowK8S.DeleteConfigMap(clientSet,"liubei","nginxconf")if err != nil {fmt.Println(err)}else {fmt.Println("删除成功")}
}
  • 结果打印
删除成功

在这里插入图片描述

这篇关于Go语言开发k8s-05-ConfigMap操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/799985

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。