该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. ajax head带参数两次请求

    ajax请求head里带数据 客户端先发一次option看看能不能登录,然后再发一次post

  2. rdbtool

    https://www.cnblogs.com/wjoyxt/p/10577361.html https://github.com/sripathikrishnan/redis-rdb-tools h ...

  3. 《MIT 6.828 Homework 2: Shell》解题报告

    Homework 2的网站链接:MIT 6.828 Homework 2: shell 题目 下载sh.c文件,在文件中添加相应代码,以支持以下关于shell的功能: 实现简单shell命令,比如ca ...

  4. [Cometoj#3 C]子序列子序列子序列..._动态规划_数论

    子序列子序列子序列... 题目链接:https://cometoj.com/contest/38/problem/C?problem_id=1542 数据范围:略. 题解: 神仙题,感觉这个题比$D$ ...

  5. cs3动画

    css3 3d学习心得 卡片反转 魔方 banner图 首先我们要学习好css3 3d一定要有一定的立体感 通过这个图片应该清楚的了解到了x轴 y轴 z轴是什么概念了. 首先先给大家看一个小例子: 卡 ...

  6. 实时监控服务器某个端口状态TCPing

    在给客户做运维服务期间,发现了一个奇怪的现象:备份系统(第三方国产)告警日志显示,每天晚上备份服务器的客户端在3点左右离线然后上线,再离线再上线,每晚两次,很是诡异. 联系了厂家技术支持,前后花了两天 ...

  7. TypeScript的类型

    ⒈TypeScript的类型 JavaScript语言的数据类型包括以下7种: 1.boolean(布尔),true || false 2.null,表明null值得特殊关键字,JavaScript是 ...

  8. 网络流+最小生成树的最少割边数--How Many to Be Happy?

    题意:https://blog.csdn.net/Ratina/article/details/95200594 思路: 首先我们知道最小生成树就是按长度枚举边,能连就连. 那么,如果这条边在最小生成 ...

  9. 9.ssh登录慢

    修改方式:使用root权限修改ssh的配置文件,vim /etc/ssh/sshd_config增加一行记录:UseDNS no修改GSSAPIAuthentication参数为 no,默认是yesP ...

  10. NIPS2018最佳论文解读:Neural Ordinary Differential Equations

    NIPS2018最佳论文解读:Neural Ordinary Differential Equations 雷锋网2019-01-10 23:32     雷锋网 AI 科技评论按,不久前,NeurI ...