本文主要是介绍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操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!