Go语言开发k8s之ConfigMap操作解析

2023-12-05 0 194
目录
  • 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—–MIIC6TCCAdGgAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJlcm5ldGVzMCAXDTIyMDcxMjA4NDExNFoYDzIxMjIwNjE4MDg0MTE0WjAVMRMwEQYDVQQDEwprdWJlcm5ldGVzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA85IYxSiow4zNifU1yqMK6knWrJIErQXD6zHUgpAk2Z/c3XfpwONCkTObLEhXJKeN9wjqOAxx9OLFSqZdefnOjSKw6jZJFC6APLM/bdsX4ECnlg32edQ05iUZxPYZjpdSBhpbdK4jCirB/XMgdmJizxoR1NHBZNHGbnH0rabfF/PrVrZQdUJpLpoAvOyT3bWr+HPSHA7mzODAko/RtVGyGoZClBZbFds7f1cyY2JGOB6GqrJMmLVf3xBVGwUO3KLA0lZ/rfPrS9fEzAD6y1pqke7wr9agrFXWhFZLtwIVqGrt6Zzrq0jxamwPqZsYAXPmjA3LYX0VnseIJTGX0S9HKQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxhvcNAQELBQADggEBANgTtUROUKrLcihbTJXrhZKo94Q/WX7AeRVz7HlWTEqWFsX1eZyFNMPeFoswLwGe4nwuS2Nd+WvE+WPZ/0CF+q8/0oGE6B87zdTnJJELTnIqnWImk+ac7gMokk7EaCv30FBDX239E++zVooWsHj3Tc1dmn2AY+whgNXnxT9TGNst9o2zDTlzI2VWg8kay3IhZS0NjsKk1YMbd8c+5uLQZwWEtGa7HlD8ooOF/emOINVIbRH4T7LiVjQH3JJPZtYSWnl88IMtXlW360oABkVdKY4Z1nNzrNWBCGOFQ4Y75XmFY6Qi2c0f8L2WtTFdrXgbbHCbOaIj9rruEH5wKxjxBg8=—–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操作的资料请关注悠久资源网其它相关文章!

            您可能感兴趣的文章:

            • k8s跨服务调用入门到实战示例详解
            • k8s 常见面试题集锦
            • k8s自身原理service及实现图文示例解析
            • golang简易实现 k8s 的yaml上传并应用示例方案
            • Go语言开发k8s之Deployment操作解析
            • k8s设置非强一致反亲和性示例

            收藏 (0) 打赏

            感谢您的支持,我会继续努力的!

            打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
            点赞 (0)

            悠久资源 Golang Go语言开发k8s之ConfigMap操作解析 https://www.u-9.cn/jiaoben/golang/101750.html

            常见问题

            相关文章

            发表评论
            暂无评论
            官方客服团队

            为您解决烦忧 - 24小时在线 专业服务