目录
  • 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: 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("删除成功")
                }
            }
            

            结果打印

            删除成功

            以上就是Go语言开发k8s之ConfigMap操作解析的详细内容,更多关于Go开发k8s ConfigMap操作的资料请关注其它相关文章!

            声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。