kubenetes中指定web服务器使用的数据库(集群配置管理方案--ConfigMap)
来源:互联网 发布:css布局 书籍 知乎 编辑:程序博客网 时间:2024/06/05 02:38
在《kubernetes权威指南中》,frontend及redis跑起来后,在web页面上无法添加messages,通过进入容器中查看使用的redis server及slave的IP地址,与实际redis pod中的地址不符(后来发现这个地址是redis service 的虚拟ip,在创建完redis服务再创建frontend的顺序下,不指定环境变量又重新创建frontend后,可以通过这个service ip进行添加操作了。不过仍然通过本文的例子学习如果配置和使用ConfigMap),这个文章描述了如果指定启动的frontend中的redis server地址。
ConfigMap的典型用法:
(1)生成为容器内的环境变量。
(2)设置容器启动命令的启动参数(需设置为环境变量)。
(3)以Volume的形式挂载为容器内部的文件或目录。
ConfigMap以一个或多个key:value的形式保存在Kubernetes系统中供应用使用。
创建ConfigMap的方式有:yaml文件方式、kubectl命令行方式。
使用ConfigMap的方式有:环境变量方式、volumeMount模式。
使用ConfigMap解决上面的问题:
查看frontend中指定redis server的方式为从环境变量中获取地址:
root@frontend-4lkjk:/var/www/html# cat guestbook.php
if (getenv('GET_HOSTS_FROM') == 'env') { $host = getenv('REDIS_MASTER_SERVICE_HOST'); } header('Content-Type: application/json'); if ($_GET['cmd'] == 'set') { $client = new Predis\Client([ 'scheme' => 'tcp', 'host' => $host, 'port' => 6379, ]); $client->set($_GET['key'], $_GET['value']); print('{"message": "Updated"}'); } else { $host = 'redis-slave'; if (getenv('GET_HOSTS_FROM') == 'env') { $host = getenv('REDIS_SLAVE_SERVICE_HOST'); } $client = new Predis\Client([ 'scheme' => 'tcp', 'host' => $host, 'port' => 6379, ]);
一、查看redis server 的ip地址:
root@kubernetes1:~/test# kubectl describe pod redis-slave-lgrdp –namespace=common
Name: redis-slave-lgrdp
Namespace: common
Node: kubernetes2/192.168.3.101
Start Time: Wed, 19 Apr 2017 18:29:53 +0800
Labels: name=redis-slave
Status: Running
IP: 10.244.1.88
root@kubernetes1:~/test# kubectl describe pod redis-master-tddz8 –namespace=common
Name: redis-master-tddz8
Namespace: common
Node: kubernetes3/192.168.3.102
Start Time: Wed, 19 Apr 2017 18:25:11 +0800
Labels: name=redis-master
Status: Running
IP: 10.244.3.6
二、创建一个ConfigMap文件,指定环境变量:
root@kubernetes1:~/test# cat frontend-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: frontend-cm
namespace: common
data:
redis_master_service_host: 10.244.3.6
redis_slave_service_host: 10.244.1.88
三、创建ConfigMap:
kubectl create -f frontend-cm.yaml
NAME DATA AGE
frontend-cm 2 1m
root@kubernetes1:~/test# kubectl describe configmap frontend-cm --namespace=common
Name: frontend-cm
Namespace: common
Labels: <none>
Annotations: <none>
Data
====
redis_master_service_host: 10 bytes
redis_slave_service_host:11 bytes
四、修改frontend controller文件,指定要使用的环境变量,在containers部分:
containers:
- name: frontend
image: harbor.itopka.com/test/guestbook-php-frontend
env:
- name: GET_HOSTS_FROM
value: env
- name: REDIS_MASTER_SERVICE_HOST
valueFrom:
configMapKeyRef:
name: frontend-cm
key: redis_master_service_host
- name: REDIS_SLAVE_SERVICE_HOST
valueFrom:
configMapKeyRef:
name: frontend-cm
key: redis_slave_service_host
五、根据frontend controller文件创建pod:
kubectl create -f frontend-controller.yaml
六、检查环境变量是否生效:
root@kubernetes1:~/test# kubectl get pods --namespace=common
NAME READY STATUS RESTARTS AGE
frontend-4lkjk 1/1 Running 0 14s
redis-master-tddz8 1/1 Running 0 4d
redis-slave-f23l5 1/1 Running 0 4d
redis-slave-lgrdp 1/1 Running 0 4d
root@kubernetes1:~/test# kubectl exec frontend-4lkjk --namespace=common -it -- bash
root@frontend-4lkjk:/var/www/html# echo $REDIS_MASTER_SERVICE_HOST
10.244.3.6
root@frontend-4lkjk:/var/www/html# echo $REDIS_SLAVE_SERVICE_HOST
10.244.1.88
七、通过web访问,message数据可以正常提交和显示。
- kubenetes中指定web服务器使用的数据库(集群配置管理方案--ConfigMap)
- 通过LS删除服务器中指定的数据库
- 清楚数据库中指定内容
- 检索数据库中指定页的记录(SqlServer 2000示例)
- 查找数据库中指定字段按拼音首字母的记录
- 批量删除数据库字段中指定的字符串
- 用触发器保证数据库中指定的字段不允许修改
- Hibernate配置文件中指定MySQL数据库的编码方式
- Hibernate配置文件中指定MySQL数据库的编码方式
- Hibernate配置文件中指定MySQL数据库的编码方式
- 删除数据库中所有表中指定的字段
- Hibernate配置文件中指定MySQL数据库的编码方式
- 查询数据库中指定字段符合条件的记录数
- 使用JS获取Repeater中指定单元格的内容(单元格无控件)
- 使用JavaScript获得tr有多少个(html中指定元素的个数)
- 使用watir操作table中指定的项
- 使用events DUMP buffer cache中指定的数据块
- 使用events DUMP buffer cache中指定的数据块
- AngularJS之使用服务封装
- Vim快速选中、删除、复制引号或括号中的内容
- flume+kafka+hdfs日志系统
- 七.Scala 运算符
- Android 动画-Interpolator和TypeEvaluator
- kubenetes中指定web服务器使用的数据库(集群配置管理方案--ConfigMap)
- Android异步消息处理 (Handler)
- vijos——1214伤心的AsukaNoKaze
- Ajax状态值及状态码
- Hibernate模板类【理解】【应用】【重点】
- 第六次实验上机课(类和对象(物联网))
- nginx+tomcat绑定二级域名,部署多个应用
- 【敏捷开发每日一贴】DoD“完成”的定义
- 用0填充nan值