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 ...
随机推荐
- pptpd的log整理
前言: 最近有时候,我的pptpd会莫名崩掉.这时,在外边的我连不到内网,气的一比. 这时候,就需要去查一查log日志了. 所以就记录一下怎么调日志的: 1. 修改/etc/ppp/pptpd.o ...
- 记:linux服务器启动重启WEB项目启动成功,长时间卡住未响应
问题 云服务器部署web项目,每次正常启动项目后访问页面很久才能有响应,一直卡在INFO: Deploying web application directory ......长达几分钟以上,极度影响 ...
- axios设置请求头内容
axios设置请求头中的Authorization 和 cookie 信息: GET请求 axios.get(urlString, { headers: { 'Authorization': 'Bea ...
- table固定头部,tbody内容滚动
直觉的感受是修改thead与tbody,尝试了以下几种方法,但均告失败. 1. 将tbody设置为块状元素,然后设置表格的高度与溢出: 1. 将thead设置为绝对定位,然后设置表格的高度与溢出: 1 ...
- [转帖]curl网站开发指南
curl网站开发指南 http://www.ruanyifeng.com/blog/2011/09/curl.html linux 里面有非常多很好的工具 比如这个 curl 之前 以为 wget 就 ...
- 真理胜于一切 JAVA模拟表单提交
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- http无状态和鉴权解决四种方案
http协议本身是无状态的,但是在实际的web开发中常有一些操作需要有状态.比如想要访问一些私人访问权限的文章,或者这种操作需要明确当前用户身份. 显然,最简单的方案就是每次都发送账户和密码,但是这样 ...
- Kubernetes---Service(SVC)服务--ingress api
对于k8s传统的svc来说 它仅支持4层代理,如果遇到7层代理的话,是没有办法去实现的 k8s官方在1.11中推出了ingress api接口,通过ingress达到7层代理的效果 对于ingress ...
- taglib block
新建文件 package com.augmentum.oes.taglib; import javax.servlet.jsp.JspException; import javax.servlet.j ...
- ideaIU-2019.2.exe-安装目录和设置目录结构的说明
一.查看安装目录结构 bin: 容器,执行文件和启动参数等 help:快捷键文档和其他帮助文档 jbr: 含有java运行环境 lib:idea 依赖的类库 license:各个插件许可 plugin ...