之所以用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. 代理(Proxy)模式

    代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的反问. * 抽象主题角色(Subject):声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题. * ...

  2. 吐槽一下wp toolkit ToggleSwitch控件

    之前用法: <toolkit:ToggleSwitch> <toolkit:ToggleSwitch.Header> <TextBlock Text="2323 ...

  3. 平台播放声音(ext.js)

    首先把需要的两个js文件放在public/core路径下 (文件已经上传到博客了) 音频文件放在文件一级目录 代码:JxCustom.loadAudio("wav/NG.wav") ...

  4. openstack组件服务的入口寻找方法

    在centos7系统上,安装openstack服务以后,可以通过以下命令,查找到该系统上,已经安装的openstack服务 [root@xzto01n010027244133 ~]# systemct ...

  5. MVC,MVP 和 MVVM 的区别之处

    其实我一直以来,虽然做的是前端的工作,但是有一个疑问,就是什么是mvc模式,虽然大概知道,但是具体确实说不上来的的,今天,我就好好总结一下mvc ,mvp,mvvm模式的区别与相同. 1.MVC模式: ...

  6. HttpClient 基于连接池的使用

    场景:调用外部系统接口的http请求 要求: 1:可能是http请求,也可能是https请求 2:需要加入连接池的概念,不能每次发起请求都新建一个连接(每次连接握手三次,效率太低) 准备使用httpc ...

  7. 开发效率神器 uTools - 偏前端和 UI

    本文首发于:Bougie's Blog - 效率神器 uTools 前言 今天组内公众号推荐了 Mac 上的效率神器 Alfred. 详情链接:效率神器 Alfred workflow 插件推荐 早上 ...

  8. 【离散数学】 SDUT OJ 1.3按位AND和按位OR

    1.3按位AND和按位OR Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 已知长度为 ...

  9. ubutu16.04修改分辨率

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

  10. Android蓝牙连接自动测试工具

    蓝牙连接自动测试工具 1.需求产生 开发不按着需求走都是耍流氓且浪费时间.此工具的需求产生是研发人员在开发产品时涉及到蓝牙驱动和安卓蓝牙两个东西.但是呢,蓝牙不太稳定,那么工作来了.就需要研发人员一边 ...