k8s单节点集群部署应用
2018-09-01 11:36
239 查看
之所以用k8s来部署应用,就是因为k8s可以灵活的控制集群规模,进行扩充或者收缩。生产上我们要配置的参数较多,命令行的方式显然不能满足需求,我们应该使用基于配置文件的方式。接下来做一个部署的demo:
-------------------------------------------------------------------------------------------------------------------------------
场景:一个数据库,一个应用程序,数据库要暴露接口,并把数据挂载到物理机上,应用程序连接数据库,正常启动。
数据库yaml文件:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: db-service labels: name: db-service spec: replicas: 1 template: # template就是对pod对象的定义 metadata: labels: name: db-service spec: restartPolicy: Always containers: - name: db-service image: postgres:latest ports: - containerPort: 5432 volumeMounts: - name: data mountPath: /var/lib/postgresql/data #容器中的路径 volumes: - name: data hostPath: path: /Users/nm/Desktop/pgdata1 #物理机路径 --- apiVersion: v1 kind: Service metadata: name: db-service labels: name: db-service spec: type: NodePort ports: - nodePort: 30000 #对外端口 port: 5432 #集群内部端口 targetPort: 5432 #对应的容器端口 protocol: TCP selector: name: db-service需要注意的是各个name要统一(没理清究竟哪些要保持统一),挂载的卷,此示例是本机的写法,如果是其它机器的共享盘,应采用如下方式 程序的yaml文件:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: aaaa-service labels: name: aaaa-service spec: replicas: 1 template: # template就是对pod对象的定义 metadata: labels: name: aaaa-service spec: restartPolicy: Always containers: - name: aaaa-service image: aaaaapp:v3 ports: - containerPort: 80 - containerPort: 8761 - containerPort: 9080 - containerPort: 9081 volumeMounts: - name: startscript mountPath: /opt/config volumes: - name: startscript hostPath: path: /Users/nm/Desktop/deploy/web/config --- apiVersion: v1 kind: Service metadata: name: aaaa-service labels: name: aaaa-service spec: type: NodePort ports: - nodePort: 30001 port: 80 name: nginx targetPort: 80 protocol: TCP - nodePort: 30002 port: 8761 name: eureka targetPort: 8761 protocol: TCP - nodePort: 31000 port: 9080 name: web targetPort: 9080 protocol: TCP - nodePort: 31001 port: 9081 name: ms targetPort: 9081 protocol: TCP selector: name: aaaa-service注意,程序中访问数据库的方式:jdbc:postgresql://db-service:5432/mytest,这个db-service就是上文中数据库的service的名字,在集群中会被kube-proxy解析为具体的集群内部ip。 -------------------------------------------------- 需要吐槽的是mac上的docker for mac自带的k8s,由于docker-hyperkit这个组件的bug,仍然很难使用,会导致cpu暴涨。我本地是有三个pod,然后就卡死了: 查了下,还挺多人有这个问题,官方的ssues也有不少人提这个bug,但,,,目前仍未修复,我的docker for mac版本是18.06.0 k8s学习过程中,挺多的坑都是docker组件或者minikube的一些bug导致的,可能是在mac平台没怎么优化的问题吧。不得不说,这一点上,挺坑的。 ------------------------------------------------ 生产环境部署完了,又碰到几个小坑: 1、k8s不同版本的命令有差别,我本地1.10版本,起服务直接kubectl create -f 即可;服务器是1.5,需要kubectl -s k8s的serverip:port create -f ; 一开始不知道这个细节,还以为集群环境配错了,这个绕了一下; 2、eureka的生产者配置,这个算是自己学艺不精留下的坑;如果服务要注册到eureka server上,供他人使用,需要eureka.instance.preferIpAddress=true; 因为spring cloud默认是把机器名注册到eureka server了,而不是本机的ip,不配置这个,别的service从eureka拿到的实例地址是机器名称,会报host lost之类的错误(因为pod中的hosts文件里边没有配这个拿到的机器名)。
相关文章推荐
- 使用概要管理工具创建定制概要文件,并在此节点上 创建集群以及在集群服务器中部署应用
- 消息中间件kafka+zookeeper集群部署、测试与应用(1)
- Tomcat集群应用部署的实现机制
- CentOS7.3部署Kubernetes1.10集群及相关基础应用
- kubeadm部署k8s1.9高可用集群--4部署master节点
- 润乾报表Weblogic集群配置__部署润乾应用
- Kafka 安装部署及使用(单节点/集群)
- Hadoop集群配置【三、多节点部署】
- Storm应用系列之——集群部署
- apache配置weblogic部署集群,多节点的项目和单节点项目并存 负载均衡
- RHCS多节点部署应用企业环境 推荐
- 实战部署weblogic集群及发布应用(5)
- 使用 Docker 部署和迁移多节点的 ElasticSearch-Logstash-Kibana 集群
- Tomcat集群应用部署的实现机制
- websphere服务器之was应用部署(集群部署)
- Kubernetes1.3新特性:集群联盟-在全球快速部署和管理应用
- 实战部署weblogic集群及发布应用(1)
- 实战部署weblogic集群及发布应用(6)
- Ceph集群部署文档(4节点)
- 搭建及使用K8s集群 <k8s 集群部署springcloud 多应用>