该demo主要作为一个dubbo项目通过maven自动化docker打包插件发布到镜像仓库样例工程。该wiki后面同时会提供k8s部署zk,mysql,应用包的整个过程。该项目大体功能:zk作为注册中心,服务端发布服务,消费端订阅服务,在调用过程中访问mysql数据库。

环境准备:k8s集群,以及配置好kubectl客户端工具.

项目源码:https://github.com/HushAsy/demo

1.provider,consumer镜像制作:

关于自动化镜像发布,可以参考我的另一篇文章:https://www.cnblogs.com/HushAsy/p/9896196.html

此处贴出Dockerfile文件:

FROM registry.cn-hangzhou.aliyuncs.com/hush/basecontainer:

#添加本地jar包
RUN mkdir -p /home/admin/app/
RUN mkdir -p /home/admin/tomcat/
ENV CATALINA_HOME /home/admin/tomcat/
#
ARG JAR_FILE ADD target/${JAR_FILE} /home/admin/app/
#
#
#
# 将启动命令写入启动脚本 start.sh
RUN echo "$JAVA_HOME/bin/java -jar $JAVA_OPTS -Ddubbo.address.ip=$POD_IP -Djava.security.egd=file:/dev/./urandom /home/admin/app/${JAR_FILE} --spring.profiles.active=prod" > /home/admin/start.sh && chmod +x /home/admin/start.sh
WORKDIR $CATALINA_HOME
ENTRYPOINT ["/bin/bash", "/home/admin/start.sh"]

2.mysql-app.yaml

#mysql-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
replicas:
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_mysql
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: ""
ports:
- containerPort:
name: mysql
#在客户端提交yaml文件创建pod
kubectl create -f mysql-app.yaml
#创建成功后,执行下面命名可以看到当前pod执行情况
kubectl get pods

3.mysql service yaml配置

#mysql-srv.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port:
selector:
app: mysql

4.zk.yaml配置

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: zk-
spec:
replicas:
template:
metadata:
labels:
app: zk
node: node0
spec:
hostname: zk-
volumes:
- name: zk-data
hostPath:
path: /data/zk-cluster/zk-data-
- name: zk-logs
hostPath:
path: /data/zk-cluster/zk-logs-
containers:
- name: zk-
image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_zk
imagePullPolicy: IfNotPresent
volumeMounts:
- name: zk-data
readOnly: false
mountPath: "/data/zk-data"
- name: zk-logs
readOnly: false
mountPath: "/data/zk-logs"
ports:
- containerPort:
- containerPort:
- containerPort:
#command: ['tail', '-f', '/etc/hosts']
env:
- name: ZOO_MY_ID
value: ''
- name: ZOO_SERVERS
# 注意!!k8s使用到virtual ip,因此,本机必须使用0.0.0. ip地址,否则本机zk启动会异常:
# ERROR [zk1/10.0.0.251::QuorumCnxManager$Listener@] - Exception while listening
# java.net.BindException: Address not available (Bind failed)错误
value: server.=0.0.0.0:: server.=zk-:: server.=zk-::
- name: ZOO_DATA_DIR
value: '/data/zk-data'
- name: ZOO_DATA_LOG_DIR
value: '/data/zk-logs' ---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: zk-
spec:
replicas:
template:
metadata:
labels:
app: zk
node: node1
spec:
hostname: zk-
volumes:
- name: zk-data
hostPath:
path: /data/zk-cluster/zk-data-
- name: zk-logs
hostPath:
path: /data/zk-cluster/zk-logs-
containers:
- name: zk-
image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_zk
imagePullPolicy: IfNotPresent
volumeMounts:
- name: zk-data
readOnly: false
mountPath: "/data/zk-data"
- name: zk-logs
readOnly: false
mountPath: "/data/zk-logs"
ports:
- containerPort:
- containerPort:
- containerPort:
#command: ['tail', '-f', '/etc/hosts']
env:
- name: ZOO_MY_ID
value: ''
- name: ZOO_SERVERS
# 注意!!k8s使用到virtual ip,因此,本机必须使用0.0.0. ip地址,否则本机zk启动会异常:
# ERROR [zk1/10.0.0.251::QuorumCnxManager$Listener@] - Exception while listening
# java.net.BindException: Address not available (Bind failed)错误
value: server.=zk-:: server.=0.0.0.0:: server.=zk-::
- name: ZOO_DATA_DIR
value: '/data/zk-data'
- name: ZOO_DATA_LOG_DIR
value: '/data/zk-logs' ---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: zk-
spec:
replicas:
template:
metadata:
labels:
app: zk
node: node2
spec:
hostname: zk-
volumes:
- name: zk-data
hostPath:
path: /data/zk-cluster/zk-data-
- name: zk-logs
hostPath:
path: /data/zk-cluster/zk-logs-
containers:
- name: zk-
image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_zk
imagePullPolicy: IfNotPresent
volumeMounts:
- name: zk-data
readOnly: false
mountPath: "/data/zk-data"
- name: zk-logs
readOnly: false
mountPath: "/data/zk-logs"
ports:
- containerPort:
- containerPort:
- containerPort:
#command: ['tail', '-f', '/etc/hosts']
env:
- name: ZOO_MY_ID
value: ''
- name: ZOO_SERVERS
# 注意!!k8s使用到virtual ip,因此,本机必须使用0.0.0. ip地址,否则本机zk启动会异常:
# ERROR [zk1/10.0.0.251::QuorumCnxManager$Listener@] - Exception while listening
# java.net.BindException: Address not available (Bind failed)错误
value: server.=zk-:: server.=zk-:: server.=0.0.0.0::
- name: ZOO_DATA_DIR
value: '/data/zk-data'
- name: ZOO_DATA_LOG_DIR
value: '/data/zk-logs'

