之所以用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文件里边没有配这个拿到的机器名)。
 

 

k8s单节点集群部署应用的更多相关文章

  1. k8s 组件介绍__单Master集群部署

    参考链接:https://github.com/opsnull/follow-me-install-kubernetes-cluster kubernetes 概述 1.kubernetes 是什么 ...

  2. Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  3. ambari单节点集群塔建

    配置2台机器,发别为ambari01.ambari03.ambari01上部署Ambari-server和Mirror server,另一台机器上部署agent. 一.配置静态IP 运行命令,让配置生 ...

  4. Hadoop 2.6.4单节点集群配置

    1.安装配置步骤 # wget http://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.rpm # rpm -i ...

  5. 说说单节点集群里安装hive、3\5节点集群里安装hive的诡异区别

    这几天,无意之间,被这件事情给迷惑,不解!先暂时贴于此,以后再解决! 详细问题如下: 在hive的安装目录下(我这里是 /home/hadoop/app/hive-1.2.1),hive的安装目录的l ...

  6. Windows下ELK环境搭建(单机多节点集群部署)

    1.背景 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时 ...

  7. k8s, etcd 多节点集群部署问题排查记录

    目录 文章目录 目录 部署环境 1. etcd 集群启动失败 解决 2. etcd 健康状态检查失败 解决 3. kube-apiserver 启动失败 解决 4. kubelet 启动失败 解决 5 ...

  8. mongodb 单节点集群配置 (开发环境)

    最近项目会用到mongodb的oplog触发业务流程,开发时的debug很不方便.所以在本地创建一个单台mongodb 集群进行开发debug. 大概:mongodb可以产生oplog的部署方式应该是 ...

  9. Elasticsearch单机双节点集群部署实战

    一.安装第一个ElasticSearch(主节点) 1.创建es用户,启动es不能使用root用户 useradd es passwd es12 root用户进入/home/es目录下 2.获取Ela ...

随机推荐

  1. C# 的 Task、Thread、ThreadPool 之间有什么异同?

    Thread就是Thread,需要自己调度,适合长跑型的操作. ThreadPool是Thread基础上的一个线程池,目的是减少频繁创建线程的开销.线程很贵,要开新的stack,要增加CPU上下文切换 ...

  2. vs2010 在win8附加进程调试小技巧

    在win8 附加进程居然找不到 我要的是iis 名为HKFlight的web的进程(下面2个勾也勾上了,就是找不到它)(下图是管理员身份运行截图) 解决方法:打开vs2010 用管理员身份打开...其 ...

  3. IE11下使用fixed定位时鼠标滚动不平滑

    很久不用IE了,近期做兼容性测试发现一个fixed定位的问题,当元素使用fixed定位时,其应该不随页面滚动,在chrome/firefox/edge下都很完美,元素完全不动,但是使用IE11时,如果 ...

  4. LoadRunner---杂问题&接口测试

    问题1] 响应时间是系统完成事务执行准备后所采集的时间戳和系统完成待执行事务后所采集的时间戳之间的时间间隔,是衡量特定类型应用事务性能的重要指标,标志了用户执行一项操作大致需要多长时间.[问题2] 系 ...

  5. 316. Remove Duplicate Letters (accumulate -> count of the difference elements in a vector)

    Given a string which contains only lowercase letters, remove duplicate letters so that every letter ...

  6. saltstack平台基础

    saltstack概述saltstack是基于python开发的一套C/S架构配置管理工具,使用SSL证书签方的方式进行认证管理底层使用ZeroMQ消息队列pub/sub方式通信   号称世界上最快的 ...

  7. Ubuntu16.04搭建各种开发环境的IDE: QT5 , CodeBlocks ,eclipse-cdt, PyCharm

    搭建Ubuntu下C/C++以及Python的集成开发环境,采用双系统(Win7+Ubuntu)的Ubuntu16.04-LTS系统, 关于双系统的搭建可以参考下面博客(图文十分详细):https:/ ...

  8. Web Service入门

    [IT168 技术文档] 一.什么是Web Service?     Web Service是构建互联网分布式系统的基本部件.Web Services 正成为企业应用集成(Enterprise App ...

  9. Leetcode 8. String to Integer (atoi) atoi函数实现 (字符串)

    Leetcode 8. String to Integer (atoi) atoi函数实现 (字符串) 题目描述 实现atoi函数,将一个字符串转化为数字 测试样例 Input: "42&q ...

  10. ubutu16.04修改分辨率

    http://blog.csdn.net/oiken/article/details/71088230 vmware不能自动适应Ubuntu16.04的分辨率,而且Ubuntu16.04的displa ...