博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
k8s-web集群架构从零开始(2)
阅读量:6815 次
发布时间:2019-06-26

本文共 5663 字,大约阅读时间需要 18 分钟。

hot3.png

附上链接:

docker构建web集群:

kubenetes与web集群:

k8s-web集群架构从零开始(1):

web集群

我使用的是django做为架构来搭建web。这里web前端的内容我就不做扩展了,我还是使用上次随便写的那个网站来做测试。不过web集群在这里和docker当时的做法不太一样了。之前我们是使用了web容器和nginx容器共享数据卷容器来实现网站数据共享。

nginx是一个高性能的HTTP和反向代理服务器,在web集群中我们使用它做为http的代理服务器,在k8s中,我们完全可以把这web容器和nginx容器写在一个同一个pod里面,因为他们共享着数据卷,关系十分地亲密。

使用django连接mysql和redis服务主要是在setting中修改。

DATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME': 'form',        'USER':'root',        'PASSWORD':'123456',        #'HOST': '127.0.0.1'        'HOST':'service_mysql',        'Port':'3306',   }}CACHES = {    "default": {        "BACKEND": "django_redis.cache.RedisCache",        #"LOCATION": "redis://127.0.0.1:6379",        "LOCATION": "redis://service_redis:6379",                       "OPTIONS": {            "CLIENT_CLASS": "django_redis.client.DefaultClient",        }    }}

我们需要把这里host的mysql和location的redis换成服务的ip。首先来编写dockerfile

# 基础镜像FROM daocloud.io/python:3.6# 维护者信息MAINTAINER daba0007ADD dabaweb.tar.gz /usr/src/# app 所在目录WORKDIR /usr/src/dabawebRUN pip install xlutilsRUN pip install django-redis# 安装 app 所需依赖RUN pip install --no-cache-dir -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com# 启动执行命令COPY entrypoint.sh /usr/src/WORKDIR /usr/srcRUN chmod +x /usr/src/entrypoint.shENTRYPOINT ["/usr/src/entrypoint.sh"]

这里的启动脚本如下 entrypoint.sh

#!/bin/bashsed -i "s/service_mysql/$(echo $MYSQL_MASTER_SERVICE_HOST)/g" /usr/src/dabaweb/dabaweb/setting.pysed -i "s/service_redis/$(echo $REDIS_MASTER_SERVICE_HOST)/g" /usr/src/dabaweb/dabaweb/setting.py#使用uwsgi来启动django/usr/local/bin/uwsgi --http :8000 --chdir /usr/src/dabaweb -w dabaweb.wsgi

创建dockerfile,并且上传

docker build -t daba0007/dabaweb  .docker push daba0007/dabaweb

再构造一个nginx的dockerfile

FROM daba0007/nginxMAINTAINER daba0007RUN rm /etc/nginx/conf.d/default.confADD nginx-conf/ /etc/nginx/conf.d/

nginx服务连接dabaweb是在nginx.conf中proxy_pass,我们需要把web替代成localhost,因为是在同一个pod中。

