您的位置:首页 > 数据库

kubenetes中指定web服务器使用的数据库(集群配置管理方案--ConfigMap)

2017-04-24 15:31 751 查看
在《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
root@kubernetes1:~/test# kubectl get configmap --namespace=common

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数据可以正常提交和显示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: