Go语言开发k8s-05-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: nginxconf
  namespace: 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: nginxconf
  namespace: liubei
  resourceVersion: "23364643"
  selfLink: /api/v1/namespaces/liubei/configmaps/nginxconf
  uid: 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: nginxconf
  namespace: 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 crowK8S

import (
	"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 main

import (
	"fmt"
	"go-k8s/crowK8S"
)

func main()  {
	clientSet,err := crowK8S.ConnectK8s()
	if err !=nil {
		fmt.Println(err)
	}
    var dataInfo string
	dataInfo = "    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 crowK8S

import (
	"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 main

import (
	"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 crowK8S

import (
	"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 main

import (
	"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 crowK8S

import (
	"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] = configMapData
	configmapInfo,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 crowK8S

import (
	"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 main

import (
	"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("删除成功")
	}
}
  • 结果打印
删除成功

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄德公笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值