server {    listen 80;    server_name localhost;    charset utf-8;    root   /usr/src/dabaweb;    access_log  /var/log/nginx/django.log;    location ^~ /static {        alias /usr/src/dabaweb/static;    }    location / {        proxy_pass http://localhost:8000;        proxy_set_header Host $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }}

那么我们需要挂载文件夹。编写dabacluster-rc.yaml

apiVersion: v1kind: ReplicationControllermetadata:  name: dabacluster  labels:    name: dabaclusterspec:  replicas: 3  selector:    name: dabacluster  template:    metadata:      labels:        name: dabacluster    spec:      containers:      - name: dabaweb        image: daba0007/dabaweb        env:        - name: GET_HOSTS_FROM          value: env        ports:        - containerPort: 8000        volumeMounts:        - name: dabaweb-dir          mountPath: /usr/src/dabaweb          readOnly: false      - name: dabanginx        image: daba0007/dabanginx        env:        - name: GET_HOSTS_FROM          value: env        ports:        - containerPort: 80        volumeMounts:         - name: dabaweb-dir          mountPath: /usr/src/dabaweb          readOnly: false      volumes:      - name: dabaweb-dir        hostPath:          path: /root/k8s/web/web/dabaweb/

然后执行

[root@k8s-master web]# kubectl create -f dabacluster-rc.yamlreplicationcontroller "dabacluster" created[root@k8s-master web]# kubectl get podNAME                 READY     STATUS    RESTARTS   AGEdabacluster-5kp26    2/2       Running   0          18sdabacluster-7dhsk    2/2       Running   0          18sdabacluster-mww8t    2/2       Running   0          18smysql-master-whtwd   1/1       Running   3          2dmysql-slave-6x8bx    1/1       Running   3          2dmysql-slave-n58vk    1/1       Running   3          2dredis-master-25bpz   1/1       Running   6          4dredis-slave-plrxq    1/1       Running   5          4dredis-slave-thb9r    1/1       Running   5          4d

再编写web服务web-svc.yaml,连接服务时,使用Service的NodePort给kubernetes集群中Service映射一个外网可以访问的端口,这样一来,外部就可以通过NodeIP+NodePort的方式访问集群中的服务了。

apiVersion: v1kind: Servicemetadata:  name: dabacluster  labels:    name: dabaclusterspec:  ports:    type: NodePort      - port: 80            targetPort: 80   nodePort: 32000                           # 指明暴露在外端口的port,即k8s中的80映射到主机上32000端口    selector:    name: dabacluster

然后执行

[root@k8s-master web]# kubectl create -f dabacluster-svc.yamlservice "dabacluster" createdNAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGEdabacluster    NodePort    10.68.64.177    
80:32000/TCP 10mkubernetes ClusterIP 10.68.0.1
443/TCP 4dmysql-master ClusterIP 10.68.83.79
3306/TCP 2dmysql-slave ClusterIP 10.68.208.186
3306/TCP 2dredis-master ClusterIP 10.68.69.173
6379/TCP 4dredis-slave ClusterIP 10.68.174.55
6379/TCP 4d

测试

访问 输入图片说明输入图片说明

节点

花了两大篇来介绍k8s,细心的人就会发现我们只说到了svc,rc和pod。我们之前构造k8s的时候是使用了三个节点,一个master和两个minion,在搭建web集群的过程中完全没提到啊,它们发生了什么?

其实对于每个节点(在我的集群中是三个,一个master和两个minion),他们负载的能力肯定是有限的。我们在每次写服务的时候,都会分配一些资源给节点。当一个节点的负载超额的时候(pod数量过多或系统资源不够分配),k8s会自动加入下一个节点,并且将这些超出的pod放到下一个节点中。也就是说,如果我们有足够多的节点,在master上操作的时候就感觉像是在一个超级计算机中,所有的需求都能满足。

一些常见的检查错误命令

进入某个节点查看

kubectl exec -ti mysql-master-whtwd  /bin/bash

得到log

kubectl logs -f [pods]                          # [pods]写入你pods的名字,也可以是rc,svc等等

删除

kubectl delete svc redis-masterkubectl delete rc redis-master

感谢以下博主提供的思路

我的代码都放在 上,欢迎大家下载学习。转载时请注明作者

转载于:https://my.oschina.net/daba0007/blog/1606600

你可能感兴趣的文章
Spring缓存注解@Cache使用
查看>>
去除wordpress的category各方法对比
查看>>
traceroute
查看>>
精通汇编语言,有兴趣一起搞破解的请进!
查看>>
C#缺省参数可以让代码变得更加简洁明了与时俱进心里敞亮了很多了
查看>>
【自然框架】js版的QuickPager分页控件 V2.0
查看>>
poj-2049 Finding Nemo *
查看>>
模块化编程本质探讨
查看>>
利用博客与视频分享和交流知识和经验
查看>>
js操作dom对象
查看>>
Windows2003服务器安全配置:先关闭不需要的端口(转自)
查看>>
HDU1247 Hat’s Words 【trie树】
查看>>
iOS开发--动画篇之layout动画深入
查看>>
WorldWind源码剖析系列:视景体类Frustum
查看>>
(转)完整java开发中JDBC连接数据库代码和步骤
查看>>
Redis Lua脚本原理
查看>>
有时间测试dism
查看>>
/Users/alamps/AndroidStudioProjects/Demo10ScrollView
查看>>
【Swift】iOS UICollectionView 计算 Cell 大小的陷阱
查看>>
为什么我刚发表的文章变成了“待审核”,csdn有没有官方解释啊
查看>>