5.zk service yaml配置

---
kind: Service
apiVersion: v1
metadata:
name: zk-
labels:
app: zk
node: node0
spec:
type: LoadBalancer
ports:
- name: port-
port:
- name: port-
port:
- name: port-
port:
selector:
app: zk
node: node0 ---
kind: Service
apiVersion: v1
metadata:
name: zk-
labels:
app: zk
node: node1
spec:
type: LoadBalancer
ports:
- name: port-
port:
- name: port-
port:
- name: port-
port:
selector:
app: zk
node: node1 ---
kind: Service
apiVersion: v1
metadata:
name: zk-
labels:
app: zk
node: node2
spec:
type: LoadBalancer
ports:
- name: port-
port:
- name: port-
port:
- name: port-
port:
selector:
app: zk
node: node2

6.部署provider yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: provider
labels:
app: provider
spec:
replicas: 1
selector:
matchLabels:
app: provider
template:
metadata:
labels:
app: provider
spec:
containers:
- name: provider
image: <镜像地址>
ports:
- containerPort:

7.consumer deployment yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: consumer
labels:
app: consumer
spec:
replicas:
selector:
matchLabels:
app: consumer
template:
metadata:
labels:
app: consumer
spec:
containers:
- name: consumer
image: <镜像地址>
ports:
- containerPort:

8.consumer service yaml

kind: Service
apiVersion: v1
metadata:
name: consumer_svc
spec:
selector:
app: consumer
ports:
- protocol: TCP
port:

9. 前端访问控制 ingress 可以瞅瞅这位哥写的博客:https://mritd.me/2017/03/04/how-to-use-nginx-ingress/

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: <host>
http:
paths:
- path: /index
backend:
serviceName: consumer_svc
servicePort:

通过对应域名或ip访问 完美

k8s-应用部署的更多相关文章

  1. 持续集成之应用k8s自动部署

    持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...

  2. k8s二进制部署

    k8s二进制部署 1.环境准备 主机名 ip地址 角色 k8s-master01 10.0.0.10 master k8s-master02 10.0.0.11 master k8s-node01 1 ...

  3. Prometheus K8S中部署Alertmanager

    Prometheus K8S中部署Alertmanager 设置告警和通知的主要步骤如下:一.部署Alertmanager二.配置Prometheus与Alertmanager通信三.配置告警 1. ...

  4. K8S CoreDNS部署失败,发现的一个问题

    K8S CoreDNS部署失败,查看错误日志,提示如下 root >> kubectl get all --all-namespaces -o wide root >> kub ...

  5. Kubernetes之在k8s中部署Java应用

    部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...

  6. kubernetes之三 使用kubectl在k8s上部署应用

    在上一篇中,我们学习了使用minikube来搭建k8s集群.k8s集群启动后,就可以在上面部署应用了.本篇,我们就来学习如何使用kubectl在k8s上部署应用. 学习之前,可以先从下面这篇博客上了解 ...

  7. Docker & k8s 系列三:在k8s中部署单个服务实例

    本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...

  8. 在k8s上部署日志系统elfk

    日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...

  9. 优化:在k8s上部署的gitlab

    gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...

  10. 使用Rancher在K8S上部署高性能PHP应用程序

    介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...

随机推荐

  1. Java编程思想(二)一切都是对象

    2.1用句柄操纵对象 尽管一切都看作是对象,但是操纵的标识符实际上是指向一个对象的“句柄”(handdle): 拥有一个句柄并不表示必须有一个对象同他连接: String  s:   这里创建的只是句 ...

  2. Numbers(CodeForces-128D)【思维/list】

    题目链接:https://vjudge.net/problem/CodeForces-128D 题意:给出一组数,要求将这些数排列成一个环,满足每相邻两个数的差值为1,问能否完成. 思路:先取出最小的 ...

  3. WPF 位图处理相关类

    位图的存储方式 开始之前,先了解下位图的存储方式 位图的像素都分配有特定的位置和颜色值.每个像素的颜色信息由RGB组合或者灰度值表示,根据位深度,可将位图分为1.4.8.16.24及32位图像等.每个 ...

  4. nginx 实践配置

    nginx.conf文件 user root; worker_processes 1; error_log logs/error.log crit; #error_log logs/error.log ...

  5. PBE加密 .net 实现

    using System; using System.Security.Cryptography; using System.Text; namespace Demo { internal class ...

  6. WinSockAPI多线程服务器

    运行效果: 程序: // TcpServer.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream&g ...

  7. 你真的了解new function(){} 和 function(){}()吗?

    只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实 ...

  8. cmd设置电脑自动关机

    cmd设置电脑自动关机 设置:(3600代表一小时,单位s) shutdown -s -t 3600 取消 shutdown -a

  9. TypeScript入门三:TypeScript函数类型

    TypeScript函数类型 TypeScript函数的参数 TypeScript函数的this与箭头函数 TypeScript函数重载 一.TypeScript函数类型 在上一篇博客中已经对声明Ty ...

  10. 微信小程序手动实现select下拉框选择

    在小程序中没有像h5中的下拉 标签的 picker又满足部了,那就自己动手写 <view class='list-msg'> <view class='list-msg1'> ...