在上一篇简书中,我用k8s搭建了一个dns集群。
在这里将给这个集群增加一个健康检测和挂载本地存储
一、健康检测:
k8s提供了两类探针:livenessProbe和readinessProbe
livenessProbe:用于判断容器是否存活。
readinessProbe: 用于判断容器是否启动完成。
每类探针都有三种探测方法:
exec:通过执行命令来检查服务是否正常,针对复杂检测或无HTTP接口的服务,命令返回值为0则表示容器健康。
httpGet:通过发送http请求检查服务是否正常,返回200-399状态码则表明容器健康。
tcpSocket:通过容器的IP和Port执行TCP检查,如果能够建立TCP连接,则表明容器健康。
这里将采用livenessProbe-tcpSocket的方式,判断bind的53端口:
livenessProbe: #健康检测
initialDelaySeconds: 5
tcpSocket:
port: 53
执行kubectl apply -f ,等待pod变running状态:
接着把pod里面的named服务停止掉:
稍等一会,再查看pod:
成功!
二、configMap和volume
1.configMap
configMap api给我们提供了向容器中注入配置信息的机制,它可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。
config创建方式有使用目录创建、使用文件创建、使用字面值创建,详情请查看官网。这里采用文件创建。
采用文件创建方式: kubectl create configmap NAME --from-file=filename
--from-file 这个参数可以使用多次,效果就跟指定整个目录是一样的。
在pod中使用configMap有:使用configMap来替代环境变量,用configMap设置命令行参数,通过数据卷插件使用configMap
通过数据卷插件使用configMap:
volumeMounts: #接在containers下:
- name: root-conf #named.conf配置信息
mountPath: /etc/named.conf
subPath: named.conf
- name: zones-volume #com.解析配置信息
mountPath: /var/named/zones/root.master
subPath: root.master
volumes: #与container同一级
- name: zones-volume
configMap:
name: root-master #已经用文件创建好的configMap名字
items:
- key: root.master #键就是文件名
path: root.master #值就是文件内容
- name: root-conf
configMap:
name: root-conf
items:
- key: named.conf
path: named.conf
执行kubectl apply -f ,等待pod变running状态:
因此 ,通过修改configMap可以一次修改多个pod的配置文件。
2.volume
volumeMounts: #挂载volume
- name: zones-volume
mountPath: /var/named/zones
volumes:
- name: zones-volume #配置
hostPath:
path: /root/named/zones
type: Directory
注意:pod所在节点的宿主机需要有这个目录,否则会报错。