今天要来介绍两个蛮重要的观念:ConfigMap 以及 Secrets,通常在本机端练习可能比较少用到这两个物件,但在实务上这两个物件可是很常使用的,由於这两个物件非常的相近,使用方式也非常相近,所以笔者就把这两个物件的观念摆在一起了,废话不多说马上开始今天的文章吧!
看到 Config 应该就知道这个物件跟某些设定档有关,没错 ConfigMap 通常都是用来存放设定档用的,换句话说就是这个物件会直接连结一个或多个档案,而 ConfigMap 通常都是用来存放偏向部署面的设定档,像是资料库的初始化设定、nginx 设定档等等,这种不用被包进去 image 内但其实也是要让 container 可以使用的档案。
讲完了 ConfigMap 基础介绍後接下来讲一下 ConfigMap 的特性。
上面段落提到 ConfigMap 是用来存放设定档用的,而且 ConfigMap 会直接连接该设定档。
由於设定档都交由 ConfigMap 管理,并不是包在 image 内,因此可以藉由修改 ConfigMap 的方式来达到不用更新 Pod 内容就可以更换设定档的作用。
一个 ConfigMap 可以连结一个以上的设定档,因此也可以将该专案会用到的所有设定档通通存放在同一个 ConfigMap 物件中进行集中管理。
由於 ConfigMap 可以直接存入整个档案,因此笔者这边的范例都会以现有的档案为基准。
接下来要用 create
这个参数来建立 ConfigMap 物件出来,这时候可能会有读者疑惑了,之前都是用 apply
这个参数怎麽现在又变成 create
了呢?
虽然两者都有建立的意思但背後实作的技术完全不同, create
使用的是 Imperative Management,Imperative Management 简单来说就是告诉 K8s 我目前的动作要做什麽,可能要 create
、delete
、replace
某个物件。
而 apply
使用的是 Declarative Management,Declarative Management 简单来说就是用宣告的方式来建立物件,再更白话一点就是我希望这个物件要长怎麽样,所以 apply
通常都会搭配一个 yaml 档,而这份 yaml 档就会在 kind 这个设定值告诉 K8s 我这个物件要长成什麽样子。
由於笔者是直接拿现有的档案建立 ConfigMap,这时候就不能用 apply
的方式只能用 create
的方式建立了,指令也很简单长得像这样:kubectl create configmap configmapName --from-file=filePath
。
建立完後就可以下 get
的参数查看 ConfigMap 是否有成功建立出来。
最後可以下 describe
这个参数查看 ConfigMap 的内容,会发现里面就是设定档的完整内容。
看到 Secrets 这个名字应该就知道这是非常机密的物件,相较於 ConfigMap 是用来存放偏向部署面的档案,Secrets 通常都是用来存放机密的资料,像是使用者帐密、SSL 凭证等等。
上面 ConfigMap 提到的特性 Secrets 一样也有,所以笔者就不重复讲了,这边笔者想介绍的是只有 Secrets 才有的特性:Secret 会将内部资料进行 base64 编码。
因为重新编码所以可以确保资料相较 ConfigMap 下安全一些,所以笔者建议如果是机密性的资料就存在 Secrets 吧!
这里笔者一样用现有的档案为基准作为范例,由於上面 ConfigMap 只示范存入一个档案而已,所以这边 Secrets 笔者就示范如何存入多个档案。
一样用 create
的参数进行 Secrets 建立,但这边要多加一个 SUBCOMMAND
叫 generic
,generic
代表的意思是从本机档案、目录建立 Secrets,接下来只要下:kubectl create secret generic secretName --from-file=filePath
即可建立 Secrets。
接着一样可以用 get
的参数来查看 Secrets 是否有正确建立起来。
最後一样可以用 describe
的参数查看 Secrets 内容,可以发现里面确实有两个档案,并且经过加密所以不会显示原本内容。
最後来点番外篇,刚刚笔者建立一个跟 SSL 凭证有关的 Secrets,这个 Secrets 是用来帮助网页加密,也就是大家熟悉的 HTTPS,在 Ingress 的文章有提到 Ingress 帮助我们统一对外 port,也就是只要把凭证的 Secrets 写在 Ingress 内就可以让网站顺利变成 HTTPS 了,写法也很简单只要在 spec 内加上 tls 的设定即可。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: helloworld
spec:
tls:
- secretName: helloworld-secret
rules:
- http:
paths:
- path: /
backend:
serviceName: helloworld
servicePort: 8080
今天介绍了 ConfigMap 以及 Secrets 的基础说明以及建立,相信读者应该也很好奇要如何将 ConfigMap 以及 Secrets 跟 Pod 进行连结,由於连结这段需要介绍 Volume,因此笔者下一篇文章就要来介绍 Volume,到时候会连同连结的部分一并介绍完。
如果对於文章有什麽问题都欢迎留言给我,那我们就下篇文章见喽~
猜数字练习(while) 设定一数字,范围为1到100为解答,接着利用scanf将值输入,利用此输...
今天要介绍的Decorator Pattern,跟昨天的Composite Pattern都是属...
身为并发(concurrency)小能手的 Go 的重要特色 有了 channel 好像几乎不需要...
今天会是单纯的自我对话,没有任何程序 0x1 回想 Laravel 开发过程 Laravel 对我来...
DAY28 MongoDB Atlas 付费监控内容 这篇原本是要在25号发的,因为一些因素,只好延...