ConfigMap
例如Nginx配置文件、数据库连接地址等,这种可能根据部署环境变化的,我们不应该直接配置在容器里面。
Kubernetes 为我们提供了 ConfigMap,可以方便的配置一些变量。文档
nginx-configmap.yaml
apiVersion: v1kind: ConfigMapmetadata:name: nginx-configmapnamespace: demodata:nginx_conf: |-#user nobody;worker_processes 1;events {worker_connections 1024;}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {return 999; # 配置状态码999}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}}
# 应用
$ kubectl apply -f nginx-configmap.yaml
# 查看
$ kubectl get cm nginx-configmap -n demo -oyaml
修改 deployment 挂载 configmap 到 pod 中
apiVersion: apps/v1 # api版本声明:1、extensions/v1beta1 是用于kubernetes版本在1.6之前 2、apps/v1beta1 是用于1.6-1.9版本之间 3、apps/v1 是1.9版本以后使用。目前使用的Kubernetes版本: v1.17.4。
kind: Deployment # 指定创建资源的类型
metadata: # 资源的元数据/属性
name: nginx-deployment # 资源名称,在同一个namespace中唯一
namespace: demo # 指定namespace
spec: # 资源规格定义
revisionHistoryLimit: 10 # 保存最近的10个历史版本
replicas: 1 # 指定pod副本数量
strategy: # 滚动升级策略
type: RollingUpdate # 滚动更新。策略:重建(recreate):停止旧版本部署新版本;滚动更新(rolling-update):一个接一个地以滚动更新方式发布新版本;蓝绿(blue/green):新版本与旧版本一起存在,然后切换流量;金丝雀(canary):将新版本面向一部分用户发布,然后继续全量发布
rollingUpdate:
maxSurge: 1 # 一次可以添加多少个Pod
maxUnavailable: 0 # 滚动更新期间最大多少个Pod不可用
selector: # 定义标签选择器
matchLabels: # 标签匹配
app: nginx-server # 这里选择需要管理的pod的标签名
template: # pod模版定义
metadata: # 资源的元数据/属性
labels: # 定义pod标签
app: nginx-server # pod标签名(自定义)
spec: # 指定该资源的内容
restartPolicy: Always # 容器重启策略。只要退出就重启(Always),失败退出(exit code不等于0)时重启(OnFailure),只要退出就不再重启(Never)
containers: # 定义一个容器
- name: nginx-container # 容器名称
image: nginx:1.22.0 # 镜像名称
imagePullPolicy: IfNotPresent # 镜像拉取策略。 不管镜像是否存在都会进行一次拉取。(Always),只有镜像不存在时,才会进行镜像拉取。(IfNotPresent),只使用本地镜像,从不拉取(Never)
ports: # 端口定义
- name: nginx-port # 端口名称
containerPort: 80 # 容器对外暴露的端口
protocol: TCP # 端口通讯协议
resources: # 容器资源管理
requests: # 容器的请求资源
memory: "256Mi" # 请求内存资源:2G
cpu: "0.1" # 请求CPU资源:1v
limits: # 容器的限制资源
memory: "512Mi" # 容器的限制内存:4G
cpu: "1" # 容器的限制CPU:2v
volumeMounts: # 挂载数据卷
- name: nginx-cm
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
volumes: # 创建数据卷
- name: nginx-cm # 数据卷名称
configMap: # 从confimap读取数据
name: nginx-configmap # configmap名称,需提前创建
items:
- key: nginx_conf
path: nginx.conf
应用修改后的 deployment
$ kubectl apply -f nginx-deployment.yaml
# 把集群内端口映射到节点
$ kubectl port-forward $POD_NAME --address 0.0.0.0 32080:80 -n demo
验证
返回状态码999表示配置文件生效
$ curl -w '%{http_code}' http://192.168.0.240:32080
999
