之所以用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. ORACLE_EBS_R12_采购到入库所经历的表

    --采购到入库所经历的表 --0.请购单 --创建请购单方式有 --a.从外挂系统导入请购的接口表PO_REQUISITIONS_INTERFACE_ALL,并允许请求(名称:导入申请) SELECT ...

  2. 比特币技术之迷-Transaction 交换

    Transaction 交换每个客户端都会广播本地生成的Transaction,并转给来自其它节点的Transaction,本文主要描述Transaction之间的交换与流转过程. 大家也可以阅读以下 ...

  3. arp欺骗进行流量截获-2

    上一篇讲了原理,那么这一篇主要讲如何实现.基本上也就是实现上面的两个步骤,这里基于gopacket实现,我会带着大家一步步详细把每个步骤都讲到. ARP 欺骗 首先就是伪造ARP请求,让A和B把数据包 ...

  4. 【大数据之数据仓库】安装部署GreenPlum集群

    本篇将向大家介绍如何快捷的安装部署GreenPlum测试集群,大家可以跟着我一块儿实践一把^_^ 1.主机资源 申请2台网易云主机,操作系统必须是RedHat或者CentOS,配置尽量高一点.如果是s ...

  5. Struts2学习第3天--OGNL、EL、值栈

    JAVA中的OGNL: 1 调用对象的方法: 2 访问对象的静态方法: 3 获取OGNLContext.Root中的数据. User: 4 访问Context: 关键还是在Struts2环境中的使用: ...

  6. tcp连接过程中的三次握手和四次挥手

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手握手建立连接 @第一次握手: 建立连接是,客户端A发送SYN包到服务器B,并进入SYN_SEND状态,等待B确认. @第二次握手: 服务 ...

  7. 【bzoj4709】[Jsoi2011]柠檬 决策单调性+dp

    Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...

  8. numpy.histogram 官方手册

    numpy.histogram numpy.histogram(a, bins=10, range=None, normed=False, weights=None, density=None) Co ...

  9. php 写入csv时 双引号,逗号及特殊字符

    1.双引号 <?php function new_csv($string) { $filename = date('Ymd').'.csv'; //设置文件名 header("Cont ...

  10. TX2 dts、dtb编译与反编译

    设备树(Device Tree)包括DTC(device tree compiler),DTS(device tree source和DTB(device tree blob). dtc编译器能够把 ...