文章目录

1. 结构体1.1 ConfigMapList1.2 ConfigMap1.3 TypeMeta1.4 ObjectMeta1.7 对照yml文件示例1.5 Immutable1.6 Data1.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: 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:

Annotations:

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:

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 },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 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 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 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 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:

Annotations:

Data

====

nginx.conf:

----

hello world

Events:

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("删除成功")

}

}

结果打印

删除成功