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


声明:本文转载自https://my.oschina.net/daba0007/blog/1606600,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

附上链接:

docker构建web集群:https://my.oschina.net/daba0007/blog/1605365

kubenetes与web集群: https://my.oschina.net/daba0007/blog/1602425

k8s-web集群架构从零开始(1): https://my.oschina.net/daba0007/blog/1604526

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 daba0007  ADD dabaweb.tar.gz /usr/src/  # app 所在目录 WORKDIR /usr/src/dabaweb  RUN pip install xlutils  RUN 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/src RUN chmod +x /usr/src/entrypoint.sh ENTRYPOINT ["/usr/src/entrypoint.sh"]  

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

#!/bin/bash  sed -i "s/service_mysql/$(echo $MYSQL_MASTER_SERVICE_HOST)/g" /usr/src/dabaweb/dabaweb/setting.py  sed -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/nginx  MAINTAINER daba0007  RUN rm /etc/nginx/conf.d/default.conf ADD 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: v1 kind: ReplicationController metadata:   name: dabacluster   labels:     name: dabacluster spec:   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.yaml replicationcontroller "dabacluster" created  [root@k8s-master web]# kubectl get pod  NAME                 READY     STATUS    RESTARTS   AGE dabacluster-5kp26    2/2       Running   0          18s dabacluster-7dhsk    2/2       Running   0          18s dabacluster-mww8t    2/2       Running   0          18s mysql-master-whtwd   1/1       Running   3          2d mysql-slave-6x8bx    1/1       Running   3          2d mysql-slave-n58vk    1/1       Running   3          2d redis-master-25bpz   1/1       Running   6          4d redis-slave-plrxq    1/1       Running   5          4d redis-slave-thb9r    1/1       Running   5          4d  

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

apiVersion: v1 kind: Service metadata:   name: dabacluster   labels:     name: dabacluster spec:   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.yaml service "dabacluster" created  NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE dabacluster    NodePort    10.68.64.177    <none>        80:32000/TCP   10m kubernetes     ClusterIP   10.68.0.1       <none>        443/TCP        4d mysql-master   ClusterIP   10.68.83.79     <none>        3306/TCP       2d mysql-slave    ClusterIP   10.68.208.186   <none>        3306/TCP       2d redis-master   ClusterIP   10.68.69.173    <none>        6379/TCP       4d redis-slave    ClusterIP   10.68.174.55    <none>        6379/TCP       4d 

测试

访问http://ip:32000,发现成功的访问,说明服务启动成功 输入图片说明 输入图片说明

节点

花了两大篇来介绍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-master kubectl delete rc redis-master 

感谢以下博主提供的思路

  1. https://www.kubernetes.org.cn/doc-28

我的代码都放在 https://github.com/daba0007/k8s-web 上,欢迎大家下载学习。转载时请注明作者

本文发表于2018年01月15日 00:33
(c)注:本文转载自https://my.oschina.net/daba0007/blog/1606600,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2544 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1