k8s-应用部署
该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-应用部署的更多相关文章
- 持续集成之应用k8s自动部署
持续集成之应用k8s自动部署 Intro 上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如 ...
- k8s二进制部署
k8s二进制部署 1.环境准备 主机名 ip地址 角色 k8s-master01 10.0.0.10 master k8s-master02 10.0.0.11 master k8s-node01 1 ...
- Prometheus K8S中部署Alertmanager
Prometheus K8S中部署Alertmanager 设置告警和通知的主要步骤如下:一.部署Alertmanager二.配置Prometheus与Alertmanager通信三.配置告警 1. ...
- K8S CoreDNS部署失败,发现的一个问题
K8S CoreDNS部署失败,查看错误日志,提示如下 root >> kubectl get all --all-namespaces -o wide root >> kub ...
- Kubernetes之在k8s中部署Java应用
部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...
- kubernetes之三 使用kubectl在k8s上部署应用
在上一篇中,我们学习了使用minikube来搭建k8s集群.k8s集群启动后,就可以在上面部署应用了.本篇,我们就来学习如何使用kubectl在k8s上部署应用. 学习之前,可以先从下面这篇博客上了解 ...
- Docker & k8s 系列三:在k8s中部署单个服务实例
本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...
- 在k8s上部署日志系统elfk
日志系统elfk 前言 经过上周的技术预研,在本周一通过开会研究,根据公司的现有业务流量和技术栈,决定选择的日志系统方案为:elasticsearch(es)+logstash(lo)+filebea ...
- 优化:在k8s上部署的gitlab
gitlab组件图 gitlab在k8s上占用资源 # kubectl top pods -n default | grep git* gitlab-gitaly-0 9m 444Mi gitlab- ...
- 使用Rancher在K8S上部署高性能PHP应用程序
介 绍 PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码. 尽管P ...
随机推荐
- gRPC安装的小问题
INSTALL.md提到下述前提条件 #Pre-requisites ##Linux ```sh $ [sudo] apt-get install build-essential autoconf l ...
- 小菜鸟之java基础
1. javac 命令的作用: javac 编译器解析 Java 源代码,并生成字节码文件的过程 2. java为什么可以跨平台: ava有虚拟机(JVM),JAVA程序不是直接在电脑上运行的,是在虚 ...
- 【AtCoder】AGC002
AGC002 A - Range Product #include <bits/stdc++.h> #define fi first #define se second #define p ...
- 剑指offer26:将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
1 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 2 思路和方法 在二叉搜索树中,每个结点都有两个分别指向其左.右子树的 ...
- 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。
1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...
- HDU1401(双向BFS)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=1401 给你8*8的棋盘和4个棋子初始位置.最终位置,问你能否在8次操作后达到该状态. 思路: 双向BFS, ...
- 关于JS原型以及原型链、instanceof的一些理解
一.JS原型 首先要区分两个概念 1.构造函数 2.实例:由构造函数通过new方式创建出来的就是实例 <script> function Foo() { } var f = new Foo ...
- JAVA对存储过程的调用方法(本文源于网络)
博客分类: java java存储过程sql 一:Java如何实现对存储过程的调用: A:不带输出参数的 ---------------不带输出参数的-------------------- ...
- 简单分析BeanPostProcessor
1. 什么是BeanPostProcessorBeanPostProcessor是一个接口,有两个方法,分别是:Object postProcessBeforeInitialization(Objec ...
- LeetCode 腾讯精选50题--二叉树的最大深度
求二叉树的最大深度, 基本思路如下: 设定一个全局变量记录二叉树的深度,利用递归,没遍历一层都将临时深度变量+1,并在每一节点递归结束后判断深度大小. 具体代码如下: package algorith ...